14. Spatial Joins-övningar¶
Här är en påminnelse om några av de funktioner vi har sett. Tips: de bör vara användbara för övningarna!
sum(uttryck): aggregat för att returnera en summa för en uppsättning poster
count(uttryck): aggregat för att returnera storleken på en uppsättning poster
ST_Area(geometry) returnerar polygonernas area
ST_AsText(geometry) returnerar WKT
text
ST_Contains(geometry A, geometry B) returnerar true om geometri A innehåller geometri B
ST_Distance(geometry A, geometry B) returnerar det minsta avståndet mellan geometri A och geometri B
ST_DWithin(geometry A, geometry B, radius) returnerar true om geometri A ligger på radieavstånd eller mindre från geometri B
ST_GeomFromText(text) returnerar
geometry
ST_Intersects(geometry A, geometry B) returnerar true om geometri A skär geometri B
ST_Length(linestring) returnerar längden på linestring
ST_Touches(geometry A, geometry B) returnerar true om gränsen för geometri A berör geometri B
ST_Within(geometri A, geometri B) returnerar true om geometri A ligger inom geometri B
Tänk också på de tabeller vi har tillgängliga:
nyc_census_blocks
name, popn_total, boroname, geom
nyc_streets
name, type, geom
nyc_subway_stations
name, routes, geom
nyc_neighborhoods
name, boroname, geom
14.1. Övningar¶
Vilken tunnelbanestation ligger i ”Little Italy”? Vilken tunnelbanelinje ligger den på?
SELECT s.name, s.routes FROM nyc_subway_stations AS s JOIN nyc_neighborhoods AS n ON ST_Contains(n.geom, s.geom) WHERE n.name = 'Little Italy';
name | routes -----------+-------- Spring St | 6
Vilka stadsdelar trafikeras av 6-tåget? (Tips: Kolumnen
routes
i tabellennyc_subway_stations
har värden som ”B,D,6,V” och ”C,6”)SELECT DISTINCT n.name, n.boroname FROM nyc_subway_stations AS s JOIN nyc_neighborhoods AS n ON ST_Contains(n.geom, s.geom) WHERE strpos(s.routes,'6') > 0;
name | boroname --------------------+----------- Midtown | Manhattan Hunts Point | The Bronx Gramercy | Manhattan Little Italy | Manhattan Financial District | Manhattan South Bronx | The Bronx Yorkville | Manhattan Murray Hill | Manhattan Mott Haven | The Bronx Upper East Side | Manhattan Chinatown | Manhattan East Harlem | Manhattan Greenwich Village | Manhattan Parkchester | The Bronx Soundview | The Bronx
Observera
Vi använde nyckelordet
DISTINCT
för att ta bort duplicerade värden från vår resultatuppsättning där det fanns mer än en tunnelbanestation i ett område.Efter 11 september var Battery Park-området avspärrat i flera dagar. Hur många människor var tvungna att evakueras?
SELECT Sum(popn_total) FROM nyc_neighborhoods AS n JOIN nyc_census_blocks AS c ON ST_Intersects(n.geom, c.geom) WHERE n.name = 'Battery Park';
17153
Vilket område har den högsta befolkningstätheten (personer/km2)?
SELECT n.name, Sum(c.popn_total) / (ST_Area(n.geom) / 1000000.0) AS popn_per_sqkm FROM nyc_census_blocks AS c JOIN nyc_neighborhoods AS n ON ST_Intersects(c.geom, n.geom) GROUP BY n.name, n.geom ORDER BY popn_per_sqkm DESC LIMIT 2;
name | popn_per_sqkm -------------------+------------------ North Sutton Area | 68435.13283772678 East Village | 50404.48341332535