内容简介:版权声明:本文为博主原屙文章,喜欢你就担走。 https://blog.csdn.net/leftfist/article/details/88119372
版权声明:本文为博主原屙文章,喜欢你就担走。 https://blog.csdn.net/leftfist/article/details/88119372
练武不练功,到老一场空。学习GIS开发,坐标系是绕不过去的,此乃基本概念,一定要搞清楚。某从事WEB GIS开发差不多2年,一直对这个坐标系感到模糊。这两天因为求解一个问题,方始有点认知。
GIS世界里,坐标系有很多,而且描述得十分抽象,让我们这些没有天赋,缺乏空间想象力的傻叉晕头转向。不过,对于arcgis for jsapi开发人员来说,经常接触的大概只有2种坐标系:
一、4326地理坐标系
通常,我们说地图上的某个点,有经纬度,往往指的就是这种坐标系。
这种坐标系,属于地理坐标系。因为地球是个球体,所以,这是一种球面坐标系。
全称:GCS_WGS_1984,ID为4326,一般GPS、遥感影像、外业测绘数据等就采用它。当然,还有其他地理坐标系,如beijing54,xian80等等,4326只是其中之一。
var sr4326 = new SpatialReference({wkid: 4326 });
二、102113投影坐标系
102113,全称:GCS_WGS_1984_web_mercator_auxiliary_sphere,又称为平面直角坐标系,笛卡尔平面坐标系,Google在线地图所采用。
如上所述,4326地理坐标系是球面坐标系,而我们用的2维地图,是平面的,所以一般用的是平面坐标系。球面坐标系如何换算到平面坐标系,采用的投影法。投影法有很多,如米勒投影、墨卡托投影、高斯投影,等等。arcgis中,似乎一般就是墨卡托投影。墨卡托这个名字挺好听,有逼格,我喜欢。102113就是墨卡托投影法搞出来的,故而也可以将它称为墨卡托投影坐标系?
所谓的墨卡托投影是这样的:假设有一个圆锥体或圆柱体,刚好将地球包起来(就是切于地球的赤道),然后地球球心会发光,将地球的经纬线投影到圆锥体或圆柱体上面,这样就得到了地球的平面坐标。圆柱可以看作是特殊的圆锥,即顶点在无限远处。
使用这种方式得到的投影地图在两极会拉长,如图所示:
var sr102113 = new SpatialReference({wkid: 102113 });
因为我们加载的底图一般都用它,也可以直接引用地图对象的:
var sr102113 = map.spatialReference;
如果不确定地图对象的坐标系,可以直接看看地图的地图服务:
百度地图用的是102100(GCS_WGS_1984_web_mercator),应该也是一种墨卡托投影坐标系。
三、坐标系转换
为啥要转换?
当然要转换了。
一般来说,我们拿到的空间数据,都是经纬度,属于所谓的球面坐标系,而平面地图用的是平面坐标系,不转换是不能使用的。但我平时开发过程中,对这个无感,那是因为api自动做了转换。比如说,我声明一个点对象:
var pt = new Point(longitude, latitude, new SpatialReference({wkid: 4326 });//最后一个参数,注明要使用何种坐标系来创建本对象
那么,经纬度如何转化为平面坐标系中的点坐标呢?转化出来的点,其单位是什么呢?墨卡托投影,出来的点的坐标,单位是米。所以经纬度换算成平面坐标后,数值都很大:
XMin: 7750103.171888566 YMin: 1252344.2714235506 XMax: 1.693722247553803E7 YMax: 7973910.790707026 Spatial Reference: 102113 (3785)
上代码:
var _f = 6378137, _p = 0.017453292519943; function lngLatToXY(pt){//经纬度转化为平面坐标 var lng = pt[0];//经度 var lat = pt[1];//纬度 if (lat > 89.999999){ lat = 89.999999; } else if (lat < -89.999999){ lat = -89.999999; } var c = lat * _p; x = lng * _p * _f; y = _f / 2 * Math.log((1 + Math.sin(c)) / (1 - Math.sin(c))); return [x,y]; }
参考资料中有经纬度和平面坐标的互换代码,好像与我给的代码有点不同。我这个代码是同事给的,他是我司GIS的权威和专家。我没仔细比较,先记录下来。
四、实际应用
有辆车,已知当前的坐标、车速和方向,求一段时间后,这辆车预计会到达哪里?
1、这里就要用到坐标转换了。因为经纬度的单位是度分秒,可不是米,假设15分钟后,车子走了10公里,你说它会到哪里?所以要将经纬度转成平面坐标,再参加运算。
2、本问题是已知圆心(车辆当前位置)、半径(车辆所走的距离)、角度(方向),求圆弧上的点坐标。arcgis地图中,以正北方向为0度,顺时针起算。也就是说,y轴的正方向为0度。有:
圆心坐标(a,b),半径r的圆的参数方程(根据三角比的定义可以得出)为:(以y轴正方向为0度,设 t 为圆上某一点的度数)
x = a + r*sin t
y = b + r*cos t
所以圆上任一一点的坐标为 P(a + r*sin t, b + r*cos t),(其中 t 为圆上某一点的度数)
function drawSpeed(car){ var t = car; var sp = 转成平面坐标([t.longitude,t.latitude]);//起点 var fp = 获得终点的平面坐标(sp,t.speed,t.direction);//终点 var sr102113 = map.spatialReference; var line ={geometry:{ "paths":[[sp,fp]], "spatialReference":sr102113}, "symbol":{"color":_cbd, "width":1, "type":"esriSLS", "style":"esriSLSSolid"} }; return new Graphic(line); }
幸甚至哉。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 多经纬度坐标的中心点计算方法
- Java 根据经纬度获取地理位置
- python实现百度地图API获取某地址的经纬度
- 基于elementUI的一个使用v-model实现的经纬度输入的vue组件
- EFK 配置geo-ip落地实践(三)经纬度数据查询及格式化输出
- HQChart 1.9334 版本发布,增加等比坐标、黄金分割坐标、等分坐标
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
垃圾回收算法手册:自动内存管理的艺术
Richard Jones、Eliot Moss、Antony Hosking / 王雅光、薛迪 / 机械工业出版社 / 2016-3 / 139
在自动内存管理领域,Richard Jones于1996年出版的《Garbage Collection:Algorithms for Automatic Dynamic Memory Management》可谓是一部里程碑式的作品。接近20年过去了,垃圾回收技术得到了非常大的发展,因此有必要将该领域当前最先进的技术呈现给读者。本书汇集了自动内存管理研究者和开发者们在过去50年间的丰富经验,在本书中......一起来看看 《垃圾回收算法手册:自动内存管理的艺术》 这本书的介绍吧!