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

  • 相关阅读:
    php多态
    ssl certificate problem: self signed certificate in certificate chain
    test plugin
    open specific port on ubuntu
    junit vs testng
    jersey rest service
    toast master
    use curl to test java webservice
    update folder access
    elk
  • 原文地址:https://www.cnblogs.com/moonvan/p/2411317.html
Copyright © 2011-2022 走看看