1. 前言
需要了解的两个概念:
地理坐标系统:GIS 描述显示世界中的对象是通过对象的空间位置、属性、时间来描述,而空间中的位置就是通过建立地理坐标系,也就是经纬网来进行描述,形成的坐标系统我们称为地理坐标系统。
投影坐标系统:我们的地球是不规则的球体,初中地理上我们都学过“两极稍扁,赤道略鼓的不规则球体”来描述地球,所以是不能够将地球面上的内容展示在平面上,我们必须要进行坐标变换,需要找到一种合理的地图投影的方法来进行曲面转平面,建立一个从球面转平面的函数关系,使地球上任意一点都可以在平面上所对应,这类通过投影变换后的坐标系统称为投影坐标系统,比如我们经常听到的 墨卡托、高斯克里格投影等。
2. 空间参考系统类
ArcGIS API 中提供"esri/SpatialReference" 类来描述空间坐标系统,该类最简单的实例化方式是使用由欧洲石油调查组织定义的ID (又称为 WKID)作为参数,代码如下:
require(["esri/SpatialReference",...],function(SpatialReference,...) { var sr = new SpatialReference(4326);...});
上面实例化了一个 SpatialReference 对象,作用就是定义了一个"GCS_WGS_1984" 地理坐标系统。其中4326 就是我们前面所说的 ID ,有关支持的空间参考的列表,可以参阅投影坐标系统和地理坐标系统。
这些空间参考通常用字符串格式定义各种参数,例如前面所说的"GCS_WGS_1984" 地理坐标系统,他的定义字符串如下:
地理坐标系的名称、大地基准面(DATUM)、椭球体(SPHEROID)、本初子午线(PRIMEM)、单位(UNIT)
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
投影坐标系统的字符串格式除了包含地理坐标系统要求的信息外,还包含了投影的参数信息。例如下面是ID 号为102113的WGS_1984_Web_Mercator 的投影的字符串信息:
PROJCS["WGS_1984_Web_Mercator",GEOGCS["GCS_WGS_1984_Major_Auxiliary_Sphere",DATUM["D_WGS_1984_Major_Auxiliary_Sphere",SPHEROID["WGS_1984_Major_Auxiliary_Sphere",6378137.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],UNIT["Meter",1.0]]
可以看到上面定义椭球体时,第二个参数为0,这也就是它与常规墨卡托投影的主要区别,把地球模拟为球体而非椭球体。这个只是为了计算方面简单,而它所造成的精度上的差别在0.33% 之内。当比例尺越大,他的误差可以忽略,它也是WebGIS常用的坐标系统。
我们可以仿照上面的方式,自定义一种空间空间参考系统字符串,然后用该字符串作为参数来实例化一个自定义的空间参考系统。
如果在实例化地图类的对象时,指定了投影(通过extent 的spatialReference 属性),那么需要确保所有的图层能使用该投影进行绘制,对于切片图层,必须要求其投影与地图的投影一致,对于动态图层,则需要进行相应的投影转换,从而影响了服务器的响应效率。
3. 例子
下面的例子实现上面所说的切片图层,动态图层的投影,代码如下:
对于使用地理坐标系统的地图,也同样要求切片图层的空间参考与地图的空间参考一致,对于动态图层则没有这个要求。
4. 实现效果
效果展示:
原文链接;
欢迎关注我的博客:传送门
网友评论