首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单张中显示关系(轨迹)

在单张中显示关系(轨迹)
EN

Stack Overflow用户
提问于 2021-07-05 05:18:38
回答 2查看 100关注 0票数 0

全,

当我转到这个url:OpenStreetMap时,我看到顶部有一个带有“关系”(我假设这是所显示的轨迹的术语)的地图。

我正在尝试让这条轨迹也显示在我的Django网站上,在那里我正在使用django-leaflet。

目前,我的代码如下所示:

代码语言:javascript
复制
<script>
    function map_init_basic (map, options) {
        map.setZoom(16);
        map.setView([51.6020, 4.8514]);
    }
</script>
{% leaflet_map "trailmap" callback="window.map_init_basic" %}

这会将地图设置到正确的区域,但是如何添加实际的轨迹呢?

致以最高的敬意。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-06 00:16:34

使用OSMPythonTools,您可以使用Overpass API从OSM数据库中获取轨迹关系,并将其几何图形提取为坐标数组:

代码语言:javascript
复制
from OSMPythonTools.overpass import Overpass
overpass = Overpass()

def fetch_relation_coords(relation): 
    rel = overpass.query('rel(%s); (._;>;); out;' % relation)
    coords = [el.geometry().coordinates for el in rel.elements() if el.type() == 'node']

    # Convert (lng, lat) to (lat, lng)
    latlngs = [[x[1], x[0]] for x in coords]

    return latlngs

latlngs = fetch_relation_coords("6754945")

# [[51.602685, 4.861282], [51.60629, 4.851437], [51.599504, 4.838481], [51.599561, 4.839231], ...]

我对Django还不够熟悉,无法理解如何将得到的坐标数组放到你的网页上,但是一旦你在Javascript中得到了它,你就可以用以下命令将它作为polyline添加到你的小叶地图上:

代码语言:javascript
复制
 L.polyline(latlngs).addTo(map);
票数 1
EN

Stack Overflow用户

发布于 2021-07-05 20:28:15

在地图上添加踪迹相当简单。您应该能够在map_init_basic()函数的底部添加一行代码,如L.polyline(latlngs).addTo(map); (其中latlngs是定义轨迹路线的[lat, lng]坐标对数组)或L.geoJSON(trail).addTo(map); (其中trail是描述轨迹的GeoJSON格式对象)。有关更多详细信息,请参阅PolylineGeoJSON的单张文档。

更复杂的部分是如何获取跟踪的lat/lng数据。其中一种方法是使用Overpass Turbo online API从OpenStreetMap检索数据。在天桥窗口的左侧输入以下查询,点击'Run',然后切换到'Data‘选项卡查看结果:

代码语言:javascript
复制
rel(6754945);  // Id number of the OSM Relation to fetch.
(._;>;);
out;

data选项卡应显示组成编码为OSM XML文件的轨迹的点。您可以复制它并操作文本来提取坐标,或者使用Overpass中的“导出”菜单以GeoGSON或各种其他格式下载数据。将数据放到地图上的最佳方式取决于应用程序的详细信息,但如果data是一个包含踪迹的GeoJSON的字符串,则会将其添加到地图上:

代码语言:javascript
复制
L.geoJSON(JSON.parse(data)).addTo(map);

How to convert an OSM relation to a list of lat/lng points?的回答中介绍了用于获取轨迹坐标的其他一些选项

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68248846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档