Change Projection in OpenLayers Map

2019-04-11 19:51发布

I want to set "EPSG:4326" as the projection of an OpenLayers map, but when I try it, I always get "EPSG:900913".

function init() {

    var options = {
            projection: new OpenLayers.Projection("EPSG:4326")  // ignored
    };

    map = new OpenLayers.Map('map', options);

    var layer = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
    map.addLayer(layer);

    ...

    alert(map.getProjection());  // returns "EPSG:900913"

    ...

}

The base map is open street map.

How can I set the Projection to EPSG:4326?

4条回答
Rolldiameter
2楼-- · 2019-04-11 19:56

It's not a bug, it's a feature. Spherical Mercator is a square-pixel projection, so your openlayers vector features can be placed accurately on the map - this is not the case with WSG-84 (EPSG:4326)

查看更多
别忘想泡老子
3楼-- · 2019-04-11 19:58

It is Osmarender that has a hardcoded 900913 projection, nothing to do about that. But have you considered taking things the other way around? Transforming your coordinates or layer to EPSG:900913? Check the documentation here: http://docs.openlayers.org/library/spherical_mercator.html

查看更多
走好不送
4楼-- · 2019-04-11 20:13

What is the base layer. Are you trying to draw on GMaps or Bing Maps? If so then OpenLayers may be trying to get the data to match the projection of the base layer so it lines up properly.

查看更多
爷、活的狠高调
5楼-- · 2019-04-11 20:14

As milovanderlinden has pointed out, you have to transform latitude/longitude values (as used in Google or Bing maps) before the can be applied in OpenStreetMap layers likeOsmarenderorMapnik:

var datapoint = new OpenLayers.LonLat(-71.0, 42.0);
var proj_1 = new OpenLayers.Projection("EPSG:4326");
var proj_2 = new OpenLayers.Projection("EPSG:900913");
datapoint.transform(proj_1, proj_2);
查看更多
登录 后发表回答