Leaflet 如何在GraphHopper中添加GeoJSON层?

Leaflet 如何在GraphHopper中添加GeoJSON层?,leaflet,geojson,graphhopper,Leaflet,Geojson,Graphhopper,我有一个GeoJSON文件,其中包含我希望能够在单独的GraphHopper层中显示的POI。经过几次尝试和在互联网上搜索,我就是找不到一个方法来做这件事 这是GeoJSON文件的一个示例(我用JSON验证器检查了整个文件,一切正常) {“类型”:“特征”, “财产”:{ “费用”:“否”, “自行车停放”:“锚”, “ref”:“PVNAN23”, “地址”:“加布里埃尔·高迪街44200号南特”, “名称”:“Pirmil P+R”, “容量”:“24”, “park_ride”:“是”,

我有一个GeoJSON文件,其中包含我希望能够在单独的GraphHopper层中显示的POI。经过几次尝试和在互联网上搜索,我就是找不到一个方法来做这件事

这是GeoJSON文件的一个示例(我用JSON验证器检查了整个文件,一切正常)

{“类型”:“特征”, “财产”:{ “费用”:“否”, “自行车停放”:“锚”, “ref”:“PVNAN23”, “地址”:“加布里埃尔·高迪街44200号南特”, “名称”:“Pirmil P+R”, “容量”:“24”, “park_ride”:“是”, “舒适性”:“自行车和停车场”, “涵盖”:“是” }, “几何体”:{“类型”:“点”,“坐标”:[-1.5406709,47.1960031]}, {“类型”:“特征”, “财产”:{ “自行车停车场”:“看台”, “地址:邮政编码”:“44000”, “地址:国家”:“FR”, “姓名”:“玛德琳”, “容量”:“6”, “舒适性”:“自行车和停车场”, “地址:街道”:“马德兰街”, “注”:“vérifié”, “地址:城市”:“南特”, “覆盖”:“否”, 地址:门牌号:“35” }, “几何体”:{“类型”:“点”,“坐标”:[-1.55076671448,47.21000114109]}

]}


我尝试了中解释的内容,但无法使其工作。

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

有效的功能集合:

{
    "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对象,但传单将毫无问题地处理它)

要将它们加载到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的工作示例:

感谢您的回答。我复制了您的代码并将其粘贴在GraphOper min.的脚本文件的末尾。不幸的是,它没有渲染,POI甚至在层中都不可用。我在Plunker中复制并粘贴了geoson代码,效果很好,所以至少geoson文件是正确的。对不起,我不熟悉Graphhopper,我试着看一看,但他们的API在注册之后:(不,你可以免费下载代码,在社区中到处都可以。是的,我找到了实际的源代码,但它没有文档或任何wiki。我一直在寻找文档/参考资料,但从我现在看到的来看,这真的不是我喜欢的。从我到目前为止看到的情况来看,我认为GH并不像你希望的那样可扩展。也许吧你可以尝试在他们的追踪器上提出一个问题。好的,谢谢你的帮助,我会按照你的建议去做。如果有任何解决方案,我会在这里发布答案,以防其他人感兴趣。