zoukankan      html  css  js  c++  java
  • GOOGLE MAP使用的投影为EPSG:900913

    GOOGLE MAP使用的投影为EPSG:900913

    作者: 赵博 • 2007 年 12 月 22 日 • 技术主义 • 9 条评论

    googlemercator20071222.jpgGoogle 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

  • 相关阅读:
    Windows下使用Visual Studio Code搭建Go语言环境
    无缓冲和带缓冲channel的区别
    Asp.Net MVC如何返回401响应码
    从这里开始我的博客园
    java判定字符串中仅有数字和- 正则表达式匹配 *** 最爱那水货
    主席树
    Mybitis+springMVC 套路
    jeeplus ani 文档路径
    jquery easyui datagrid 多选只能获取一条数据
    python写入文件编码报错
  • 原文地址:https://www.cnblogs.com/moonvan/p/2411317.html
Copyright © 2011-2022 走看看