私はJavaとPostgresを使用してバス到着予測システムを作成しています。バスごとに固定ルートがありますので、PostgresにLineStringとして全駆動ルートを保存しています。gps座標から次の頂点までの距離を見つける
あり3バス停止であり、各バス停のLAT経度もルートテーブルにラインストリングとして格納されます。 停止名と緯度の詳細を持つもう1つのテーブルがあります。
stoppage_details表
Stoppage 1 - lat1,lon1
Stoppage 2 - lat2,lon2
Stoppage 3 - lat3,lon3
私は、問題の下に解決するためにPostgresの機能を探しています。
- にはどうすれば( ポイントの緯度経度とエンドポイントの緯度経度の開始)ラインストリングを使用してルートの総距離(660メートル)を取得することができます。
- 30秒ごとにデータを送信する各バスにGPSシステムがインストールされています。ST_ClosestPoint関数を使用してLineStringから最も近い頂点 を検索しています。頂点と次の間の距離はどれくらいですか とそれ以前の停止はLineStringを使ってどのように見つけることができますか?
- または誰かが上記の問題を解決するための他のアプローチを提案することができます。
私はST_length(line :: geography)FROM routesを選択しようとしました。正確な長さを与えていません。そして、線ストリング上の任意のGPS座標の前回と次の停止を見つける方法はありますか? – raw
linstringがsrid:4326(WGS84)の場合、長さを計算するのに適切な投影に投影する必要があります。それを地理学にキャスティングするには、メートル単位のグローバルメルケータ投影のようなものに投影することでこれを行います。 st_length_spheriod()http://postgis.net/docs/manual-1.4/ST_Length_Spheroid.htmlを試すと、どのspheriodを投影するかをよりよく制御できます。ポイント2については –
です。私はこれを行う方法を説明しました。あなたが要請したことを即座に行う「缶詰め」機能はありません。 Postgisは、より複雑なソリューションを構築するためのツール群です。多くのユーザーは、pgplsqlストアドプロシージャを作成して、より複雑なタスクや特定のタスクを実行します。私は「PostGIS in Action」を推奨しています。http://www.postgis.us/ –