19. Övningar i geografi¶
Här är en påminnelse om alla de funktioner vi har sett hittills. De bör vara användbara för övningarna!
Sum(number) adderar alla siffror i resultatuppsättningen
ST_GeogFromText(text) returnerar en geografisk
ST_Distance(geography, geography) returnerar avståndet mellan olika geografiska områden
ST_Transform(geometry, srid) returnerar geometrin i den nya projektionen
ST_Length(geography) returnerar längden på raden
ST_Intersects(geometry, geometry) returnerar true om objekten inte är åtskilda i planar space
ST_Intersects(geography, geography) returnerar true om objekten inte är åtskilda i sfäroidal rymd
Tänk också på de tabeller vi har tillgängliga:
nyc_streets
name, type, geom
nyc_neighborhoods
name, boroname, geom
19.1. Övningar¶
Hur långt är det mellan New York och Seattle? Vilka är enheterna i svaret?
Observera
New York =
POINT(-74.0064 40.7142)
och Seattle =POINT(-122.3331 47.6097)
SELECT ST_Distance( 'POINT(-74.0064 40.7142)'::geography, 'POINT(-122.3331 47.6097)'::geography );
3875538.57141352
Vad är den totala längden på alla gator i New York, beräknat på sfäroiden?
SELECT Sum( ST_Length(Geography( ST_Transform(geom,4326) ))) FROM nyc_streets;
10421999.666
Observera
Den längd som beräknas i den plana projektionen ”UTM Zone 18” är 10418904.717, 0.02% different. UTM är bra på att bevara yta och avstånd inom zongränserna.
Korsar ”POINT(1 2.0001)” ”POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))” i geografi? I geometri? Varför är det skillnad?
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
Observera
Kvadratens övre kant är en rät linje i geometri och passerar under punkten, så kvadraten innehåller inte punkten. Kvadratens övre kant är en storcirkel i geografi, och passerar över punkten, så kvadraten innehåller punkten.