【问题标题】:How to add a GeoJSON layer in GraphHopper?如何在 GraphHopper 中添加 GeoJSON 层?
【发布时间】:2015-03-16 21:52:44
【问题描述】:

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

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

{"type": "特征", “特性”: { “费用”:“不”, "bicycle_parking": "锚点", “参考”:“PVNAN23”, “地址”:“Rue Gabriel Goudy 44200 Nantes”, "name": "皮米尔 P+R", “容量”:“24”, "park_ride": "是的", "便利设施": "bicycle_parking", “覆盖”:“是” }, “几何”:{“类型”:“点”,“坐标”:[-1.5406709, 47.1960031]}}, {“类型”:“特征”, “特性”: { "bicycle_parking": "支架", “地址:邮政编码”:“44000”, “地址:国家”:“法国”, “名称”:“玛德琳”, “容量”:“6”, "便利设施": "bicycle_parking", "addr:street": "chaussée de la Madeleine", “注意”:“验证”, “地址:城市”:“南特”, “覆盖”:“不”, “地址:门牌号”:“35” }, “几何”:{“类型”:“点”,“坐标”:[-1.55076671448, 47.21000114109]}}

]}

我尝试了How to load external geojson file into leaflet map 中的说明,但无法正常工作。

【问题讨论】:

    标签: leaflet geojson graphhopper


    【解决方案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

    【讨论】:

    • 感谢您的回答。我复制了您的代码并将其粘贴在 GraphHoper min. 脚本文件的末尾。不幸的是,它没有渲染,POI 甚至在图层中都不可用。我在 Plunker 中复制并粘贴了 geoson 代码,它运行良好,所以至少 geoson 文件是正确的。
    • 对不起,我对 Graphhopper 不熟悉,我试着看一下,但他们的 API 落后于注册:(
    • 不,你可以免费下载代码,那里有github.com/graphhopper/graphhopper/tree/0.3,那里有graphhopper.com/#community,进入社区即可。
    • 是的,我找到了实际的源代码,但它没有文档或任何 wiki。我一直在寻找文档/参考,但从我现在看到的情况来看,这真的不是我的一杯茶。从我目前看到的情况来看,我认为 GH 没有你想要的那样可扩展。也许您可以尝试在他们的跟踪器上提出问题。
    • 好的,谢谢您的帮助,我会听从您的建议,并会看到。如果有任何解决方案,我会在这里发布答案,以防其他人感兴趣。
    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多