以下是我们迄今为止看到的所有函数的提示,它们应该对练习有用!
geometry
text
text
geometry
bytea
bytea
geometry
text
geometry
text
text
text
还有请记住我们现在数据库中已经有的表:
nyc_census_blocks
nyc_streets
nyc_subway_stations
nyc_neighborhoods
①'West Village'社区(neighborhood)的面积是多少?
SELECT ST_Area(geom)
FROM nyc_neighborhoods
WHERE name = 'West Village';
注意:面积以平方米为单位。要得到一个以公顷为单位的面积,需要再对其除以10000;要得到一个以英亩为单位的面积,需要对其除以4047。
②曼哈顿(Manhattan)行政区的面积是多少英亩?(提示:nyc_census_blocks和nyc_neighborhoods中都有boroname - rorough name - 行政区名)
SELECT Sum(ST_Area(geom)) / 4047
FROM nyc_neighborhoods
WHERE boroname = 'Manhattan';
或者:
SELECT Sum(ST_Area(geom)) / 4047
FROM nyc_census_blocks
WHERE boroname = 'Manhattan';
③纽约市(New York City)有多少个人口普查块(census blocks)多边形里有孔洞?
SELECT Count(*)
FROM nyc_census_blocks
WHERE ST_NumInteriorRings(ST_GeometryN(geom,1)) > 0;
注意:ST_NRings()函数可能让人感觉可以胜任,但是它也计算多-多边形的外环和内环。为了运行ST_NumInteriorRings(),我们需要将MultiPolygon几何图形转换为简单的多边形,因此,我们使用ST_GeometryN()从每个集合中提取第一个多边形。
④纽约市(New York)的街道总长度(公里)是多少?(提示:空间数据的测量单位是米,每公里有1000米)
SELECT Sum(ST_Length(geom)) / 1000
FROM nyc_streets;
⑤'Columbus Cir'(哥伦布圆环——纽约曼哈顿区的一个地标)有多长?
SELECT ST_Length(geom)
FROM nyc_streets
WHERE name = 'Columbus Cir';
⑥West Village社区边界的JSON表示是怎样的?
SELECT ST_AsGeoJSON(geom)
FROM nyc_neighborhoods
WHERE name = 'West Village';
返回的JSON里的几何类型是"MultiPolygon(多多边形)",有趣!
⑦West Village社区多多边形(MultiPolygon)中有多少个多边形?
SELECT ST_NumGeometries(geom)
FROM nyc_neighborhoods
WHERE name = 'West Village';
注意:在空间表中找到单元素多多边形并不少见。使用多多边形允许只有一种几何图形类型的表同时存储单(single-)几何图形和多(multi-)几何图形,而不必使用GeometryCollection类型。
⑧按类型(type)列出纽约市街道长度是多少?
SELECT type, Sum(ST_Length(geom)) AS length
FROM nyc_streets
GROUP BY type
ORDER BY length DESC;
注意:ORDER BY length DESC子句按长度以降序形式排序。