17. 投影練習¶
以下是我們看過的部分函式提醒。提示:它們在練習中很有用喔!
sum(expression) 彙總以取得一系列紀錄的總和
ST_Length(linestring) 傳回線串的長度
ST_SRID(geometry) 傳回幾何圖形的 SRID
ST_Transform(geometry, srid) 將幾何轉換成不同的空間參考系統
ST_GeomFromText(text) 傳回
geometry
ST_AsText(geometry) 傳回 WKT
text
ST_AsGML(geometry) 傳回 GML
text
記得你可以使用線上資源
也請記住我們有以下這些可用的表格
nyc_census_blocks
name、popn_total、boroname、geom
nyc_streets
name、type、geom
nyc_subway_stations
name、geom
nyc_neighborhoods
name、boroname、geom
17.1. 練習¶
以 UTM 18 度量,紐約所有街道的長度是多少?
SELECT Sum(ST_Length(geom)) FROM nyc_streets;
10418904.7172
SRID 2831 的 WKT 定義為何?
SELECT srtext FROM spatial_ref_sys WHERE SRID = 2831;
或者,透過 https://epsg.io/2831
PROJCS["NAD83(HARN) / New York Long Island", GEOGCS["NAD83(HARN)", DATUM["NAD83 (High Accuracy Regional Network)", SPHEROID["GRS 1980", 6378137.0, 298.257222101, AUTHORITY["EPSG","7019"]], TOWGS84[-0.991, 1.9072, 0.5129, 0.0257899075194932, -0.009650098960270402, -0.011659943232342112, 0.0], AUTHORITY["EPSG","6152"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4152"]], PROJECTION["Lambert Conic Conformal (2SP)", AUTHORITY["EPSG","9802"]], PARAMETER["central_meridian", -74.0], PARAMETER["latitude_of_origin", 40.166666666666664], PARAMETER["standard_parallel_1", 41.03333333333333], PARAMETER["false_easting", 300000.0], PARAMETER["false_northing", 0.0], PARAMETER["scale_factor", 1.0], PARAMETER["standard_parallel_2", 40.666666666666664], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH], AUTHORITY["EPSG","2831"]]
以 SRID 2831 度量,紐約所有街道的長度是多少?
SELECT Sum(ST_Length(ST_Transform(geom,2831))) FROM nyc_streets;
10421993.706374
注意事項
UTM 18 和 State Plane Long Island 度量之間的差異為 (10421993 - 10418904)/10418904,即 0.02%。使用 地理 計算球體上的總街道長度為 10421999,與 State Plane 的值較為接近。這並不出奇,因為 State Plane Long Island 投影會特別針對非常小區域(紐約市)校準,而 UTM 18 必須針對大型區域提供合理的結果。
有多少條街道穿越第 74 條子午線?
SELECT Count(*) FROM nyc_streets WHERE ST_Intersects( ST_Transform(geom, 4326), 'SRID=4326;LINESTRING(-74 20, -74 60)' );
223
“第 74 條子午線”是一種文雅的說法,表示「X 值為 -74 的地理座標系中之垂直線」。我們可以建構這類線,然後將其與同樣投影到地理座標系中的街道進行比較。將線投影至 UTM 並於其中進行比較將會傳回略有不同的答案。若要取得相同的答案,您需要在轉換前將其「分段」,讓它有更多點。
SELECT Count(*) FROM nyc_streets WHERE ST_Intersects( geom, ST_Transform(ST_Segmentize('SRID=4326;LINESTRING(-74 20, -74 60)'::geometry,0.001), 26918) );