如何在GraphHopper中添加GeoJSON图层?

时间:2015-01-18 22:08:30

标签: leaflet geojson graphhopper

我有一个包含POI的GeoJSON文件,我希望能够在单独的GraphHopper层中显示。经过几次尝试并通过互联网搜索,我无法设法做到这一点。

这是GeoJSON文件的示例(我使用JSON验证器检查了整个文件并且没问题。)

  

{“type”:“功能”,    “properties”:{       “费用”:“不”,       “bicycle_parking”:“锚点”,       “ref”:“PVNAN23”,       “地址”:“Rue Gabriel Goudy 44200南特”,       “名称”:“Pirmil P + R”,       “容量”:“24”,       “park_ride”:“是”,       “舒适”:“bicycle_parking”,       “覆盖”:“是”   },   “geometry”:{“type”:“Point”,“coordinates”:[ - 1,5406709,47.1960031]}},   {“type”:“功能”,   “properties”:{       “bicycle_parking”:“看台”,       “addr:postcode”:“44000”,       “addr:country”:“FR”,       “名字”:“玛德琳”,       “容量”:“6”,       “舒适”:“bicycle_parking”,       “addr:street”:“chausséedela Madeleine”,       “note”:“vérifié”,       “addr:city”:“南特”,       “覆盖”:“不”,       “addr:housenumber”:“35”   },   “geometry”:{“type”:“Point”,“coordinates”:[ - 1.55076671448,47.21000114109]}}

     

]}

我尝试了How to load external geojson file into leaflet map中解释的内容,但我无法让它发挥作用。

1 个答案:

答案 0 :(得分:1)

如果您的JSON有效,并不意味着您正在使用有效的GeoJSON对象。例如:{"foo": "bar"}是完全有效的JSON,但绝不是有效的GeoJSON对象。 L.GeoJSON,传单的GeoJSON层需要一个FeatureCollection或一个包含Features的数组。

有效的FeatureCollection:

{
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "properties": {
            "id": 1
        },
        "geometry": {
            "type": "Point",
            "coordinates": [0,0]
        }
    },{
        "type": "Feature",
        "properties": {
            "id": 2
        },
        "geometry": {
            "type": "Point",
            "coordinates": [1,1]
        }
    }]
}

或者只是具有功能的数组:

[{
    "type": "Feature",
    "properties": {
        "id": 1
    },
    "geometry": {
        "type": "Point",
        "coordinates": [0,0]
    }
},{
    "type": "Feature",
    "properties": {
        "id": 2
    },
    "geometry": {
        "type": "Point",
        "coordinates": [1,1]
    }
}]

(请注意,只有一系列功能不是有效的GeoJSON对象,但Leaflet会毫无问题地处理它)

要将这些加载到L.GeoJson图层中,您需要在脚本中使它们可用。您可以在创建图层之前简单地声明对象。例如:

// Declare GeoJSON object
var geojson = {
    type: "FeatureCollection",
    features: [
        // Features here
    ]
}

// Create a new GeoJSON layer with geojson object
// And add to map (assuming your map instance is assigned to "map")
var layer = new L.GeoJSON(geojson).addTo(map);

但是,当您拥有许多功能时,这将变得非常混乱,并且保持逻辑和数据分离总是更好,因此您应该将数据对象放在单独的文件中。因此,让我们说您已将对象存储在名为" geo.json"的文件中,然后您可以使用您选择的XHR / AJAX解决方案加载该文件。我在下面的例子中使用了jQuery:

// Fetch geo.json file and assign the data to geojson variable
$.getJSON('geo.json', function (geojson) {
    // Create a new GeoJSON layer with GeoJSON object
    // And add to map (assuming your map instance is assigned to "map")
    var layer = new L.GeoJSON(geojson).addTo(map);
});

这是关于Plunker的一个工作示例:http://plnkr.co/edit/Mh8p4F?p=preview