end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

PostGIS - lwgeom_centroid: GEOS Error: IllegalArgumentException: Ring has fewer than 4 points, so orientation cannot be determined

国交省GISホームページで公開される 用途地域データ(※1)には geometry(MultiPolygon)型のカラムがありますが、 扱いづらい為、以下のsqlで緯度経度へ変換しようとしたところ、エラー。

※1 https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-A29-v2_1.html

postgis=> update gis_youto_chiiki
postgis-> set lng=ST_X(ST_Centroid(geom)),lat=ST_Y(ST_Centroid(geom));

ERROR: lwgeom_centroid: GEOS Error: IllegalArgumentException:
       Ring has fewer than 4 points, so orientation cannot be determined

どうやら、geometry(MultiPolygon)型のデータが不適切?らしく、 また、ST_makeValid()で補正できるようですので、 以下のsqlで解消。

http://postgres.cn/docs/postgis-2.3/ST_MakeValid.html

postgis=> update gis_youto_chiiki
postgis-> set lng=ST_X(ST_Centroid(ST_makeValid(geom))),
postgis->     lat=ST_Y(ST_Centroid(ST_makeValid(geom)));