10. 幾何練習題¶
以下是截至目前為止我們所看過的所有函式提醒。這些函式對練習題將有所助益!
sum(表達式) 聚合以回傳一組記錄的總和
count(表達式) 聚合以回傳一組記錄的大小
ST_GeometryType(幾何) 回傳幾何的類型
ST_NDims(幾何) 回傳幾何的維度數
ST_SRID(幾何) 回傳幾何的空間參考識別碼
ST_X(點) 回傳 X 座標
ST_Y(點) 回傳 Y 座標
ST_Length(線串) 回傳線串的長度
ST_StartPoint(幾何) 回傳第一個座標作為點
ST_EndPoint(幾何) 回傳最後一個座標作為點
ST_NPoints(幾何) 回傳線串中座標的數量
ST_Area(幾何) 回傳多邊形的區域
ST_NRings(幾何) 回傳環形線的數量(通常為 1,如果有洞則更多)
ST_ExteriorRing(多邊形) 回傳外環形線作為線串
ST_InteriorRingN(多邊形,整數) 回傳指定內環形線作為線串
ST_Perimeter(幾何) 回傳所有環形線的長度
ST_NumGeometries(多重/幾何集合) 回傳集合中的部分數量
ST_GeometryN(幾何,整數) 回傳集合中的指定部分
ST_GeomFromText(文字) 回傳
幾何
ST_AsText(幾何) 回傳 WKT
文字
ST_AsEWKT(幾何) 回傳 EWKT
文字
ST_GeomFromWKB(bytea) 回傳
幾何
ST_AsBinary(幾何) 回傳 WKB
bytea
ST_AsEWKB(幾何) 回傳 EWKB
bytea
ST_GeomFromGML(文字) 回傳
幾何
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. 練習¶
「西村」鄰里面積有多大?
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 公尺。)
SELECT Sum(ST_Length(geom)) / 1000 FROM nyc_streets;
10418.9047172
曼哈頓的面積有多少英畝?(提示:
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」(又稱哥倫布環形路口)有多長?
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
子句按長度以遞減順序對結果排序。結果會讓最普遍的類型最先出現在清單中。