arcgis开发 >> arcgis api for javascript地图显示及投影坐标系
最后编辑时间:2021年06月04日 10:25:16【内容简介】spatialReference(sr)简单的说,代表坐标系。我们知道,有地理坐标系统(lon, lat)和投影坐标系统(x, y)之分,根据所取参数不同,又细分为形形色色的坐标系。
jsapi包可以下载下来也可以使用在线的
这里是在线部署:
<link rel="stylesheet" href="https://js.arcgis.com/3.15/esri/css/esri.css">
<script src="https://js.arcgis.com/3.15/"></script>
当然也可以本地化部署哦。
加载arcgis api for javascript地图
当然也可以本地化部署哦。
加载arcgis api for javascript地图
require([ 'esri/map', 'esri/geometry/Extent','esri/layers/ArcGISTiledMapServiceLayer', 'esri/layers/ArcGISDynamicMapServiceLayer', ], function ( Map, Extent, ArcGISTiledMapServiceLayer, ArcGISDynamicMapServiceLayer, ) { //地图服务地址 var BASE_SERVER = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer', //地图对象 map; function createMap(data) { //这里extent指定了map初始化时的显示范围,extent里除了xmin,xmax,ymin,ymax还有个重要属性spatialReference,即在此时确定了map的坐标系 //extent不是必选参数,创建map时除了容器ID是必需的,其它参数都是可选的 map = new Map('mapDiv', {extent: new Extent(data.initialExtent)}); //这是我们的底图,如果不是瓦片数据地图,就new ArcGISDynamicMapServiceLayer var layer = new ArcGISTiledMapServiceLayer(BASE_SERVER); //map成功加载第一张地图时触发 dojo.connect(map, 'onLoad', function(map) { //继续加载别的地图 var layer2 = new ArcGISDynamicMapServiceLayer(SERVER2); //设置只显示哪些图层 layer2.setVisibleLayers([0, 1]); map.addLayer(layer2); //给map注册事件等等 //...... }); //加载图层 map.addLayer(layer); } //获取地图服务的json数据,在本文这个例子里没有什么特别作用,不要也可以 $.get(BASEMAP_SERVER, { f: 'json' }, createMap, 'jsonp'); });
地理坐标系统(lon, lat)和投影坐标系统
我们知道,有地理坐标系统(lon, lat)和投影坐标系统(x, y)之分,根据所取参数不同,又细分为形形色色的坐标系。
我们在应用里会调用多个地图服务,它们很有可能采用不同的坐标系,即spatialReference.wkid值不同,但最终它们都得正确的落在同一个map上。
也就是layer要重新投影转换以使它的sr同map的sr保持一致。
有些layer可以自动转换,有些需要我们用代码控制转换,有些则无法转换。
手动转换也不复杂,jsapi提供了这样一个对象
require(["esri/geometry/webMercatorUtils"], function(webMercatorUtils) { /* code goes here */ });
var paths = this.getPaths(obj.coords), sr = this.map.spatialReference, line, polyline; if (!paths) return; //paths里面是一串用经纬度表示的点,属于地理坐标系 line = new Polyline({ paths: paths, spatialReference: sr }); //判断sr是否是投影坐标系统 if (sr.isWebMercator()) //表示当前map不是地理坐标系统,那我们就需要转换line了,告诉它line里面的114,30...这些点其实是lon,lat而不是x,y,否则就飞到海里去了 line = webMercatorUtils.geographicToWebMercator(line); polyline = new Graphic(line, symbolLine); this.map.graphics.add(polyline); this.map.setExtent(line.getExtent().expand(1));
分享到: 豆瓣 新浪微博 百度贴吧 QQ空间 QQ好友
复制链接分享给好友或者自己收藏!这里会及时更新中。。。
相关推荐: