OpenLayers: проанализированные точки GeoJSON всегда отображаются в координатах (0, 0)

это первый раз, когда я использую OpenLayers, и я не понимаю, что делаю не так.

Я пытаюсь отобразить простую точку, извлеченную из GeoJSON. Кажется, что данные проанализированы правильно (я проверил с помощью консоли), но какую бы точку я ни указывал, она всегда отображается в позиции, которую я предполагаю LonLat (0,0) на моем векторном слое.

Что я делаю неправильно ?

var map, baseLayer, placesLayer, geojsonParser ;
// data below have been simplified and reformated to enhance readability
var geojsonData = 
{
    "type":"Feature",
     "geometry":
     {
        "type":"Point",
        "coordinates":[-4.0280599594116,5.3411102294922]
     },
     "properties":
     {
        "id":273,
        "name":"ABIDJAN"
     }
};

$(document).ready(function(){

map = new OpenLayers.Map('map');
  baseLayer = new OpenLayers.Layer.OSM();
  placesLayer = new OpenLayers.Layer.Vector();

  geojsonParser = new OpenLayers.Format.GeoJSON();
  placesLayer.addFeatures(geojsonParser.read(geojsonData));

  map.addLayers([baseLayer,placesLayer]);
  map.setCenter(
    new OpenLayers.LonLat(-4, 5.3).transform(
      new OpenLayers.Projection("EPSG:4326"),
      map.getProjectionObject()
    ), 5
  );

}); // document ready

person m_x    schedule 23.06.2011    source источник


Ответы (2)


Это правильное решение:

var geojson_format = new OpenLayers.Format.GeoJSON({
                'internalProjection': new OpenLayers.Projection("EPSG:900913"),
                'externalProjection': new OpenLayers.Projection("EPSG:4326")
            });

источник: https://gist.github.com/1118357

person dojob    schedule 31.07.2012
comment
@m_x Если вы нашли решение, не стесняйтесь добавлять ответ самостоятельно, а не добавлять его к вопросу. - person HaskellElephant; 11.10.2012
comment
@HaskellElephant да, это был старый вопрос, я только начинал использовать SO. - person m_x; 11.10.2012

Привет, похоже, вам нужно преобразовать координаты долготы / широты в правильные координаты дисплея:

Вы можете объявить проекции и затем преобразовать свой геометрический объект:

var projWGS84 = new OpenLayers.Projection("EPSG:4326");
var proj900913 = new OpenLayers.Projection("EPSG:900913");

feature.geometry.transform(projWGS84, proj900913);

Или получить проекцию карты «на лету», примерно так:

var projWGS84 = new OpenLayers.Projection("EPSG:4326");    
feature.geometry.transform(projWGS84, map.getProjectionObject());

Очевидно, что если вы используете другую проекцию ввода от меня, измените "ESPG: 4326" на все, что вам нужно.

HTH

C

РЕДАКТИРОВАТЬ:

В вашем случае вам нужно будет написать что-то вроде:

geojsonData.geometry.transform(projWGS84, map.getProjectionObject());
person CatchingMonkey    schedule 23.06.2011
comment
спасибо за ответ, не думал о проекционных вопросах. Я пытался перепроецировать данные разными способами (параметры парсера, прямая обработка проанализированных данных, как вы предлагаете), но, похоже, это не решает проблему. Все, что мне приходит в голову, это: WTF? - person m_x; 23.06.2011
comment
возможно, попробуйте var projGoogle = new OpenLayers.Projection (EPSG: 3857); - person CatchingMonkey; 23.06.2011
comment
Уууууууууууууууу, плохо, я получал проекцию карты, а не проекцию базового слоя (OSM использует EPSG: 900913). Теперь работает! Спасибо за выделение и за уделенное время. - person m_x; 23.06.2011