Бештар

Чӣ гуна бояд дар PostGIS ҳамроҳшавии фазоиро анҷом дод, ки арзиши ҳадди ақали нуқтаи буриши бисёркунҷаро бармегардонад?

Чӣ гуна бояд дар PostGIS ҳамроҳшавии фазоиро анҷом дод, ки арзиши ҳадди ақали нуқтаи буриши бисёркунҷаро бармегардонад?


Ман як мизи бисёркунҷа (буферӣ) ва ҷадвали нуқта (dem_points) дорам ва ман мехоҳам ба онҳо пайванди фазоӣ созам. Ман бояд ба нуқта бо баландии ҳадди ақал (dn) ба полигони ба фазо мувофиқи он дар PostGIS ҳамроҳ шавам.

Дар мисоли дар боло овардашуда ман мехоҳам, ки натиҷаи ман полигони дорои osm_id of'1234 'бошад ва бо нуқтаи dn = 4200 пайваст карда шавад. Ман ин пурсишро дорам, аммо чизе хомӯш аст:

Osm_id, gid, MIN (dn) FROM -ро интихоб кунед (a.id AS osm_id, b.id AS gid, b.dn AS dn АЗ буфер AS, a_ dem_points AS b КУҶО ST_Within (buffer.geom, dem_points.geom)) BY (osm_id, gid); '

Бо ин дархост ман ин хатогиро мегирам:

ERROR: зерпурсиш дар FROM бояд тахаллус дошта бошад LINE 2: FROM ( ^ Маслиҳат: Масалан, FROM (SELECT…) [AS] foo. SELECT ...) [AS] foo. Аломат: 40

Чӣ гуна ман бояд дархости худро сохтор кунам, то ба таври фосилавӣ ба нуқта бо баландии ҳадди аққал ба бисёркунҷаи дохилшаванда ҳамроҳ шавад?


Аввал функсияи тирезаро барои гирифтани рутбаи фармоишшудаи dem_points истифода баред. Дар қадами дуюм филтр кардани dem_point бо пасттарин dn аз рӯи рутба.

Osm_id, gid, dn АЗ (SELECT b.osm_id, p.gid, p.dn, row_number () OVER (PARTITION BY osm_id order by dn) ҳамчун рутба аз буфер b, dem_points p WHERE ST_Within (p.geom, b. geom)) ба WHERE рутба ҳамроҳ шуд = 1

Ба шумо лозим аст, ки нуқтаҳои як геоми буфериро гурӯҳбандӣ кунед, пас min (dn) -ро барои ҳар як геоми буферӣ пайдо кунед ва дар ниҳоят онро ба аслӣ ҳамроҳ кунед, то нуқтаи gidро ба даст оред. Чунин як чизро санҷед (бо истифода аз синтаксиси WITH барои осон кардани пайравӣ):

БО foo AS (SELECT b.osm_id, p.gid, p.dn АЗ буфер b, dem_points p WHERE ST_Within (p.geom, b.geom)), bar AS (SELECT osm_id, min (dn) as dn FOM GROUP BY osm_id) bar.osm_id, foo.gid, bar.dn -ро интихоб кунед АЗ бар ҶОЙ foo ON foo.osm_id = bar.osm_id ВА foo.dn = bar.dn

Аҳамият диҳед, ки роҳи дигари ин кор истифодаи банди HAVING PostgreSQL аст, аммо ман фикр мекунам, ки пайравӣ кардан душвортар аст.


Ман роҳи алтернативии ҳалли ин саволро ёфтам. Пас аз ин ришта: https://geonet.esri.com/thread/16118. Бо иҷрои Бисёр ба як ҳамроҳшавӣ, ки нуқтаҳо хусусиятҳои ҳадаф ва полигонҳо хусусиятҳои пайвастшавӣ мебошанд. Сипас дар муқобили қабати нав як дархости таърифро иҷро кунед:

dn дар (min (dn) -ро аз гурӯҳи dn бо osm_id интихоб кунед)

Ин акнун танҳо он нуқтаҳоро бо арзиши ҳадди ақали "dn" нишон медиҳад. Ҳамаи ин бояд дар як пойгоҳи додаҳои шахсӣ анҷом дода шавад.


Видеоро тамошо кунед: postgis