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完成大多数的坐标系之间的转换。

 


你可能感兴趣的:(GIS)