OpenLayers 3.2.1 - Изменить проекцию по умолчанию

Мне трудно изменить проекцию карты по умолчанию.

Вот JSFIDDLE: http://jsfiddle.net/qtcpjape/3/

$( document ).ready(function() {
    var proj = new ol.proj.Projection({
        code: 'EPSG:4326',
        units: 'm',
        extent: [-180.0000, -90.0000, 180.0000, 90.0000]
    });

    var map = new ol.Map({
        target: 'map',
        controls: [],
        layers: [
            new ol.layer.Tile({
                source: new ol.source.MapQuest({
                    layer: 'osm'
                })
            })
        ],
        view: new ol.View({
            center: [-90.78885827595732, 38.78662388327825],
            projection: proj,
            zoom: 15
        })
    });
});

У меня будет GeoJSON, исходящий из вызова REST, который находится в EPSG: 4326, и я хотел бы легко его сопоставить.

Прямо сейчас я не могу заставить карту изменить проекцию и показать фактический центр.

Любая помощь будет оценена по достоинству! Спасибо!


person Primm    schedule 02.03.2015    source источник


Ответы (2)


Так как вы используете тайлы MapQuest, ваша карта должна быть в EPSG:3857 поскольку ol3 не поддерживает перепроецирование растра (перепроецирование растра поддерживается, начиная с версии 3.11.0, но по соображениям производительности обычно рекомендуется перепроецировать векторные данные). Но ваши векторные данные GeoJSON можно перепроецировать на лету из EPSG:4326 в EPSG:3857, установив целевую проекцию на векторный источник.

Например:

var vectorSource = new ol.source.GeoJSON({
  ...
  projection: 'EPSG:3857'
});


var vectorLayer = new ol.layer.Vector({
  source: vectorSource
});


var map = new ol.Map({
    target: 'map',
    controls: [],
    layers: [
        new ol.layer.Tile({
            source: new ol.source.MapQuest({
                layer: 'osm'
            })
        }),
        vectorLayer
    ],
    view: new ol.View({
        center: ol.proj.transform([6, 49], 'EPSG:4326', 'EPSG:3857'),
        zoom: 3,
        projection: 'EPSG:3857'
    })
});

См. http://jsfiddle.net/qtcpjape/5/.

person tsauerwein    schedule 03.03.2015
comment
Не могли бы вы привести пример того, как это сделать на лету? Спасибо! - person Primm; 04.03.2015
comment
Большое спасибо! Я попробовал это, но использовал «EPSG: 4326» в качестве проекции, думая, что это должна быть проекция, в которой были данные. Очень признателен! - person Primm; 06.03.2015
comment
На самом деле проекция, которую вы устанавливаете для источника, является целевой проекцией (в вашем случае EPSG:3857. Для GeoJSON проекция по умолчанию — EPSG:4326, поэтому вам не нужно указывать это явно. - person tsauerwein; 06.03.2015

Начиная с OpenLayers 3.11.0 теперь можно перепроецировать растровые источники. Ознакомьтесь с примечаниями к выпуску.

Поэтому просто укажите проекцию явно для представления (что вы уже делаете) и для всех источников (чего вы в настоящее время не делаете). OpenLayers сделает все остальное!

person theDmi    schedule 26.11.2015