10. 几何练习¶
以下是我们到目前为止看到的所有函数的提醒。它们应该对练习有所帮助!
:command:`sum(expression)`聚合函数用于对一组记录进行求和并返回总和
:command:`count(expression)`聚合函数用于返回一组记录的大小
ST_GeometryType(geometry) 返回几何图形的类型
ST_NDims(geometry) 返回几何图形的维数
ST_SRID(geometry) 返回几何图形的空间参考标识号
ST_X(point) 返回点的 X 坐标
ST_Y(point) 返回点的 Y 坐标
ST_Length(linestring) 返回线串的长度
ST_StartPoint(geometry) 返回第一个坐标作为一个点
ST_EndPoint(geometry) 返回最后一个坐标作为一个点
ST_NPoints(geometry) 返回Linestring中坐标的数量
ST_Area(geometry) 返回多边形的面积
ST_NRings(geometry) 返回环的数量(通常为1,如果有孔则更多)
ST_ExteriorRing(polygon) 返回多边形的外环作为线串
ST_InteriorRingN(polygon, integer) 返回指定的多边形内部环作为线串
ST_Perimeter(geometry) 返回所有环的长度
ST_NumGeometries(multi/geomcollection) 返回集合中的部分数量
ST_GeometryN(geometry, integer) 返回集合的指定部分
ST_GeomFromText(text)`返回 ``geometry`
ST_AsText(geometry) 返回 WKT 格式的``text``
ST_AsEWKT(geometry) 返回 EWKT 格式的``text``
ST_GeomFromWKB(bytea) 返回
geometry
ST_AsBinary(geometry)`返回WKB格式的``bytea`
ST_AsEWKB(geometry) 返回 EWKB 格式的``bytea``
ST_GeomFromGML(text) 返回
geometry
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. 练习¶
“West Village”社区的面积是多少?
SELECT ST_Area(geom) FROM nyc_neighborhoods WHERE name = 'West Village';
1044614.5296486
注解
面积以平方米为单位给出。要将面积转换为公顷,请将其除以10000。要将面积转换为英亩,请将其除以4047。
"佩勒姆街"的几何类型是什么?长度是多少?
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_blocks
和nyc_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
“哥伦布圆环”(又名哥伦布圆环)有多长?
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
子句按照长度降序排列结果。结果是最常见的类型首先出现在列表中。