Преобразование OpenLayers LonLat

Я хочу использовать десятичные Lon и Lat, как в Google Maps. Но, похоже, мне нужно преобразовать объект LonLat в OpenLayers, например.

    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. Есть ли способ указать карте, чтобы она всегда использовала эту проекцию?


person Fergal    schedule 09.09.2012    source источник


Ответы (1)


Можно ли установить проекцию на карту или нет, зависит от того, какой сервис вы используете для базового слоя. Насколько мне известно, OSM предоставляет свои визуализированные плитки только в формате EPSG: 900913, поэтому нет никакого способа преобразовать ваши координаты перед добавлением их на карту. Вы можете найти службу, которая предоставляет свои плитки в нескольких проекциях, но я пока не видел ни одной, которую можно было бы использовать бесплатно. Альтернативой может быть рендеринг ваших собственных плиток в необходимой проекции и предоставление их через ваш собственный сервер плиток.

Предположим, у вас есть такая карта, вы можете изменить проекцию с помощью OpenLayers.Map.setOptions () вот так:

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

Но вам также может потребоваться установить некоторые свойства, связанные с проекцией, например maxExtent и т. Д. См. этот вопрос.

person Manuel Leuenberger    schedule 09.09.2012