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_blocksnyc_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 子句按長度以遞減順序對結果排序。結果會讓最普遍的類型最先出現在清單中。