geometry型がさっぱり分からん
------- PostgresのpostGISに、鉄道情報も入れる --------
omsのデータには、鉄道情報入っていません(と思う osm2pgrouting にtrainを取り出すオプションがなかったので) ―― ので、国土地理院からダウンロードする
https://nlftp.mlit.go.jp/ksj/index.html から 鉄道時系列(ライン)(ポイント)を探して、ここからファイル(N02-08.zip)をPCにダウンロードして解凍する。中身はKS-META-N02-08.xmlと、N02-08.xml が入っている。
ところが、xmlファイルは、postgresにインポートできないのでshpファイルに変換する必要がある。
で、https://nlftp.mlit.go.jp/ksj/jpgis/jpgis_tool.html にある、「国土数値情報XML-シェープ変換ツール」をダウンロードしてインストールする。私の場合、64Bit版OSに対応した変換ツールはこちらからダウンロードできます。(ksjtool_64_v1.8.zip 約18MB)をダウンロードした。
で、先程のN02-08.xmlを変換すると、N02-08_EB02.dbf、N02-08_EB02.shp、N02-08_EB02.shx、N02-08_EB03.dbf、N02-08_EB03.shp、N02-08_EB03.shx が生成される。
(どういう訳か、shp2pgsqlがなくて、apt-get install shp2pgsql にも失敗するので)、QGIS3を使って、PostgresのDBにつっこむ。
N02-08_EB02 を選んで、OKを押下して、さらにN02-08_EB03を選んで、OKを押下する(2つインポートする)
以下を見ると、N02-08_EB02は路線情報が、N02-08_EB03は駅の情報が入っているみたい
ただ、selectしようとすると、変なエラーがでるので、テーブルの名前を変更した方がいい(が、今日は疲れたので、ここまで)
selectでは、テーブルの名前は小文字で、"-"も使えないようである。QGISから、以下のように変更した。
------- ところが鉄道の路線情報が、geometry型で、何が何やらさっぱり分からん --------
例えば、新百合ヶ丘駅から五月台駅までのルートは、以下のような情報が入っている
hirohakama_sim2=# select geom from n02_08_eb02 where id = 6328;
0105000020E610000001000000010200000012000000E97DE36BCF6F6140CDCCCCCCCCCC4140E4141DC9E56F614006D847A7AECC41400D8E9257E76F61400DFD135CACCC4140BEBC00FBE86F6140A27A6
B60ABCC4140404D2D5BEB6F61401422E010AACC414045F0BF95EC6F6140A99F3715A9CC4140923F1878EE6F614062F3716DA8CC41400708E6E8F16F61401B47ACC5A7CC4140ABECBB22F86F6140F870C97
1A7CC414055F65D11FC6F61401B47ACC5A7CC414014ED2AA4FC6F61403F1D8F19A8CC414072A774B0FE6F6140A99F3715A9CC414047ACC5A70070614038F8C264AACC414075C8CD700370614031D3F6AFA
CCC4140130A117008706140B1E1E995B2CC4140C3B645990D70614006F52D73BACC414043C5387F13706140E23B31EBC5CC4140003ACC9717706140A2D11DC4CECC4140
(1 row)
これが訳が分からんのだが、QGISではちゃんと曲線も含めて表示される。
地物情報としては、両端の位置情報は入っているが、カーブの情報とかどうやて表現しているんだ?
なんか、色々探しているうちに、こんなのが出てきた。(参考 http://www.jurigis.me/2015/02/07/select-in-postgis/)
hirohakama_sim2=# select ST_Astext(geom) from n02_08_eb02 where id = 6328;
MULTILINESTRING((139.49407 35.6,139.4968 35.59908,139.49699 35.59901,139.49719 35.59898,139.49748 35.59894,139.49763 35.59891,139.49786 35.59889,139.49828 35.598
87,139.49904 35.59886,139.49952 35.59887,139.49959 35.59888,139.49984 35.59891,139.50008 35.59895,139.50042 35.59902,139.50103 35.5992,139.50166 35.59944,139.5023
8 35.59979,139.50288 35.60006))
(1 row)
エクセルで、この座標を並べて、QGIS3と比較してみた。
hirohakama_sim2=# select ST_Length(geom) from n02_08_eb02 where id = 6328;
st_length
0.009214722968728321
(1 row)
これだと、デカルトの長さになるらしい。これをメートルに変換するには、以下の様にする。
hirohakama_sim2=# select ST_Length(Geography(ST_Transform(geom,4326))) from n02_08_eb02 where id = 6328;
st_length
852.3697682752311
(1 row)
で、次は駅の情報。駅は、n02_08_eb03(×n02_08_eb02)に入っている。
五月台駅は、こんな感じ。
hirohakama_sim2=# select * from n02_08_eb03 where id = 3106;
id | geom | rac | int | lin | opc | stn
3106 | 0105000020E610000001000000010200000002000000E97DE36BCF6F6140CDCCCCCCCCCC4140A857CA32C46F614030478FDFDBCC4140 | 1
2 | 4 | 多摩線 | 小田急電鉄 | 五月台
(1 row)
で、駅の端点は、こんな感じで出てくる。
hirohakama_sim2=# select ST_Astext(geom) from n02_08_eb03 where id = 3106;
st_astext
MULTILINESTRING((139.49407 35.6,139.4927 35.60046))
hirohakama_sim2=# select ST_Length(Geography(ST_Transform(geom,4326))) from n02_08_eb03 where id = 3106;
st_length
134.22648323273413
(1 row)
ふーん、五月台駅って、134メートルなんだ
結論 geometryのフォーマットはさっぱり分からんが、関数使って取り出せるなら、それで良しとしよう。
課題 鉄道のgeometryを使った最短経路問題を解くのメソッドってあるのかな? pgr_dijkstra()とか・・・
http://kenpg.seesaa.net/article/385517945.html を、後で試してみること