2016-03-26 13 views
1

SpatiaLiteのWebサイトでは、.osmデータを使用してSpatiaLiteデータベースを作成する方法を説明します.SpatiaLiteデータベースには、各行が道路グラフの弧。その後、彼らはtheir websiteにAからBへの最短経路を算出する手順を説明します:最短パスを取得するselect * from VirtualNetwork where NodeFrom=267209305 and NoteTo=267209702NodeIDからlong/lat情報を取得する方法

  1. 次のクエリを実行し、彼らが
  2. を提供ツールを使用して.osmファイルからVirtualNetworkを作成します。
  3. 結果の下に、上記のクエリから取得する必要があります。これは、最短経路上のすべての円弧を表します。

1

質問:最短経路上にあるすべてののNodeIDから緯度/経度を取得する方法

  1. 。さもなければ、私はそれらを解釈することができませんノードID意味。 NodeFromNodeTo緯度/経度からノード識別子を取得する方法

  2. 。さもなければ、私は最初に最短経路の質問を実行することができません。

答えて

1

あなたが言うようhttps://www.gaia-gis.it/gaia-sins/spatialite-cookbook/html/dijkstra.htmlの例に続いて、私たちは、このクエリを実行する2つのノード(154348と130324)間のルートを見つけることができます:

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

質問1

検索するにはルート内のノードのポイント(緯度/経度)を照会すると、tuscany_nodesテーブルに照会し、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 

あなたはルート上の点の緯度/経度を抽出するために使用することができ、このようなものを取得します

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, 
...) 

あなたが旧姓ます与えられた緯度/経度のためのNODE_IDを取得するには質問2

dを実行してノードテーブル(この例ではtuscany_nodes)に対してクエリを実行します。ノード表にノードを表すポイント(ジオメトリ)が含まれているため、最良の方法は、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 
関連する問題