Google Map以及VirtualEarth等web gis都采用一种特殊的投影坐标系EPSG:900913,其实这个900913并不是EPSG分配的编号,而是设计Google Map的工程师自己选定的一个编号。该投影坐标系一开始不被EPSG组织承认(EPSG认为这个坐标系的参数设定非常不符合地理科学),后来因为使用的人越来越多,不得已承认了,但分配了一个别的编号epsg:3785而不是900913。但是大多数程序员不知道,还一直使用900913,呵呵。
关于epsg:3785投影坐标系的详细参数如下:(参考 http://spatialreference.org/ref/epsg/3785/)
+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
上面这组参数是用于PROJ4(一个著名的地理投影变换开源库)的,我用以上参数以及从中国国家测绘局下载的中国地图数据和Google Map对照了一下发现x坐标(经度)没有差异,但是y坐标有较大的差异。后来在下述网页http://proj.maptools.org/faq.html的最后一个问题上发现需要一个额外的参数:
The coordinate system definition for Virtual Earth Mercator is as follows, which uses a sphere as the earth model for the mercator projection.
+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +no_defs
But, if you do something like:
cs2cs +proj=latlong +datum=WGS84 +to +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +no_defs
to convert between WGS84 and mercator on the sphere there will be substantial shifts in the Y mercator coordinates. This is because internally cs2cs is having to adjust the lat/long coordinates from being on the sphere to being on the WGS84 datum which has a quite differently shaped ellipsoid.
In this case, and many other cases using spherical projections, the desired approach is to actually treat the lat/long locations on the sphere as if they were on WGS84 without any adjustments when using them for converting to other coordinate systems. The solution is to "trick" PROJ.4 into applying no change to the lat/long values when going to (and through) WGS84. This can be accomplished by asking PROJ to use a null grid shift file for switching from your spherical lat/long coordinates to WGS84.
cs2cs +proj=latlong +datum=WGS84
+to +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs
Note the strategic addition of +nadgrids=@null to the spherical projection definition.
Similar issues apply with many other datasets distributed with projections based on a spherical earth model - such as many NASA datasets, and also (I think) the Google Maps mercator projection.
原来缺少+nadgrids=@null参数用来避免sphere lat/long调节就可以了,最终的PROJ4参数如下:
+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +nagrids=@null +no_defs
这回数据就非常符合Google Map了。
分享到:
相关推荐
在使用 Proj4js 实现客户端坐标转换时,我们需要了解 EPSG:900913 投影坐标系的详细参数,以便正确地进行坐标转换。同时,我们也需要了解 WGS84 坐标系的详细参数,以便正确地将 WGS84 坐标系下的坐标转换为 EPSG:...
接着,使用proj4定义新的坐标系,这通常涉及EPSG代码,例如EPSG:4326代表WGS84坐标系,而EPSG:3857是Web Mercator坐标系,常用于在线地图服务如Google Maps和OpenStreetMap。然后,通过iClient for OpenLayers的API...
2. **EPSG:3857 (Web Mercator)**:这是一种投影坐标系,广泛应用于Google Maps、OpenStreetMap等在线地图服务,因为它能够实现无缝拼接且保持形状的近似保真,但纬度越高,比例尺误差越大。 3. **CGCS2000**:中国...
在JavaScript中,地图坐标系转换是一项关键技能,特别是在开发地理信息系统(GIS)应用时。本例探讨了如何在两种常见的坐标系之间进行切换:WGS1984和墨卡托投影。这两种坐标系在地图绘制和定位服务中各有其用途。 ...
- **PROJ** 是一个地理坐标转换库,用于处理各种投影和坐标系之间的转换。在GDAL 3.0.0中,PROJ库的集成更为紧密,提供了更准确、更全面的投影支持。 - **PROJ.4到PROJ.6的升级**:GDAL 3.0.0与PROJ 6.x兼容,引入...
可以使用 Proj4js 库进行坐标系之间的转换。 3. **控件(Controls)**:OpenLayers提供了多种内置控件,如缩放条(ZoomBar)、导航控件(Navigation)、定位控件(Locate)等,可以方便地添加到地图上。 4. **事件...
- **EPSG:3857 (Pseudo-Mercator)**: 伪墨卡托投影,将WGS84坐标系投影到正方形。这种投影方式简化了计算过程,但会导致两极地区的失真较大。 - **EPSG:900913**: 类似于EPSG:3857,但在地图上以“米”作为X/Y坐标...
3. **坐标系统与投影**:地理信息系统必须处理不同的坐标系和投影。C#可以借助 Proj4Net 库来转换不同地理坐标系统,确保3D模型的准确定位。 4. **地形渲染**:在3D GIS中,地形通常由高度图表示。C#可以读取DEM...
- **操作**: 在【投影坐标系设置】对话框中通过【编辑: 投影命令】直接输入投影定义,或者通过【加载】预制的投影。 以上内容详细介绍了Walk卫星影像定位方法中涉及的关键知识点和技术细节,包括下载影像、构建影像...
7. **GIS库的使用**:开发者可能会使用第三方GIS库,如GDAL/OGR(通用数据访问库)用于数据读写,或者proj.4进行坐标系转换。源码中会包含如何集成和使用这些库的示例。 8. **地图服务的集成**:现代GIS应用常常...
4. **地图投影**:由于地球是曲面,GIS需要将地理位置转换为平面坐标,这就涉及到地图投影的选择和转换。VB程序中可能需要调用第三方库,如GDAL或Proj.NET来处理这些复杂的数学转换。 5. **图形绘制**:VB的...
- **输入投影命令**: 在“投影坐标系设置”对话框中输入相应的投影定义。 - **去除独立坐标系**: 在设置过程中确保移除独立平面直角坐标系选项。 **总结**: 本文详细介绍了Walk卫星影像定位方法中的三个核心步骤...