• PostGIS学习教程七:关于几何图形的练习



    一、函数列表

    以下是我们迄今为止看到的所有函数的汇总,它们应该对练习有用!

    sum(expression) aggregate to return a sum for a set of records
    count(expression) aggregate to return the size of a set of records
    ST_GeometryType(geometry) returns the type of the geometry
    ST_NDims(geometry) returns the number of dimensions of the geometry
    ST_SRID(geometry) returns the spatial reference identifier number of the geometry
    ST_X(point) returns the X ordinate
    ST_Y(point) returns the Y ordinate
    ST_Length(linestring) returns the length of the linestring
    ST_StartPoint(geometry) returns the first coordinate as a point
    ST_EndPoint(geometry) returns the last coordinate as a point
    ST_NPoints(geometry) returns the number of coordinates in the linestring
    ST_Area(geometry) returns the area of the polygons
    ST_NRings(geometry) returns the number of rings (usually 1, more if there are holes)
    ST_ExteriorRing(polygon) returns the outer ring as a linestring
    ST_InteriorRingN(polygon, integer) returns a specified interior ring as a linestring
    ST_Perimeter(geometry) returns the length of all the rings
    ST_NumGeometries(multi/geomcollection) returns the number of parts in the collection
    ST_GeometryN(geometry, integer) returns the specified part of the collection
    ST_GeomFromText(text) returns geometry
    ST_AsText(geometry) returns WKT text
    ST_AsEWKT(geometry) returns EWKT text
    ST_GeomFromWKB(bytea) returns geometry
    ST_AsBinary(geometry) returns WKB bytea
    ST_AsEWKB(geometry) returns EWKB bytea
    ST_GeomFromGML(text) returns geometry
    ST_AsGML(geometry) returns GML text
    ST_GeomFromKML(text) returns geometry
    ST_AsKML(geometry) returns KML text
    ST_AsGeoJSON(geometry) returns JSON text
    ST_AsSVG(geometry) returns 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

    二、练习

    ①’West Village’社区(neighborhood)的面积是多少?

    SELECT ST_Area(geom)
    FROM nyc_neighborhoods
    WHERE name = 'West Village';
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    注意:面积以平方米为单位。要得到一个以公顷为单位的面积,需要再对其除以10000;要得到一个以英亩为单位的面积,需要对其除以4047。

    ②Manhattan(曼哈顿)行政区的面积是多少英亩?(提示:nyc_census_blocks和nyc_neighborhoods中都有boroname - borough name - 行政区名-这个字段)

    SELECT Sum(ST_Area(geom)) / 4047
    FROM nyc_neighborhoods
    WHERE boroname = 'Manhattan';
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    或者:

    SELECT Sum(ST_Area(geom)) / 4047
    FROM nyc_census_blocks
    WHERE boroname = 'Manhattan';
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    ③纽约市(New York City)有多少个census blocks(人口普查块)多边形里有孔洞(内环)?

    SELECT Count(*)
    FROM nyc_census_blocks
    WHERE ST_NumInteriorRings(ST_GeometryN(geom,1)) > 0;
    
    • 1
    • 2
    • 3

    注意:ST_NRings()函数可能让人感觉可以胜任,但是它会计算多-多边形的外环和内环。为了运行ST_NumInteriorRings(),我们需要将MultiPolygon几何图形转换为简单的多边形,因此,我们使用ST_GeometryN()从每个集合中提取第一个多边形。
    在这里插入图片描述
    ④纽约市(New York)的街道总长度是多少公里?(提示:空间数据的测量单位是米,每公里有1000米)

    SELECT Sum(ST_Length(geom)) / 1000
    FROM nyc_streets;
    
    • 1
    • 2

    在这里插入图片描述
    ⑤’Columbus Cir’(哥伦布圆环——纽约曼哈顿区的一个地标)有多长?

    SELECT ST_Length(geom)
    FROM nyc_streets
    WHERE name = 'Columbus Cir';
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    ⑥West Village社区边界的JSON表示是怎样的?

    SELECT ST_AsGeoJSON(geom)
    FROM nyc_neighborhoods
    WHERE name = 'West Village';
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    返回的JSON里的几何类型是"MultiPolygon(多多边形)",有趣!

    ⑦West Village社区的多多边形(MultiPolygon)中有多少个多边形?

    SELECT ST_NumGeometries(geom)
    FROM nyc_neighborhoods
    WHERE name = 'West Village';
    
    • 1
    • 2
    • 3

    注意:在空间表中找到单元素多多边形并不少见。使用多多边形允许只有一种几何图形类型的表同时存储单(single-)几何图形和多(multi-)几何图形,而不必使用GeometryCollection类型。
    在这里插入图片描述
    ⑧按类型(type)分组列出纽约市街道长度是多少?

    SELECT type, Sum(ST_Length(geom)) AS length
    FROM nyc_streets
    GROUP BY type
    ORDER BY length DESC;
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    注意:ORDER BY length DESC子句按街道长度以降序形式排序。

  • 相关阅读:
    怎样吃透一个java项目?
    Python自学教程5-字符串有哪些常用操作
    【c++ 封装、继承、多态】
    汇编语言——王爽
    Ultra Math Preview : VSCode上的LaTeX公式实时预览插件
    英语六级-day8
    Sql Server查数据库job任务
    抖音seo矩阵系统源代码开发技术文档分享--SaaS开源
    Acwing 838. 堆排序
    AI大模型与函数式编程
  • 原文地址:https://blog.csdn.net/weixin_43850384/article/details/134430449