GOOGLE MAP使用的投影为EPSG:900913

本文探讨了Google Maps使用的投影坐标系统EPSG:900913,并提供了将其应用于WebGIS项目的具体方法。介绍了如何定义该投影及其实现跨系统数据转换的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Google Map用什么投影坐标系统呢?以前一直以为是WGS84,但是大家都知道Google Map的地图在两极部分的畸变非常大,所以显然它不是WGS84这一类的球面坐标系统。由于一次工作,需要将google map和我自己设计的WebGIS进行叠合,我的WebGIS用的是WGS84,EPSG:4326,叠合后总是有mismatch的地方,后来索性研究了一下openlayers的文档,得知Google Map使用的是编号为EPSG:900913的投影。从这个编号看,就知道它不是EPSG本身定义的投影,所以,我即便在map的属性设置里加上projection =”ESPG:900913″,并在google map的 layer里设置’sphericalMercator’: true后,仍然不行。
其实,最终的问题是我的坐标系统不是基于900913的。有两种解决办法。一,将自己的数据转化为900913,可以用ogr或者arcToolbox里相应的命令行,不再多说了。或者就是通过MapServer on-the-fly去reprojections。但是MapServer,ogr,以及arcGIS进行投影转换需要有预定好的投影,而在proj4和arcGIS里并没有预定900913。定义方法如下:
1. 在/proj/nad/epsg里添加“# Google Mercator
<900913> +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 +wktext +no_defs <>”
这样你就可以使用ogr,Mapserver实时的进行转换了。

2. 如果你需要用arcGIS来转换,需要在文件ArcGIS/Coordinate Systems/Projected Coordinate Systems/world里添加文件 Google Mercator (world).prj. 我自己写的内容为:
PROJCS["Google_Mercator",GEOGCS["GCS_WGS_1984",
DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,0]],
PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],
PROJECTION["Mercator"],PARAMETER["False_Easting",0],PARAMETER["False_Northing",0],
PARAMETER["Central_Meridian",0],PARAMETER["Standard_Parallel_1",0],UNIT["Meter",1]]

PS. EPSG: 900913 为横轴墨卡托投影。它和EPSG:3395非常类似,只是没有扁率298. 257223563。也就是说他不是一个椭球。还有一点需要注意,Google 投影用的是Mercator——2SP该投影在acrGIS以及proj4里均没有定义。所以要做一些转换。
如果您对地图投影,墨卡托投影,特别是WebGIS里面的使用情况有疑惑,请参考如下的文献:
http://www.spatialreference.org/ref/user/google-projection/
http://jira.codehaus.org/browse/GEOT-1511
http://spatialreference.org/ref/user/6/
http://www.ibm.com/developerworks/cn/java/j-coordconvert/#resources
http://www.sharpgis.net/2007/05/05/SpatialReferencesCoordinate
SystemsProjectionsDatumsEllipsoidsConfusing.aspx

code:
在html中:

var lon = 4174203.107;
var lat = 3556972.005;
var zoom = 5;
var options = { maxExtent: new OpenLayers.Bounds(7765266.742441,429318.305045,16113672.956358,7543262.315404),
maxResolution: 16543,
projection: "EPSG:900913",
units: "km",
numZoomLevels: 7};
map = new OpenLayers.Map('map', options);
layer = new OpenLayers.Layer.MapServer( "CHGIS MapServer", "/cgi-bin/mapserv.exe?map=/ms4w/apache/htdocs/buddhist/google.map&layers=PII_google",
{layers: 'basic'},
{opacity:0.5, isBaseLayer:false});
map.addLayer(layer);
satellite = new OpenLayers.Layer.Google( "Google Satellite" , {type: G_SATELLITE_MAP,
'maxZoomLevel':18, 'sphericalMercator': true} );
map.addLayers([satellite]);

在map文件中:

MAP
IMAGETYPE PNG
# EXTENT 72.9958 17.9958 136.0042 54.0042
EXTENT 7765266.742441 429318.305045 16113672.956358 7543262.315404
SIZE 1200 800
SHAPEPATH "data"
IMAGECOLOR 234 255 255
TRANSPARENT ON
FONTSET "fonts/fonts.list"
SYMBOLSET "symbols/symbols.sym"
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 +nadgrids=@null +wktext +no_defs"
"init=epsg:900913"
END
#定义图层LAYERS
END

### EPSG:3857 地理坐标系 投影定义 和 使用方法 #### 定义与背景 EPSG:3857 是一种基于 Web 墨卡托投影的平面坐标系统,它使用 WGS84 椭球体作为基准,并针对 Web 地图服务进行了优化。该投影的主要特点是通过将地球表面映射到二维平面上来支持快速渲染和高效显示地图瓦片[^2]。 #### 数学基础与参数 Web 墨卡托投影本质上是一种圆柱投影变种,其核心原理是将经度和纬度转换为平面直角坐标 \(x, y\)。具体的数学公式如下: 对于给定的经纬度 \((\lambda, \phi)\),其中 \(\lambda\) 表示经度(单位:弧度),\(\phi\) 表示纬度(单位:弧度): \[ x = R \cdot \lambda \] \[ y = R \cdot \ln{\left( \tan{\frac{\pi}{4} + \frac{\phi}{2}} \right)} \] 这里 \(R\) 代表半径常量,在 EPSG:3857 中取值约为 6378137 米,对应于 WGS84 椭球体的赤道半径[^2]。 #### 主要特点 - **范围**:EPSG:3857 的有效范围限定在大约南纬 85.0511 度至北纬 85.0511 度之间,这是为了防止极地区域因无限延伸而导致计算错误。 - **比例失真**:随着接近两极方向,面积变形逐渐增大;因此不适合用于精确测量距离或面积。 - **全球覆盖**:尽管存在上述局限性,但由于其简单性和兼容性好等特点,广泛应用于在线地图平台如 Google Maps、OpenStreetMap 等场景下[^3]。 #### 实际应用场景 由于其设计初衷是为了满足互联网环境下大规模分布式地理信息服务的需求,所以在以下方面表现尤为突出: - 支持无缝拼接的地图切片技术; - 提供高效的客户端图形绘制能力; - 方便与其他开放标准集成,比如 GeoJSON 文件格式处理等操作[^2]。 ```python from pyproj import Transformer def convert_wgs84_to_webmercator(lon, lat): transformer = Transformer.from_crs("epsg:4326", "epsg:3857") easting, northing = transformer.transform(lat, lon) return easting, northing # Example usage: lon, lat = -117.1954, 32.7157 # San Diego coordinates easting, northing = convert_wgs84_to_webmercator(lon, lat) print(f"Easting: {easting}, Northing: {northing}") ``` 以上代码片段展示了如何利用 `pyproj` 库实现从 WGS84 (EPSG:4326) 到 Web 墨卡托 (EPSG:3857) 的坐标变换过程[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值