10. ジオメトリ演習¶
これまでに見た全ての関数のリマインダです。演習に役立つはずです!
sum(expression) はレコードの集合の合計を返す集約関数です
count(expression) はレコードの集合のサイズを返す集約関数です
ST_GeometryType(geometry) はジオメトリのタイプを返します
ST_NDims(geometry) はジオメトリの次元数を返します
ST_SRID(geometry) はジオメトリの空間参照系識別子の番号を返します
ST_X(point) は X 座標値を返します
ST_Y(point) は Y 座標値を返します
ST_Length(linestring) はラインストリングの長さを返します
ST_StartPoint(geometry) は最初の座標をポイントとして返します
ST_EndPoint(geometry) 最後の座標をポイントとして返します
ST_NPoints(geometry) ラインストリングの座標数を返します
ST_Area(geometry) ポリゴンの面積を返します
ST_NRings(geometry) リング数を返します (通常は 1 で、穴があると多くなります)
ST_ExteriorRing(polygon) は外側のリングをラインストリングで返します
ST_InteriorRingN(polygon, integer) は指定した内側のリングをラインストリングで返します
ST_Perimeter(geometry) 全てのリングの長さを返します
ST_NumGeometries(multi/geomcollection) コレクションの要素数を返します
ST_GeometryN(geometry, integer) コレクションの指定した要素を返します
ST_GeomFromText(text) は
geometry
を返しますST_AsText(geometry) は WKT
text
を返しますST_AsEWKT(geometry) は EWKT
text
を返しますST_GeomFromWKB(bytea) は
geometry
を返しますST_AsBinary(geometry) は WKB
bytea
を返しますST_AsEWKB(geometry) は EWKB
bytea
を返しますST_GeomFromGML(text) は
geometry
を返しますST_AsGML(geometry) は GML
text
を返しますST_GeomFromKML(text) は
geometry
を返しますST_AsKML(geometry) は KML
text
を返しますST_AsGeoJSON(geometry) は JSON
text
を返しますST_AsSVG(geometry) は SVG
text
を返します
次の利用可能なテーブルも覚えておいてください:
nyc_census_blocks
blkid, popn_total, boroname, geom
nyc_streets
name, type, geom
nyc_subway_stations
name, geom
nyc_neighborhoods
name, boroname, geom
10.1. 演習¶
'West Village' 地区の面積はいくらですか?
SELECT ST_Area(geom) FROM nyc_neighborhoods WHERE name = 'West Village';
1044614.5296486
注釈
免責は平方メートルで与えられます。ヘクタール単位で得るには、10000 で割ります。エーカー単位で得るには 4047 で割ります。
‘Pelham St’ のジオメトリタイプは? 長さは?
SELECT ST_GeometryType(geom), ST_Length(geom) FROM nyc_streets WHERE name = 'Pelham St';
ST_MultiLineString 50.323
地下鉄駅の 'Broad St' の GeoJSON 表現はどうなるでしょう?
SELECT ST_AsGeoJSON(geom) FROM nyc_subway_stations WHERE name = 'Broad St';
{"type":"Point", "crs":{"type":"name","properties":{"name":"EPSG:26918"}}, "coordinates":[583571.905921312,4506714.341192182]}
ニューヨーク市のストリートの総延長はいくつになるでしょう (キロメートル単位で) ? (ヒント: 空間データの計測単位はメートルで、1000 メートルで 1 キロメートルになります。)
SELECT Sum(ST_Length(geom)) / 1000 FROM nyc_streets;
10418.9047172
Manhattanの面積はエーカー単位でいくらになるでしょう? (ヒント:
nyc_census_blocks
とnyc_neighborhoods
の両方がboroname
を持っています。)SELECT Sum(ST_Area(geom)) / 4047 FROM nyc_neighborhoods WHERE boroname = 'Manhattan';
13965.3201224118
または...
SELECT Sum(ST_Area(geom)) / 4047 FROM nyc_census_blocks WHERE boroname = 'Manhattan';
14601.3987215548
最も西にある駅は何でしょう?
SELECT ST_X(geom), name FROM nyc_subway_stations ORDER BY ST_X(geom) LIMIT 1;
Tottenville
'Columbus Cir' (別名 Columbus Circle) の長さはいくらになるでしょう?
SELECT ST_Length(geom) FROM nyc_streets WHERE name = 'Columbus Cir';
308.34199
ニューヨーク市のストリートの長さをタイプ別にまとめると、いくらになるでしょう?
SELECT type, Sum(ST_Length(geom)) AS length FROM nyc_streets GROUP BY type ORDER BY length DESC;
type | length --------------------------------------------------+------------------ residential | 8629870.33786606 motorway | 403622.478126363 tertiary | 360394.879051303 motorway_link | 294261.419479668 secondary | 276264.303897926 unclassified | 166936.371604458 primary | 135034.233017947 footway | 71798.4878378096 service | 28337.635038596 trunk | 20353.5819826076 cycleway | 8863.75144825929 pedestrian | 4867.05032825026 construction | 4803.08162103562 residential; motorway_link | 3661.57506293745 trunk_link | 3202.18981240201 primary_link | 2492.57457083536 living_street | 1894.63905457332 primary; residential; motorway_link; residential | 1367.76576941335 undefined | 380.53861910346 steps | 282.745221342127 motorway_link; residential | 215.07778911517
注釈
ORDER BY length DESC
句で、結果の length を見て降順で並び替えます。結果は最も一般的なタイプがリストの先頭に現れます。