如何从 NodeID 获取 long/lat 信息,反之亦然
How to get the long/lat information from a NodeID and vice versa
在 SpatiaLite 网站上,他们解释了如何使用 .osm
数据创建一个 SpatiaLite 数据库,其中包含一个 table,其中每一行都是道路图的弧线。然后,他们在their website:
中解释了计算从A到B的最短路径的过程
- 使用他们提供的工具从
.osm
文件创建 VirtualNetwork
- 执行以下查询:
select * from VirtualNetwork where NodeFrom=267209305 and NoteTo=267209702
得到最短路径
- 低于您应该从上面的查询中获得的结果。它代表最短路径上的每一条弧线。
问题:
如何从最短路径上的每个 NodeID 获取 Latitude/Longitude。否则,我将无法解释那些 NodeIDs 的意思。
如何从NodeFrom
的Latitude/Longitude和NodeTo
。否则,我将无法在第一时间执行最短路径查询。
按照您所说的https://www.gaia-gis.it/gaia-sins/spatialite-cookbook/html/dijkstra.html的例子,我们可以找到执行此查询的两个节点(154348和130324)之间的路由:
select *
from tuscany_net
where nodefrom = 154348
and nodeto = 130324
问题 1
要找到路径中节点的点(latitude/longitudes),可以查询tuscany_nodes
table 过滤它 tuscany_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
...
或者,如文档所述,此结果集的第一行总结了整个路径,并包含表示路线的相应几何图形,可用于绘制它或查找路线中的所有点.
如果想看WKT representation的路线可以查询:
select st_astext(Geometry)
from tuscany_net
where nodefrom = 154348
and nodeto = 130324 limit 1
你会得到这样的东西,可以用来提取路线上的 [=47=] 个点:
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,
... )
问题二
要获得给定 latitude/longitude 的 node_id,您需要对节点 table(示例中的 tuscany_nodes
)执行查询。由于节点 table 包含表示节点的点(几何),因此最好的方法是执行空间查询以获取 from
和 to
节点。例如,您可以使用 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
在 SpatiaLite 网站上,他们解释了如何使用 .osm
数据创建一个 SpatiaLite 数据库,其中包含一个 table,其中每一行都是道路图的弧线。然后,他们在their website:
- 使用他们提供的工具从
.osm
文件创建VirtualNetwork
- 执行以下查询:
select * from VirtualNetwork where NodeFrom=267209305 and NoteTo=267209702
得到最短路径 - 低于您应该从上面的查询中获得的结果。它代表最短路径上的每一条弧线。
问题:
如何从最短路径上的每个 NodeID 获取 Latitude/Longitude。否则,我将无法解释那些 NodeIDs 的意思。
如何从
NodeFrom
的Latitude/Longitude和NodeTo
。否则,我将无法在第一时间执行最短路径查询。
按照您所说的https://www.gaia-gis.it/gaia-sins/spatialite-cookbook/html/dijkstra.html的例子,我们可以找到执行此查询的两个节点(154348和130324)之间的路由:
select *
from tuscany_net
where nodefrom = 154348
and nodeto = 130324
问题 1
要找到路径中节点的点(latitude/longitudes),可以查询tuscany_nodes
table 过滤它 tuscany_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
...
或者,如文档所述,此结果集的第一行总结了整个路径,并包含表示路线的相应几何图形,可用于绘制它或查找路线中的所有点.
如果想看WKT representation的路线可以查询:
select st_astext(Geometry)
from tuscany_net
where nodefrom = 154348
and nodeto = 130324 limit 1
你会得到这样的东西,可以用来提取路线上的 [=47=] 个点:
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,
... )
问题二
要获得给定 latitude/longitude 的 node_id,您需要对节点 table(示例中的 tuscany_nodes
)执行查询。由于节点 table 包含表示节点的点(几何),因此最好的方法是执行空间查询以获取 from
和 to
节点。例如,您可以使用 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