ArcGIS API For JS空间参考系的浅析

一、概述

我们都知道点的意义在于坐标,没在不同的坐标系下我们的代表位置不同,坐标对于地图至关重要,缺少了坐标系地图毫无意义,我们都知道坐标一般分为地理坐标系和投影坐标系,地理坐标系用(lon, lat)表示,而投影坐标系用(x,y)表示,二者一个代表球面,一个代表平面,在arcgis中我们创建map容器时可以设置指定的坐标系,通过extent指定spatialReference.wkid,也可以不指定,当我们不指定的时候,map的空坐标系会根据第一个加载到地图容器的图层的坐标系,采用第一个图层加载到图层的坐标系,这也就是为什么加载我们一般先加载静态地图,无论layer的坐标系如何,我们都加在到map中,所以必须保证map的spatialReference和layer的spatialReference一致即可,有时候会需要我们进行转换,当然也不尽然完全可以转换。由于Web墨卡托投影的广泛使用spatialReference类专门有一个方法判断坐标系是否为Web墨卡托投影→isWebMercator,返回值是布尔类型。

二、关于坐标转换的问题

在"esri/geometry/webMercatorUtils"命名空间下有个webMercatorUtils类用于地理坐标系和墨卡托的转换

1、geographicToWebMercator(geometry)方法

用于地理坐标经纬度转换为Web墨卡托投影想x,y坐标

代码示例:

    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()) return;
    //表示当前map不是地理坐标系统,那我们就需要转换line了,告诉它line里面的114,30...这些点其实是          lon,lat而不是x,y,否则就飞到海里去了
    line = webMercatorUtils.geographicToWebMercator(line);
    polyline = new Graphic(line, symbolLine);

2、webMercatorToGeographic(geometry, isLinear?)方法

用于将投影坐标系转为地理坐标系。

代码示例:

    var paths = this.getPaths(obj.coords),
        sr = this.map.spatialReference,
        line, polyline;
    //坐标为空直接返回
    if (!paths) return;
    //paths里面是一串用X,Y表示的点,属于投影坐标系
    line = new Polyline({ paths: paths, spatialReference: sr });
    //判断sr是否是为墨卡托投影
    if (!sr.isWebMercator()) return;
    //表示当前坐标系不是墨卡托投影坐标系就返回
    line = webMercatorUtils.webMercatorToGeographic(line);
    polyline = new Graphic(line, symbolLine);

三、那些类会用到坐标系

扫描二维码关注公众号,回复: 2726511 查看本文章

1、map,通过extent设置坐标系

2、Geometry的子类

四、关于map容器和Layer的坐标系问题

我们在实例化地图类,如果指定投影,那么就要确保所有的图层都能使用该投影进行绘制,对于切片图层,必须要求其投影和地图投影一致;对于动态图层如果地图类指定的为投影坐标系分为以下两种情况:

1、动态图层为投影坐标系,map为投影坐标系(也可以为地理坐标系),此时动态图层需要进行转换。

2、动态图层为地理坐标系,map为投影坐标系(也可以为地理坐标系),此时动态图层不需要进行转换。

猜你喜欢

转载自blog.csdn.net/weixin_40184249/article/details/81388035