简体   繁体   English

如何在openlayers3中指定GeoJSON的投影?

[英]How to specify the projection for GeoJSON in openlayers3?

My intention is to load GeoJSON data and display it on the map. 我的目的是加载GeoJSON数据并将其显示在地图上。 Coordinates of the features specified in GeoJSON are normal lon/lat. GeoJSON中指定的要素的坐标是正常的lon / lat。 For some reason openlayers is rendering them using the projection used by the map and without converting them. 由于某种原因,openlayers使用地图使用的投影渲染它们而不转换它们。

// Underlying sat layer.
var world = new ol.layer.Tile({
    source: new ol.source.MapQuest({layer: 'sat'})
});

// GeoJSON data.
var geojsonObject = {
    'type': 'FeatureCollection',
    'features': [
        {
            'type': 'Feature',
            'geometry': {
                'coordinates': [ 50.07539747, 19.76809501 ], 
                'type': 'Point'
            },
        }
    ]
};

var vectorSource = new ol.source.Vector({
    features: (new ol.format.GeoJSON()).readFeatures(geojsonObject)
});

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

// Map.
map = new ol.Map({
    target: 'map',
    layers: [world, vectorLayer],
    view: new ol.View({
        center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
        zoom: 2
    })
});

The point is being rendered in the middle of the map. 该点正在地图中间呈现。 By placing multiple points I determined that they are in fact moved relative to each other but by a small amount which leads me to believe the for some reason the map uses a different coordinate system for them. 通过放置多个点我确定它们实际上相对于彼此移动但是少量使我相信由于某种原因地图使用不同的坐标系统。

What I tried: Setting crs in GeoJSON, providing defaultDataProjection option to format. 我尝试过:在GeoJSON中设置crs ,提供defaultDataProjection选项进行格式化。 I use openlayers v3.8.2 and all solutions I found online are very outdated (and as far as I can see the API used to be way better, maybe I should just switch to an old version). 我使用的是openlayers v3.8.2,我在网上找到的所有解决方案都已经过时了(据我所知,API过去更好,也许我应该切换到旧版本)。

Just use a featureProjection to read features like: 只需使用featureProjection读取以下功能:

var vectorSource = new ol.source.Vector({
    features: new ol.format.GeoJSON().readFeatures(geojsonObject,{
        featureProjection: 'EPSG:3857'
    })
});

UPDATE : When reading features from url is even easier, OL makes the conversion internally for you: 更新 :当从url读取功能更加容易时,OL会在内部为您进行转换:

var geojson_layer = new ol.layer.Vector({
    source: new ol.source.Vector({
        url: 'file.geojson',
        format: new ol.format.GeoJSON()
    })
});

Demo - http://plnkr.co/edit/GvdVNE?p=preview 演示 - http://plnkr.co/edit/GvdVNE?p=preview

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM