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
    

    注意

    一个单位圆(半径为一的圆)的面积应该是 pi,即 3.1415926… 差异是由于缓冲区边缘的线性描边。缓冲区具有有限数量的边缘。增加缓冲区中的边缘数量将使值更接近 pi,但由于线性化,它将始终小于 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)只包含“Park Slope”记录,另一个(cg)只包含“Carroll Gardens”记录。请注意,交集的面积以平方米为单位,因为我们仍在使用 UTM 18(EPSG:26918)坐标系。

    180990.964207547