繁体   English   中英

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

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

我的目的是加载GeoJSON数据并将其显示在地图上。 GeoJSON中指定的要素的坐标是正常的lon / lat。 由于某种原因,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
    })
});

该点正在地图中间呈现。 通过放置多个点我确定它们实际上相对于彼此移动但是少量使我相信由于某种原因地图使用不同的坐标系统。

我尝试过:在GeoJSON中设置crs ,提供defaultDataProjection选项进行格式化。 我使用的是openlayers v3.8.2,我在网上找到的所有解决方案都已经过时了(据我所知,API过去更好,也许我应该切换到旧版本)。

只需使用featureProjection读取以下功能:

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

更新 :当从url读取功能更加容易时,OL会在内部为您进行转换:

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

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

暂无
暂无

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

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