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地图
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好友
复制链接分享给好友或者自己收藏!这里会及时更新中。。。

相关推荐:
 
QQ
QQ:278325424
咨询热线
18191066384