21. 幾何建構練習

以下是一些我們看過的函數的提醒。提示:它們應該對練習很有用!

  • sum(expression) 聚合以返回一組記錄的總和

  • ST_Area(geometry) 返回幾何的面積

  • ST_Centroid(geometry) 返回 geometry 的質心

  • ST_Transform(geometry, srid)geometries 轉換為不同的空間參考系統

  • ST_Buffer(geometry, radius) 返回擴展的 geometry 形狀

  • ST_Contains(geometry1, geometry2) 如果 geometry1 包含 geometry2,則返回 true

  • ST_Union(geometry[]) 返回群組中所有幾何的聚合聯合

  • ST_GeometryType(geometry) 返回幾何的類型

  • ST_NumGeometries(geometry) 返回集合中的幾何數量,對於簡單幾何則返回 1

  • ST_Intersection(geometry, geometry) 返回兩個輸入幾何共有的區域

請記住我們可用的表格

  • nyc_census_blocks

    • name, popn_total, boroname, geom

  • nyc_streets

    • name, type, geom

  • nyc_subway_stations

    • name, geom

  • nyc_neighborhoods

    • name, boroname, geom

21.1. 練習

  • 有多少人口普查區塊不包含自己的質心?

    SELECT Count(*)
      FROM nyc_census_blocks
      WHERE NOT
        ST_Contains(
          geom,
          ST_Centroid(geom)
        );
    
    481
    
  • 將所有人口普查區塊聯合到單個輸出中。它是什麼類型的幾何?它有多少個部分?

    CREATE TABLE nyc_census_blocks_merge AS
      SELECT ST_Union(geom) AS geom
      FROM nyc_census_blocks;
    
    SELECT ST_GeometryType(geom)
      FROM nyc_census_blocks_merge;
    
    ST_MultiPolygon
    
    SELECT ST_NumGeometries(geom)
      FROM nyc_census_blocks_merge;
    
    63
    
  • 原點周圍一個單位緩衝區的面積是多少?它與您期望的有多大差異?為什麼?

    SELECT ST_Area(ST_Buffer('POINT(0 0)', 1));
    
    3.121445152258052
    

    注意

    單位圓(半徑為 1 的圓)的面積應為 pi,即 3.1415926… 差異是由於緩衝區邊緣的線性筆劃造成的。緩衝區具有有限數量的邊緣。增加緩衝區中的邊緣數量將使該值更接近 pi,但由於線性化,它始終會較小。

  • 布魯克林的「公園坡」和「卡羅爾花園」社區即將開戰!在社區邊界上構建一個 100 公尺寬的非軍事區多邊形。非軍事區的面積是多少?

    CREATE TABLE brooklyn_dmz AS
      SELECT
        ST_Intersection(
          ST_Buffer(ps.geom, 50),
          ST_Buffer(cg.geom, 50))
        AS geom
      FROM
        nyc_neighborhoods ps,
        nyc_neighborhoods cg
      WHERE ps.name = 'Park Slope'
      AND cg.name = 'Carroll Gardens';
    
    SELECT ST_Area(geom) FROM brooklyn_dmz;
    

    注意

    很容易緩衝兩個感興趣的社區,但是要獲得交集需要對表格進行自我聯結,創建一個只包含「公園坡」記錄的關係(ps)和另一個只包含「卡羅爾花園」記錄的關係(cg)。請注意,交集的面積以平方公尺為單位,因為我們仍然在 UTM 18 (EPSG:26918) 中工作。

    180990.964207547