Я хочу наложить некоторые данные, проекция которых WGS-84, на слой карты Google в OpenLayers. Но я просто не могу сделать их в нужном месте. Я сделал следующее:
map = new OpenLayers.Map('map', {
numZoomLevels: 20,
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG: 4326")
});
googlelayer = new OpenLayers.Layer.Google("Google street", {sphericalMercator: true});
map.addLayer(googlelayer);
veclayer = new OpenLayers.Layer.Vector("vector", {
projection: map.displayProjection
};
var geojson_format = new OpenLayers.Format.GeoJSON();
veclayer.addFeatures(geojson_format.read(jsonData));
Хотя я назначил veclayer
проекцию 4326, но она по-прежнему интерпретируется как 900913, а система координации отображения - также 900913, хотя я установил displayProjection на 4326. Какую ошибку я могу сделать?
preFeatureInsert
означает это свойство , во всяком случае, я не могу найти его в официальном документе API ~У вас есть пробел после двоеточия.
Projection("EPSG: 4326")
должно бытьProjection("EPSG:4326")
, места нет раньше4326
.источник
Я разместил свой старый фрагмент кода. Я помню, что Clou находится в проекциях. addTransform должен решить вашу проблему. (Proj4)
источник
Вы можете упасть туда, потому что вы ищете слегка смещенное векторное представление на Google Картах, в то время как на других базовых слоях это нормально, и преобразование EPSG: 4326 в EPSG: 900913 или EPSG: 3857 не решает все проблемы.
В Картах Google есть ошибка, которая не позволяет правильно оценить размер div при запуске объекта OpenLayers Map, если он еще не виден. Поэтому после вызовов transform () и redraw () вам, возможно, придется сделать так,
myMapObject.updateSize();
чтобы Google узнал фактическую долю вашей карты на экране.Если вы ищете общее решение для преобразования слоев из одной проекции в другую, вы можете использовать эту функцию:
И вуаля!
источник
Для Yahoo вы можете попробовать эти варианты:
источник