PostGISのGEOMのレコードを任意で囲んだPolygonデータに変更する方法をまとめてみた

もう、だいぶ前になりますが

 

・PostGISのGEOMからKMLのPolygonデータを取得する

https://it-trouble.help/postgis%e3%81%aegeom%e3%81%8b%e3%82%89kml%e3%81%aepolygon%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/

 

・PostGISで国勢調査データをインポートを手軽に始めてみる

https://it-trouble.help/postgis%e3%81%a7%e5%9b%bd%e5%8b%a2%e8%aa%bf%e6%9f%bb%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e3%82%a4%e3%83%b3%e3%83%9d%e3%83%bc%e3%83%88%e3%82%92%e6%89%8b%e8%bb%bd%e3%81%ab%e5%a7%8b%e3%82%81%e3%81%a6/

 

で利用していたGEOMのデータが古くなって、現在のデータと変わってしまったので自分で囲った範囲のPolygonを利用したくなった。

 

どうすればよいのかなって思ってたんだけどなんとかできたのでまとめてみました。

 

手順

※QGISはバージョン3を利用

1.QGISでGoogle MAP等の地図を表示する

・Google MAP表示方法

「XYZ Title」>右クリック>「新しい接続」をクリックする

名前:Google MAP

URL:https://mt1.google.com/vt/lyrs=r&x={x}&y={y}&z={z}

 

 

そうするとGoogleMAPが表示される。最初は青い画面になるのでマウスでスクロールしてズームアウトしてみるとよい

 

 

 

 

2.レイヤー追加して、ポリゴンを作成する

「レイヤ」>「レイヤの作成」>「新規シェープファイルレイヤ」をクリックする

 

 

・下記の内容でOKをクリックする

ファイル名:任意の名前

ファイルエンコーディング:UTF-8

ジオメトリタイプ:ポリゴン

 

 

・編集モードを切り替えて、「ポリゴン地物を追加」アイコンをクリックする

 

・任意の範囲を囲む

 

3.GEOMのデータを出力する

・「レイヤ」>「名前を付けて保存」をクリックする

形式:PostgresSQL SQL dump

ファイル名:任意の名前

CRS:GEOMで利用しているコードと合わせること

ジオメトリタイプ:Polygon

GEOM_TYPE:geography

 

 

・保存したSQL DUMPから中身を取得する

 

上記の赤枠をGEOMのところに上書きすればOK

 

 

ってな感じでGISのPolygonデータを書き換えてみた。

PostGISのGEOMからKMLのPolygonデータを取得する

GEOJSONはこの前やってできたので今度はKMLでポリゴンデータを出力させたいと思います。

地図会社によって仕様も違うのでKMLも覚えておくとよいかと思います。

PostGISの関数としては、ST_AsKmlを使って書き出します。

 

クエリ

select 
ST_AsKml(ST_Transform(geom,4326))
FROM "gis" AS

念のため、4326に変換してます。

 

出力結果

<Polygon>
 <outerBoundaryIs>
  <LinearRing>
   <coordinates>139.77993836890397,35.682253867534506 139.779680869718334,35.682212064625922 139.779548587536368,35.68217003549109 139.779396858574188,35.682095710089015 139.779258852144181,35.681983293625635 139.778870831893755,35.681612957798478 139.778586974557925,35.681268371285832 139.778236888992723,35.6807173185381 139.777969328170087,35.680318550037775 139.77795476398029,35.680294318971747 139.777721337553203,35.679931972562926 139.77756217504276,35.679672613679138 139.777317819897632,35.67929209311027 139.777069754865693,35.678920619219049 139.77687417220443,35.678595681624508 139.776825639520268,35.678504923080197 139.776693048655915,35.678315079697782 139.776546017155965,35.678080935362523 139.776032947375711,35.678300260901807 139.776019985432299,35.678299761794527 139.775547644392447,35.678496992853141 139.775526303811233,35.678460998144971 139.775387649679828,35.678514520882544 139.775415211873053,35.678555060678221 139.775130839822026,35.678679812873597 139.775123269786491,35.67868244995244 139.775604616795988,35.679487613946471 139.77650216388264,35.680954425049173 139.77665873864899,35.68121029828712 139.776729706531881,35.681326277647244 139.776705934992265,35.681339188476954 139.777292109231411,35.682256713986504 139.777304481338319,35.682260768874684 139.778041140731347,35.68341842109114 139.778080795512523,35.683544525656814 139.778102822498482,35.683566612319595 139.778162123968286,35.683795362483508 139.778398190283724,35.683639068421975 139.778656446530846,35.684023923652148 139.778651885980196,35.68402702004466 139.778657172316827,35.684035472801241 139.779526055894024,35.683445923773562 139.779571064636997,35.683410910110489 139.779952790438017,35.682266936774973 139.77993836890397,35.682253867534506</coordinates>
  </LinearRing>
 </outerBoundaryIs>
</Polygon>

 

あとは、KMLのフォーマットに従ってPolygon部分に上部の内容を記述すればOKです。

 

境界線のみにしたい場合は

select 
ST_AsKml(ST_ExteriorRing(ST_Transform(geom,4326)))
FROM "gis" AS

 

境界線のみの結果

<LineString>
   <coordinates>139.77993836890397,35.682253867534506 139.779680869718334,35.682212064625922 139.779548587536368,35.68217003549109 139.779396858574188,35.682095710089015 139.779258852144181,35.681983293625635 139.778870831893755,35.681612957798478 139.778586974557925,35.681268371285832 139.778236888992723,35.6807173185381 139.777969328170087,35.680318550037775 139.77795476398029,35.680294318971747 139.777721337553203,35.679931972562926 139.77756217504276,35.679672613679138 139.777317819897632,35.67929209311027 139.777069754865693,35.678920619219049 139.77687417220443,35.678595681624508 139.776825639520268,35.678504923080197 139.776693048655915,35.678315079697782 139.776546017155965,35.678080935362523 139.776032947375711,35.678300260901807 139.776019985432299,35.678299761794527 139.775547644392447,35.678496992853141 139.775526303811233,35.678460998144971 139.775387649679828,35.678514520882544 139.775415211873053,35.678555060678221 139.775130839822026,35.678679812873597 139.775123269786491,35.67868244995244 139.775604616795988,35.679487613946471 139.77650216388264,35.680954425049173 139.77665873864899,35.68121029828712 139.776729706531881,35.681326277647244 139.776705934992265,35.681339188476954 139.777292109231411,35.682256713986504 139.777304481338319,35.682260768874684 139.778041140731347,35.68341842109114 139.778080795512523,35.683544525656814 139.778102822498482,35.683566612319595 139.778162123968286,35.683795362483508 139.778398190283724,35.683639068421975 139.778656446530846,35.684023923652148 139.778651885980196,35.68402702004466 139.778657172316827,35.684035472801241 139.779526055894024,35.683445923773562 139.779571064636997,35.683410910110489 139.779952790438017,35.682266936774973 139.77993836890397,35.682253867534506</coordinates>
</LineString>