Как перепроектировать векторный слой при переключении между базовыми картами разных проекций - PullRequest
2 голосов
/ 24 августа 2010

У меня есть карта OpenLayers с двумя базовыми слоями: MetaCarta (EPSG: 4326) и карта Google (Mercator).sphericalMercator = false, единицы измерения - градусы.На карте также есть несколько маркеров, блоков и векторных данных.

Когда я переключаюсь между базовыми слоями (которые имеют разные проекции), простые геометрии (такие как маркеры или блоки) автоматически перепроектируются иотображается правильно.Однако векторные слои (полилинии) просто смещены, а не перепроектированы.Я думаю, что мне нужно вызвать какую-то функцию «перестроить» или добавить какой-то параметр, чтобы OpenLayers делал это автоматически при изменении проекции базового слоя.Но я понятия не имею, как это сделать.

Я читал о Spherical Mercator (http://docs.openlayers.org/library/spherical_mercator.html) и просматривал примеры OpenLayers, но не нашел решения.

Частьмоего кода ниже (все координаты в vector.json в градусах):

var metaCarta = new OpenLayers.Layer.WMS("MetaCarta",
    "http://labs.metacarta.com/wms/vmap0?",
    {layers: "basic"}
);

var gmap = new OpenLayers.Layer.Google(
    "Google Streets",
    {numZoomLevels: 40}
);

map.addLayers([metaCarta, gmap]);
map.setCenter(new OpenLayers.LonLat(139.8, 35.7), 11);


// Load vector data
var jsonFormat = new OpenLayers.Format.GeoJSON();

var vectorLayer = new OpenLayers.Layer.Vector("vector", {
    style: {strokeColor: "gray",strokeWidth: 2}
});

OpenLayers.loadURL("vector.json", {}, null, function(response) {
    var features = jsonFormat.read(response.responseText);
    vectorLayer.addFeatures(features);
});

map.addLayer(vectorLayer);

1 Ответ

1 голос
/ 19 ноября 2010

Вам нужно будет определить проекции и подходящее преобразование в OpenLayers. В свою очередь, вам нужно будет включить библиотеку Proj4JS (которая используется OpenLayers для выполнения этих преобразований проекции)

...