OpenLayers LonLat transform

OpenLayers LonLat transform

本文关键字:transform LonLat OpenLayers      更新时间:2023-09-26

我想像谷歌地图一样使用十进制Lon和Lat。但我似乎需要在OpenLayers中转换LonLat对象,例如

    var map, layer;
    function init(){
        map = new OpenLayers.Map('map');
        layer = new OpenLayers.Layer.OSM( "Simple OSM Map");
        map.addLayer(layer);
        map.setCenter(
            new OpenLayers.LonLat(-1.60400390625, 54.07228265560386).transform(
                new OpenLayers.Projection("EPSG:4326"),
                map.getProjectionObject()
            ), 6
        ); 
        var markers = new OpenLayers.Layer.Markers( "Markers" );
        map.addLayer(markers);
        var size = new OpenLayers.Size(21,25);
        var offset = new OpenLayers.Pixel(0,0);
        var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png', size, offset);
        markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(-1.60400390625, 54.07228265560386).transform(new OpenLayers.Projection("EPSG:4326"),map.getProjectionObject()),icon));           
    }

每次我放置标记时,位置都需要转换为EPSG:4326。有没有办法告诉地图总是使用这个投影?

是否可以在地图上设置投影,取决于底层使用的服务。据我所知,OSM只在EPSG:90913中提供渲染图块,因此在将坐标添加到地图之前,无法转换坐标。你可以搜索一个在多个投影中提供瓦片的服务,但到目前为止,我还没有看到一个可以免费使用的服务。另一种选择是在所需的投影中渲染自己的瓦片,并通过自己的瓦片服务器提供它们。

假设你有这样一个地图,你可以使用OpenLayers.map.setOptions()来更改投影,如下所示:

map.setOptions({
    projection: "EPSG:4326"
});

但您可能还需要设置一些与投影相关的属性,如maxExtent等。请参阅此问题。