Как я могу смешивать слои с другой системой координат в OpenLayers? - PullRequest
3 голосов
/ 21 апреля 2009

Я использую OpenLayers-карту и хочу использовать в ней разные картсерверы, которые используют разные системы координат. Могут ли OpenLayers интегрировать его в одну карту и автоматически конвертировать системы координат?

Ответы [ 3 ]

3 голосов
/ 23 апреля 2009

В зависимости от слоев, у вас всегда будет какой-то базовый слой (карта), который вы не сможете конвертировать. Если вы хотите добавить на эту карту данные (маркеры, данные Geo JSON и т. Д.), Вам придется преобразовать их в проекцию, которую использует базовый слой.

Для маркеров это легко сделать:

// defining our coordinate systems
var google = new OpenLayers.Projection("EPSG:900913"),
    latlon = new OpenLayers.Projection("EPSG:4326");

// transforming the location to the right coordinate system
var location = new OpenLayers.LonLat( 10, 10 ).transform( latlon, google );

// assuming you made an icon and marker layer
var marker = new OpenLayers.Marker( location, icon );     

markerLayer.addMarker( marker );

Ознакомьтесь с документацией Openlayers о преобразовании местоположения из одной системы в другую.

2 голосов
/ 22 мая 2014

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

Это может отличаться от ситуации, возникшей в поставленном вопросе, но недавно я столкнулся с подобной ситуацией. В моем случае мне нужно было показать выходные данные двух разных провайдеров WMS на одной карте. Один предоставил свои услуги в EPSG: 900913, другой в EPSG: 3857. Зная, что эти функционально эквивалентны , я подумал, что если бы я мог просто запросить их таким образом, чтобы службы работали, карта могла бы работать с выводом. Моя карта находится в 900913 (и поэтому другие службы запрашивают использование этой проекции по умолчанию).

Как мне удалось получить другую услугу для правильного запроса, было следующим (с заполнением вашей информации):

var myLayer = new OpenLayers.Layer.WMS(
    "Name",
    "URL", {
        "layer": "layer"
    });

myLayer.projection = "EPSG:3857";

Обычно добавление ?request=getCapabilities к URL-адресу сервиса позволит вам увидеть, какие проекции доступны из сервиса в тегах CRS нужного слоя.

2 голосов
/ 19 ноября 2010

Если картографические серверы предоставляют разные растры, то вам может не повезти.

Однако, если они предоставляют векторы (например, файлы KML) или объекты карты, написанные на JavaScript (например, ответ Dre), тогда вы можете выполнять трансформацию между различными проекциями, так что все данные отображаются в одной проекции и системе координат, базовая карта. У OpenLayers есть для этого хуки (см. Ответ Дре), но вам, вероятно, придется включить библиотеку Proj4JS, которая обеспечивает эту функциональность.

Или вы можете использовать Proj4JS для преобразования координат перед построением графика.

...