17. boiledorange73
都道府県ポリゴンを作る
CREATE TABLE w_pref (
gid SERIAL PRIMARY KEY,
pcode INT,
geom GEOMETRY(POLYGON, 4612)
);
INSERT INTO w_pref (pcode, geom)
SELECT pcode, (ST_Dump(geom)).geom AS geom
FROM (
SELECT mcode/1000 AS pcode,
ST_Union(geom) AS geom
FROM w_mncpl GROUP BY mcode/1000
) AS Q ORDER BY pcode;
2018/11/10 FOSS4G 2018 Tokyo 17
18. boiledorange73
メルカトルに投影
CREATE TABLE w_pref_3395 (
gid SERIAL PRIMARY KEY,
pcode INT,
geom GEOMETRY(POLYGON, 3395)
);
INSERT INTO w_pref_3395 (gid, pcode, geom)
SELECT gid, pcode, ST_Transform(geom, 3395)
FROM w_pref ORDER BY gid;
2018/11/10 FOSS4G 2018 Tokyo 18
19. boiledorange73
• 不正ポリゴン(自己接触・自己交差)発生
(対応策は後述)
10cmスナップ
CREATE TABLE w_pref_3395_s10c (
gid SERIAL PRIMARY KEY,
pcode INT,
geom GEOMETRY(POLYGON, 3395)
);
INSERT INTO w_pref_3395_s10c (gid, pcode, geom)
SELECT gid, pcode, ST_SnapToGrid(geom, 0.1, 0.1)
FROM w_pref_3395 ORDER BY gid;
2018/11/10 FOSS4G 2018 Tokyo 19
20. boiledorange73
不正なポリゴンを除く?
2018/11/10 FOSS4G 2018 Tokyo 20
CREATE TABLE w_pref_3395_notsmall (
gid SERIAL PRIMARY KEY,
pcode INT,
geom GEOMETRY(POLYGON, 3395)
);
INSERT INTO w_pref_3395_notsmall (pcode, geom)
SELECT pcode, geom FROM (
SELECT pcode, (ST_Dump(ST_CollectionExtract(
ST_MakeValid(geom),3))).geom
FROM w_pref_3395_s10c) AS Q
WHERE ST_Area(geom) >= 15000000;