gpt4 book ai didi

sqlite - 如何从 NodeID 获取长/纬度信息,反之亦然

转载 作者:行者123 更新时间:2023-12-03 19:35:28 41 4
gpt4 key购买 nike

在 SpatiaLite 网站上,他们解释了如何使用 .osm数据来创建一个 SpatiaLite 数据库,该数据库包含一个表,其中每一行都是道路图的弧。然后,他们在 their website 中解释了计算从 A 到 B 的最短路径的过程。 :

  • 创建 VirtualNetwork来自 .osm使用他们提供的工具文件
  • 执行以下查询:select * from VirtualNetwork where NodeFrom=267209305 and NoteTo=267209702得到最短路径
  • 在您应该从上面的查询中获得的结果下方。它代表最短路径上的每条弧。

  • 1

    问题:
  • 如何获得 纬度/经度 来自每个 节点 ID 那是在最短的路径上。否则,我将无法解释那些 节点 ID 意思是。
  • 如何获得 节点 ID 来自 纬度/经度 NodeFromNodeTo .否则,我将无法首先执行最短路径查询。
  • 最佳答案

    https://www.gaia-gis.it/gaia-sins/spatialite-cookbook/html/dijkstra.html 为例正如您所说,我们可以找到执行此查询的两个节点(154348 和 130324)之间的路由:

    select *
    from tuscany_net
    where nodefrom = 154348
    and nodeto = 130324

    问题一

    要查找 route 节点的点(纬度/经度),可以查询 tuscany_nodestuscany_net 的结果过滤它的表如下:
    select node_id, st_y(geometry) latitude, st_x(geometry) longitude
    from tuscany_nodes
    where node_id in (
    select nodeto
    from tuscany_net
    where nodefrom = 154348
    and nodeto = 130324
    )

    你会得到这样的结果集:
    node_id    latitude     longitude
    130324 43.843969 10.981256
    130337 43.843960 10.981382
    130352 43.844300 10.981580
    130414 43.845558 10.982525
    130420 43.845541 10.982572
    ...

    或者,如文档所述,此结果集的第一行总结了整个路径,并包含表示路线的相应几何图形,可用于绘制路线或查找 route 的所有点。

    如果你想看 WKT representation您可以查询的路线:
    select st_astext(Geometry)
    from tuscany_net
    where nodefrom = 154348
    and nodeto = 130324 limit 1

    你会得到这样的东西,可以用来提取路线上各点的纬度/经度:
    LINESTRING(11.138376 42.739078, 11.137961 42.738531,
    11.13765 42.738001, 11.137428 42.737463, 11.136459 42.734198,
    11.136129 42.733111, 11.135814 42.732221, 11.135666 42.732069,
    11.135485 42.731948, 11.135242 42.731884, 11.134913 42.731891,
    ... )

    问题2

    要获取给定纬度/经度的 node_id,您需要对节点表(示例中的 tuscany_nodes)执行查询。由于节点表包含代表节点的点(几何),因此最好的方法是执行空间查询以获得 fromto节点。例如,您可以使用 st_distance 函数获取距离目标点 ( here you can find the SQL functions reference list for SpatiaLite 4.2.0) 比给定距离更近的节点:
    select node_id
    from tuscany_nodes
    where st_distance(Geometry, makepoint(9.69561, 44.44792), 1) < 10

    关于sqlite - 如何从 NodeID 获取长/纬度信息,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36232399/

    41 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com