OpenLayers 投影的概念
投影,地球大家都知道不是正圆形的球体,他是一个不规则的椭圆体,所以如果我们把把展开在桌面上,发现地图都会和实际有出入。
所以人们发明了各种各样的方式来缩小失真的程度,这种方式就是投影
那到底该如何选择投影呢
主要要考虑这三种情况 面积,距离,形状。我们要根据自身的需求,来使用投影。因为我们的浏览地图的绝大部分需求是,量算面积和距离,和观察某个地区在哪,这就要我们能正确的区分每个图形代表的区域。
什么是球面墨卡托投影?
球面墨卡托投影在OpenLayerscommunity版本和其他OSGcommunity版本中都有使用。GoogleMaps,微软VirtualEarth,YahooMaps和其他商业地图API的提供者都使用该投影。该投影是将地球当作一个球体而不是椭球体,然后应用墨卡托投影的方法,将地图投影到一个地图平面上。
为了正确的在商业地图API上叠加地图数据,就必须使用该投影。最基本的是在商业地图API上显示栅格瓦片地图——例如TMS,WMS以及其他类似的瓦片。
为了更好的使用商业地图API,基于GoogleMaps的数据生成人员也需要使用该投影。最基本的例如OpenStreetMap,栅格地图瓦片都是使用的“球面墨卡托投影”。
GIS中,通常用“EPSG”的代码来表示一种地图投影。最常用的“EPSG:4326”,在地图上将经纬度直接当作X/Y对待。球面墨卡托投影在官方指定的代码为EPSG:3785。但是在官方发布之前,很多软件已经使用了EPSG:900931代码来表示该投影,OpenLayers仍然使用这个非官方的代码。看到“EPSG:4326”字符,就是经纬度坐标的描述,看到“EPSG:900931”则是用“米”做单位的x/y坐标的描述。
如果我们不指定特别的投影,OpenLayers的默认投影为
ESPG:4326
MaxExtent:-180,-90,180,90
MaxResolution:1.40625
OpenLayers中的投影对象
my_prj = new OpenLayers.Projection(‘EPSG:4326’,{});
第一个参数为 EPSG值
第二参数为可选对象
投影类的方法
getCode 获取投影code
getUnits 获取投影的单位,度or 米,这取决于我们使用的投影
addTransform(from,to,method) 坐标系转换
transform(point,source,destination)
坐标转换
这里我们将使用Proj4js
我们利用以前的例子,
创建两个投影对象
var proj_4326 = new OpenLayers.Projection(‘EPSG:4326’);
var proj_900913 = new OpenLayers.Projection(‘EPSG:900913’);
再创建一个点
var Point_to_transform=newOpenLayers.LonLat(-79,42);
开始转换
Point_to_transform.transform(proj_4326,proj_900913);
打印结果
console.log(point_to_transform);
The Proj4js library
这是一个坐标系转换的类库,OpenLayer只支持EPSG:4326到EPSG:900913之间的转换
但这个类库,可以帮助OpenLayers完成大多数的坐标系之间的转换。
转载自:https://blog.csdn.net/hi_kevin/article/details/34449053