19. 地理练习¶
以下是对我们迄今为止所见所有函数的回顾。它们对练习很有用!
Sum(number) 将结果集中的所有数字加起来
ST_GeogFromText(text) 返回地理
ST_Distance(geography, geography) 返回地理之间的距离
ST_Transform(geometry, srid) 返回几何,以新的投影方式
ST_Length(geography) 返回线的长度
ST_Intersects(geometry, geometry) 如果对象在平面空间中不分离,则返回 true
ST_Intersects(geography, geography) 如果对象在球面空间中不分离,则返回 true
还要记住我们可用的表格
nyc_streets
name, type, geom
nyc_neighborhoods
name, boroname, geom
19.1. 练习¶
纽约到西雅图有多远?答案的单位是什么?
注意
纽约 =
POINT(-74.0064 40.7142)
和西雅图 =POINT(-122.3331 47.6097)
SELECT ST_Distance( 'POINT(-74.0064 40.7142)'::geography, 'POINT(-122.3331 47.6097)'::geography );
3875538.57141352
在球体上计算,纽约所有街道的总长度是多少?
SELECT Sum( ST_Length(Geography( ST_Transform(geom,4326) ))) FROM nyc_streets;
10421999.666
注意
在平面“UTM Zone 18”投影中计算的长度为 10418904.717,相差 0.02%。UTM 擅长在区域边界内保留面积和距离。
‘POINT(1 2.0001)’ 在地理上与 ‘POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))’ 相交吗?在几何上呢?为什么会有区别?
SELECT ST_Intersects( 'POINT(1 2.0001)'::geography, 'POLYGON((0 0,0 2,2 2,2 0,0 0))'::geography ); SELECT ST_Intersects( 'POINT(1 2.0001)'::geometry, 'POLYGON((0 0,0 2,2 2,2 0,0 0))'::geometry );
true and false
注意
正方形的上边缘在几何上是一条直线,并且经过下方该点,因此正方形不包含该点。正方形的上边缘在地理上是一个大圆,并且经过上方该点,因此正方形包含该点。