1

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

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

{“type”:“Feature”,“properties”:{“fee”:“no”,“bicycle_parking”:“anchors”,“ref”:“PVNAN23”,“address”:“Rue Gabriel Goudy 44200 Nantes”, “name”:“Pirmil P+R”,“容量”:“24”,“park_ride”:“yes”,“amenity”:“bicycle_parking”,“covered”:“yes”},“geometry”:{”类型”:“点”,“坐标”:[-1.5406709, 47.1960031]}},{“类型”:“特征”,“属性”:{“bicycle_parking”:“支架”,“地址:邮政编码”:“44000 ", "地址:国家": "FR",“名称”:“Madeleine”,“容量”:“6”,“便利设施”:“bicycle_parking”,“地址:街道”:“chaussée de la Madeleine”,“注释”:“验证”,“地址:城市” :“南特”,“覆盖”:“否”,“地址:housenumber”:“35”},“几何”:{“类型”:“点”,“坐标”:[-1.55076671448, 47.21000114109]}}覆盖”:“否”,“地址:housenumber”:“35”},“几何”:{“类型”:“点”,“坐标”:[-1.55076671448, 47.21000114109]}}覆盖”:“否”,“地址:housenumber”:“35”},“几何”:{“类型”:“点”,“坐标”:[-1.55076671448, 47.21000114109]}}

]}

我尝试了如何将外部 geojson 文件加载到传单地图中的说明,但我无法让它工作。

4

1 回答 1

1

如果您的 JSON 有效,并不意味着您正在使用有效的 GeoJSON 对象。例如:{"foo": "bar"}是完全有效的 JSON,但绝不是有效的 GeoJSON 对象。L.GeoJSON,leaflet 的 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

于 2015-01-19T01:06:51.043 回答