我有一个包含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中解释的内容,但我无法让它发挥作用。
答案 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