Vairāk

Telpiskais savienojums, lai skaitītu punktus poligonos lat / lon PostGIS?

Telpiskais savienojums, lai skaitītu punktus poligonos lat / lon PostGIS?


Man ir galds, sauktsmājdzīvnieki, ar lata un lng koordinātām un mainīgajiem lielumiem un tabulu, kas izveidota, augšupielādējot shapefile, saucpilsēta, ar kolonnāmkreisais, labais, augšējais, apakšējais, lats, lng,ungeom.

lat lng kaķu suņi -59,4 42,1 2 0 -58,1 44,3 1 1 -59,7 43,6 0 3 -59,8 42,0 2 1

Es domāju, kā es izveidotu vaicājumu, kas apkopotu kaķu un suņu skaitu katrā robežā. Parasti es QGIS veiktu telpisku savienojumu, bet mans datu kopums ir pārāk liels, un tas avarē, pirms veiksmīgi pievienojas abiem.

Esmu diezgan pazīstams ar QGIS un Postgres, bet ļoti jauns pie PostGIS. Esmu izveidojis vaicājumu, bet man nav izdevies iegūt nepieciešamo atbildi:

atlasiet summu (pets.dogs) no mājdzīvniekiem, pilsēta WHERE ST_Within (pets.dogs, city.geom);

Kā to izdarīt PostGIS?


Ņemot hipotēzi, ka:

  • city.geom ir EPSG: 4326
  • latus, lng mājdzīvnieku tabulā var ņemt arī kā EPSG: 4326
  • Ka vēlaties summēt kaķu un suņu skaitu, kas atrodas katrā galda pilsētas ģeometrijā
  • Tas, ka galda pilsētas ģeomas nepārklājas vai ja pārklājas, jums nav svarīgi skaitīt divas reizes mājdzīvniekus
  • pilsētā ir pk, ko sauc par gid
  • Jūs neinteresē punkti ārpus pilsētu robežām

Veidojot vaicājumu, jāņem vērā sekojošais:

Konvertējiet lat, lng koordinātas uz postgis ģeometrijām 4326. gadā

IZVĒLIES ST_SetSRID (ST_MakePoint (lng, lat), 4326) NO mājdzīvniekiem;

Jums ir jāizveido vaicājums, kurā apkopoti kaķi un suņi uz katra ģeomēra:

SELECT gid, summa (kaķi), summa (suņi) NO pilsētas c, pets_with_geom p WHERE ST_Within (p.geom, c.geom) GROUP BY c.gid

Lai izveidotu pilnu vaicājumu, mēs izmantojam CTE

WITH pets_with_geom AS (SELECT kaķi, suņi, ST_SetSRID (ST_MakePoint (lng, lat), 4326) kā geom NO mājdzīvniekiem) SELECT gid, summa (kaķi), summa (suņi) NO pilsētas c, pets_with_geom p WHERE ST_Within (p.geom, c.geom) GROUP BY c.gid

Izmantojot šos testa datus:

IZVEIDOT GALDA mājdzīvniekus (gid SERIAL PRIMARY KEY, lat double precision, lng double precision, suņi int, kaķi int); IELIKT Mājdzīvniekiem (lat, lng, suņiem, kaķiem) VĒRTĪBAS (0,647, -0,977, 1, 1); IEVADIET mājdzīvniekiem (lat, lng, suņiem, kaķiem) VĒRTĪBAS (0,673, -0,245, 4, 4); IEVADIET mājdzīvniekiem (lat, lng, suņiem, kaķiem) VĒRTĪBAS (0,520, -0,789, 2, 2); CREATE TABLE pilsēta (gid SERIAL PRIMARY KEY, geom geometry (MULTIPOLYGON, 4326)); INSERT INTO pilsētas (GID, GEOM) vērtība (1, "0106000020E610000001000000010300000001000000050000008ACE1C2D1BE2F0BF64DF23728270E73F431C149D395AE6BF64DF23728270E73F1120C30FD548E6BFFE9B075EE536DD3F715074E668D9F0BF6294A978AE59DD3F8ACE1C2D1BE2F0BF64DF23728270E73F '); INSERT INTO pilsētas (GID, GEOM) vērtība (2 '0106000020E61000000100000001030000000100000005000000F05CB33A8C32B5BFC2C45A4F42EAE73F40B81BFB1E91B3BFA6C93BBE2E66DC3F189726EFF8BAD8BFB2EF113941B8DB3FB49E84D42F98D8BF2CD067A714B6E73FF05CB33A8C32B5BFC2C45A4F42EAE73F'); INSERT INTO pilsētas (GID, GEOM) vērtība (3 '0106000020E61000000100000001030000000100000005000000DC2985EDAD40DF3FF4C0ABDCA6FBE73F1A7EA846B208E03F42D199A36543DC3FD0B2210E8ACECC3F16E8B3530ADBDB3F200E8ACE1C2DCB3F8AB59E84D42FE83FDC2985EDAD40DF3FF4C0ABDCA6FBE73F');

Jūs varat iegūt šādus rezultātus:

┌─────┬────────────┐ │ gid │ summa │ summa │ ├─────┼────────────┤ │ 2 │ 4 │ 4 │ │ 1 │ 3 │ 3 │ └──────┴─────┴─────┘ (2 rindas)


Skatīties video: Geolocations Using PostGIS