2013-02-14 2 views
1

Я использую openLayers и создаю базовый слой OSM. По умолчанию слой использует EPSG: 900913, а координаты - в метрах. Я хочу использовать координаты в градусах с EPSG: 4326, так что я initilize слоя:Использование OSM и EPSG: 4326 с openlayers увеличивают широту в около 90 градусов. Зачем?

base_layer.addOptions({ sphericalMercator: true, 
    projection: new OpenLayers.Projection('EPSG:4326')}, true); 

Теперь карта использует градусы, но есть следующая проблема: Точка с широтой и долготой 37.296 -5.929 (http://www.openstreetmap.org/?lat=37.296&lon=-5.929&zoom=12&layers=Q# и теми же координатами в Картах Google) мне кажется (перемещение карты и выполнение map.getCenter() в firebug) в лат. -49,75, лон. -5,929.

Почему? Как я могу использовать слой OSM с одинаковыми координатами градусов, как в openstreetmap.org, и как возвращается nominatim.openstreetmap.org?

ответ

2

Вы не можете просто заявить, что слой EPSG:4326, когда отображаемые фрагменты фактически отображаются в EPSG:3857. Это бессмысленно.

Я не совсем понимаю, что вы пытаетесь сделать здесь, чтобы быть честным, но это может помочь установить displayProjection в EPSG:4326, что приведет к тому, что OpenLayers будет использовать градусы при передаче значений пользователю/пользователю.

Если вы хотите, чтобы прочитать или установить местоположение на карте в коде, то вам нужно будет перепроецировать значение, которое вы получаете от getCenter или дать setCenter себя путем вызова метода transform на величину местонахождения.

+0

Я вижу. Я думал, что если я объявлю EPSG: 4226 openLayers преобразует координаты вместо того, чтобы делать это сам. Преобразовать явно каждую координату в любое время, когда я использую set/getCenter, не требуется. – francadaval

Смежные вопросы