Vairāk

Vairāku slāņu krustojums PostGIS


Man ir jāuzraksta PL / pgSQL saglabāta procedūra vairāku slāņu krustošanās aprēķināšanai. Piemēram, trim slāņiem A, B, C šai funkcijai jāatgriež ABC ģeometrija:

Funkcija kā ievadi ņem to slāņu ID, kuriem jābūt krustotiem. Vai kāds var man ieteikt šīs funkcijas izveidi? Manas domas par to ir nepieciešams, lai krustotos pirmais slānis un otrais, tad šī krustojuma rezultāts krustotos ar trešo slāni utt.


Lūdzu, sniedziet man komentārus par manu piedāvāto risinājumu:

Izveidot vai nomainīt FUNCTION fp_intersect (vids varchar) ATGRIEZTIES vesels skaitlis AS $$ DECLARE lid_new integer; lndx vesels skaitlis: = 1; vāki_arr vesels skaitlis []; BEGIN IF regexp_replace (vāki, E ' s +', ", 'g') ~ E '^ -?  d + $' THEN RETURN -1; END IF; SELECT nextval ('g_layer_lid_seq') INTO lid_new; vāki_arr: = string_to_array (regexp_replace (vāki, E ' s +', ", 'g'), ','); NOLIET TABULU, JA PASTĀV tmp_intersect; IZVEIDOT PAGAIDU TABULU tmp_intersect AS SELECT geom FROM g_lgeom WHERE lid = vāki_arr [1]; KAMĒR lndx 

Ko darīt, ja pirms krustojuma un apgabala aprēķināšanas pārbaudāt pārklājošā apgabala krustojumus, tas var samazināt laiku.

Jūs, iespējams, iegūtu vairāk atbildes uz to vietnē gis.stackexchange.com.

Therea ir vairākas lietas, ko varat darīt.

Jums jāpārliecinās, ka esat ieguvis pirmo daudzstūru filtrēšanu, kas faktiski krustojas ar indeksa palīdzību.

Uz galda ievietojiet kopsavilkuma indeksu ar daudzām ģeometrijām un buferētajās ģeometrijās st_intersects vietā izmantojiet st_dwithin (geom, 500). Tas ir tāpēc, ka buferētajās ģeometrijās nevar izmantot indeksu, kas aprēķināts pēc ne buferētās ģeometrijas.

Jūs arī sakāt, ka jums ir daudzstūri. Ja katrā multipoligonā faktiski ir vairāk nekā 1 daudzstūris, jūs varētu iegūt daudz lielāku ātrumu, ja pirms indeksa izveidošanas vispirms sadalīsit daudzstūrus atsevišķos daudzstūros. Tas padarīs.indeksu par daudz lielāku darba daļu.

Postgis faktiski ir funkcija sadalīt pat atsevišķus daudzstūrus mazākos gabalos tā paša iemesla dēļ. ST_SubDivide

Tāpēc vispirms izmantojiet ST_Dump, lai iegūtu atsevišķus daudzstūrus:

Beidzot vaicājums, kaut kas līdzīgs

Ja tas joprojām ir lēns, varat sākt spēlēt ar ST_SubDivide.

Vēl viena lieta. Ja b tabulas atsevišķajā daudzpoligonā ir daudz ģeometriju, arī sadaliet tos un tur ievietojiet arī indeksu.

Tas varētu būt lēns arī pēc visām šīm lietām. Tas ir atkarīgs no tā, cik daudz virsotņu punktu ir sadalītajos daudzstūros, kas faktiski krustojas (un st_dwithin arī no tā, cik virsotņu punktu ir daudzstūros ar ierobežojošām lodziņām, kas pārklājas)

Bet tagad jums nav neviena indeksa, kas jums palīdzētu, tāpēc tam vajadzētu to padarīt daudz ātrāku.


PyQGIS Problēma ar noteiktu vektoru slāņu pievienošanu QGIS no postgres

Esmu izveidojis rīku, lai atrastu slāņus no mūsu PostGIS datu bāzes, pamatojoties uz virkņu atbilstību, un pievienotu tos pašreizējam QGIS projektam. Tālāk sniegtajā piemērā datu kopas nosaukumā meklēju & # 8216landscape & # 8217.

Problēma: tas pašreizējam projektam pievieno dažas datu kopas, bet ne visas (2 no 4 darbībām).

Pamata kods, kas slāņus pievieno: ## Es ievadu visus parametrus, beigās ir & # 8216P & # 8217

Ņemiet vērā, ka sākotnēji nevienam no šiem slāņiem sākotnēji bija ID lauks un pat tad darbojās tie paši 2 no 4. Tad es veicu pilienu un izveidoju (FME, izmantojot PostGIS rakstītāju) visām datu kopām un priekšpusē ievietojot kolonnu & # 8216id & # 8217 (skatiet iestatījumus zemāk), un joprojām tās pašas divas datu kopas nevēlējās ielādēt.

Pievienojot slāni no QGIS pārlūka loga, PostGIS savienojumi tiek veiksmīgi pievienoti divām problēmu datu kopām, darbojas arī tad, ja izmantoju DB pārvaldnieku.

Visām 4 datu kopām ir vienādi atribūtu / kolonnu datu tipi un kolonnu nosaukumi, id, geom, autocad_layer utt. Tāpēc, lai izskaidrotu problēmu, es neredzu atšķirību datos. Visu datu kopu ģeometrija tika pārbaudīta un fiksēta pirms došanās datu bāzē. Tās ir reālas tabulas, nav skatījumu, atšķirībā no iepriekšējās ziņas.

Q1. Vai ir kādas idejas, kāpēc šīs 2 datu kopas netiek ielādētas pitona rīkā?

Q2. Kāda ir atšķirība starp QGIS GUI (Browser panel / DB Manager) pievienotā slāņa kodu un pitona ekvivalentu?

2 atbildes

Iespējams, jautājums ir ģeometriskais tips. PostGIS var būt vispārīgas ģeometrijas tabulas, fme var tās uzrakstīt, bet QGIS nevar tās apstrādāt, nenorādot ģeometrisko tipu.

Pārbaudiet telpiskās kolonnas ģeometrisko tipu. Pārliecinieties, ka izvēles rūtiņa “Izveidot vispārīgas telpiskās kolonnas” nav atzīmēta, pēc tam varat izvēlēties punktu / polilīniju / daudzstūri utt.

Pirms 5 mēnešiem atbildēja nielsgerrits ar 4 pozitīvām balsīm

Visiem citiem lasītājiem es atklāju dažus citus apstākļus vai papildu informāciju, kad postgis slāņi netika ielādēti QGIS:

Ja slāņi satur jauktu ģeometriju vienā datu kopā vai sarežģītas ģeometrijas, piemēram, kolekcijas vai daudzskaldņu virsmas. QGIS pārlūka panelī var redzēt vairākus viena nosaukuma slāņus, vienu punktu, līniju, daudzstūri. Varat izmantot postgis SQL, lai piespiestu kolekcijas uz daudzstūriem (ST_CollectionExtract) CAD lokiem / līknēm uz līnijām (ST_CurveToLine).

Kad bija sastopamas ģeometrijas kļūdas, piemēram, paškrustošanās vietas, un to var novērst, izmantojot postgis SQL ST_MakeValid.

Kad trūka koordinātu sistēmas un SRID tiek ziņots kā 0. Mums tas bija saistīts ar pielāgotas DRS izmantošanu, kurai nav reģistrēta EPSG / SRID. Jūs varat izmantot postgis SQL UpdateGeometrySRID ar nosacījumu, ka pievienojāt pielāgoto DRS tabulai spatial_ref un zināt ar to saistīto numuru.

Ja jums nav paveicies, avota datiem, piemēram, CAD, ir vairākas problēmas, piemēram, jums, iespējams, būs jātīra dati noteiktā secībā. Man derēja:

  1. kolekcija uz daudzstūri,
  2. līkne līdz līnijai
  3. St padarīt derīgu
  4. Atjaunināt ģeometrijas SRID (attiecas uz slāni)
  5. Pievienojiet un sērijas int 'id' lauku kā pirmo atribūtu lauku (ja tas vēl nav izdarīts) un iestatiet kā primāro atslēgu, jo QGIS nepatīk, ja to nav. Jums var šķist, ka tas tiek ielādēts, taču nevarēsit rediģēt slāni.

Paturiet prātā, ka St makevalid var labot lietas un atkal ievietot ģeogrāfiskos elementus kolekcijā, tāpēc jums, iespējams, vajadzēs vēlreiz izpildīt vienu vai vairākas darbības.

Šīs darbības es ieviesu FME darbagaldā, izmantojot pitona zvanītāju, lai tos publicētu Postgis. Bet arī izveidoja QGIS pitona rīkus, lai attīrītu datus, kas jau ir datu bāzē.


Vai apvienot datus ar daudzstūra slāņiem, kas daļēji pārklājas? (QGIS)

Man ir datu kopa ar Baltimoras apkaimēm un pēc tam virkne datu kopu Baltimoras tautas skaitīšanas traktātiem, kas datēti ar 1930. gadu. Mans mērķis ir aplūkot, kā gadu laikā katrā apkaimē ir mainījies iedzīvotāju skaits un vienību daudzums. Tomēr mikrorajoni un tautas skaitīšanas ceļi pārklājas neprecīzi, tāpēc rodas šādas situācijas:

  1. Lielākajā daļā mikrorajonu ir vairāki skaitīšanas raksti.
  2. Daži tautas skaitīšanas veidi pārklājas vairākos rajonos.
  3. Dažos tautas skaitīšanas ceļojumos ir vairāk nekā viena pilnīga apkaime.

Es domāju, ka labākais veids, kā rīkoties, būs iedzīvotāju skaita apkopošana pēc attiecīgā tautas skaitīšanas trakta apgabala & # 8217 ierobežojuma svērtās attiecības noteiktā apkaimē. Kā daži piemēri (sk. Arī attēlu)
1940. gada tautas skaitīšanā Rezervuāru kalns (apkaime) satur 100% CT 0132 (pop 5 070), 80% CT 0131 (pop 4795), 20% CT 0133 (pop 6263) un niecīgu drosli (teiksim & # 8217) 2%) no CT 0134 (pop 3934). Tātad 5070 + (4795 * .8) + (6263 * .2) + (3934 * .02) = 10,237.

Parkvjūve / Vudbruka ir vesela apkaime, kas atrodas CT 0134 1940. gadā. Tā kā varbūt 10% no 0134 atrodas apkārtnē, pop 3934 * .1 = 393.

Es zinu, ka tas radīs zināmu agregācijas neobjektivitāti, bet es domāju, ka tas, visticamāk, ir daudz precīzāks nekā tikai atrast katra skaitīšanas trakta centrālo punktu un pēc tam piešķirt kopējo iedzīvotāju skaitu jebkurai apkārtnei, kurā atrodas centra punkts.

Vai ir saprātīgi iespējams veikt šāda veida analīzi un aprēķinus ar QGIS?

Šeit tiek sakārtots tas, ko es iedomājos kā gandrīz masīvu izvadi formāta failā & quotNeighborhood & quot:

Apkārtne 1940. gadi 1940. gadi_Pilnais pops 1940. gadu_CT_Area_Percentage 1940. gadu_CT_Novērtēts_Pop
Rezervuāra kalns G240510000131, G240510000132, G240510000133, G240510000134 4795,5070,6263,3934 .8,1,.2,.02 10237
Parkview G240510000134 3934 .1 393.4

Šī ir līdz šim visvairāk saistītā problēma, kuru esmu atradis līdz šim, lai gan es nekad neesmu izmantojis PostGIS.

2 atbildes

QGIS Virtuālais slānis (SpatiaLite SQL):

Personīgi man patīk atstāt bāzes datus neskartus un tos darīt Virtuālais slāniss vietā ar analīzi, nevis dublētiem datiem. Personīgi es dodu priekšroku SQL gandrīz visur:

Neaizmirstiet aizstāt vērtības, kas ietvertas & lt & gt, ar faktiskajiem slāņa / lauka identifikatoriem.

Pirms 2 mēnešiem atbildēja ģeozelots ar 1 pozitīvu balsojumu

QGIS izteicieni:

Izmantojiet šīs četras izteiksmes, lai izveidotu jaunus (virtuālus vai nē) laukus savā apkaimes formas failā:

Neaizmirstiet aizstāt vērtības, kas ietvertas & lt & gt, ar faktiskajiem slāņa / lauka identifikatoriem.


Tempļa PSM ĢIS

Mērķis:
Izmantojot PostGIS telpisko datu bāzi, atrodiet laika rindās vislabāk saskaņotos daudzstūrus
Priekšvēsture:
Iepriekšējam projektam bija nepieciešams salīdzināt datus par mājokļiem no 1930. gadiem līdz pašreizējiem un vēsturiskajiem ASV tautas skaitīšanas datiem. Skaitīšanas datu ģeogrāfiskā daļa tika iegūta no Nacionālās vēsturiskās ģeogrāfiskās informācijas sistēmas (NHGIS), kas ražo lejupielādējamus formas failus ar lauku GISJOIN, kas ļauj ērti saistīt formas failu ar tautas skaitīšanas datu tabulām, kas pieejamas arī caur NHGIS. 1930. gadu dati par mājokļiem bija 1937. gada Mājas īpašnieku aizdevumu korporācijas (HOLC) Filadelfijas kartes attēla veidā, kas pieejama šeit. Ļoti plaši HOLC klasificēja rajonus, pamatojoties uz rasi / klasi un šīm kategorijām, un pēc tam tos izmantoja, lai noteiktu mājokļa aizdevuma palīdzības iespējamību. Ir diskusijas, ja HOLC process normalizē uz mājām balstītu mājokļu kreditēšanas praksi, kas balstās uz sacensībām, un pēc tam noved pie turpmākiem mājokļu jautājumiem, piemēram, pārdalīšanas. vairāk informācijas.

Process:
HOLC kartes dati tika ievilkti ĢIS un tika izveidots apkaimes vērtēšanas formas fails (darba sludinājumos šis process bieži tiek uzskaitīts kā “Heads-Up Digitizing”). Šeit ir ērta ArcMap un cita, izmantojot QGIS, apmācība. Shapefile un HOLC jpeg ir pieejami vietnē github.

HOLC apkārtnes vērtēšanas shēma nesakrīt ar pašreizējo (vai vēsturisko) skaitīšanas kārtību, tāpēc pgAdmin un PostgreSQL datu bāzes dzinēja telpiskās vaicāšanas iespējas tika izmantotas, lai jaunizveidotos HOLC digitālos datus saskaņotu ar NHGIS Decennial Census ģeogrāfiskajiem datiem.
Izveidojiet PostGIS telpisko datu bāzi un izmantojiet pgShapeLoader, lai ielādētu formas failus (HOLC un NHGIS telpiskos datus).

Pēc daudziem izmēģinājumiem un kļūdām šāds kods darbojās vislabāk:

izveidot tabulu pārklāšanos2010census kā
ar ierobežotu kā (
atlasiet atšķirīgu us2010. *
no mums2010, holc1937
WHERE ST_DWithin (us2010.geom, holc1937.geom, 0,25)
pasūtiet mums2010.gid
)
/ * augstāk esošajā sadaļā 2010. gada tautas skaitīšanas daudzstūru (visa ASV) vaicājums tiek ierobežots ar tiem, kas atrodas HOLC daudzstūru tuvumā - ievade var mainīties atkarībā no failu projekcijas * /

SELECT DISTINCT ON (ierobežots.gid)
limited.gid kā us2010a_gid,
holc1937.gid kā holc_gid, holc1937.name, holc1937.grade,
st_area ((st_transform (limited.geom, 4326) :: ģeogrāfija)) kā area_check,
ST_Area (ST_Intersection ((st_transform (limited.geom, 4326) :: ģeogrāfija),
(st_transform (holc1937.geom, 4326) :: ģeogrāfija))) kā intersect_area_2010_meters,
[ST_Area (ST_Intersection ((st_transform (limited.geom, 4326) :: ģeogrāfija),
(st_transform (holc1937.geom, 4326) :: ģeogrāfija))) /
st_area ((st_transform (limited.geom, 4326) :: ģeogrāfija))) * 100 kā percent_overlap,

/ * aprēķina atgrieztās tautas skaitīšanas un HOLC daudzstūru laukumu un pārklāšanās procentuālo daudzumu * /

ierobežots. *
NO ierobežota, holc1937
kur limited.geom & amp & amp ST_Expand (holc1937.geom, 1) un ST_Area (ST_Intersection (limited.geom, holc1937.geom)) & gt0

/ * pievienojas failiem, kur ģeoms pārklājas * /

PASŪTĪT, izmantojot ierobežotu.gid, ST_Area (ST_Intersection ((st_transform (limited.geom, 4326) :: ģeogrāfija),
(st_transform (holc1937.geom, 4326) :: ģeogrāfija))) DESC

/ * kārto pēc lielākās pārklāšanās summas un kopā ar zvanu DISTINCT ON
atgriež tikai skaitīšanas daudzstūra pirmo gadījumu, kas pārklājas ar mērķa daudzstūri * /

Lai gan šai metodei lietotājam ir jāatjaunina un jāatkārto šis kods katram salīdzinājumam, izveidotās tabulas var eksportēt uz jūsu ĢIS vai QGIS var tieši izveidot savienojumu ar jūsu datu bāzi, ja vēlaties šo opciju. Tā kā vaicājums arī katram gadam izveidoja unikālu identifikatoru un tautas skaitīšanas datu daudzstūri, izmantojot šos datus, tika izveidota gājēju pāreja / atslēgu tabula, kas ļāva vairākus gadus pievienot tautas skaitīšanas datus (rase, mājokļa ienākumu statuss utt.), Izmantojot iepriekš pieminētais lauks NHGIS GISJOIN. Pēc daudzgadu tautas skaitīšanas datiem, kas pievienoti gājēju pārejas tabulai, HOLC ģeogrāfisko apgabalu salīdzinājumus varētu veikt neatkarīgi no skaitīšanas robežu nobīdes.


PostGIS

QGIS metode ir piemērota, ja jums nav daudz daudzstūru, ko aprēķināt, bet, ja jums ir daudz funkciju, process vai nu aizņems ilgu laiku, vai arī avarēs (starp citu, ArcGIS neatšķiras).

PostGIS glābšanai. Šai pieejai vispirms izveidojiet telpisko datu bāzi un aktivizējiet paplašinājumu PostGIS ar komandu CREATE EXTENSION postgis. Tad jūs varat ielādēt shapefiles PostGIS, izmantojot shapefile iekrāvēju, kas ir komplektā ar PostGIS, vai arī varat tos izmantot QGIS DB Manager. Importēšanas procesā jums jānorāda, ka slāņi atrodas NAD 83, norādot pareizo EPSG kodu, mainot SRID no 0 uz 4269.

PostGIS nav daudz globālu vai kontinentālu projicētu koordinātu sistēmu definīciju, tāpēc mums tās telpisko atsauču tabulā jāpievieno viena Ziemeļamerikas Albers vienādam apgabalam. Ātri apmeklējot Spatial Reference un meklējot šo sistēmu, tiek iegūta definīcija, un mēs varam iegūt PostGIS Insert paziņojumu, kuru mēs varam kopēt un ielīmēt mūsu datu bāzes SQL vaicājuma logā. Pirms tā izpildes mums paziņojumā jāmaina SRID numurs no 9102008 uz 102008, lai izvairītos no pārbaudes ierobežojuma pārkāpšanas, kas neļauj ID būt lielākiem par 6 cipariem.

Ievietojot definīciju, mēs izveidojam tukšu tabulu sēriju, kas turēs mūsu abus slāņus, un pēc tam palaidīsim ievietošanas paziņojumu, kur mēs ņemam vēlamās kolonnas no sākotnējām tabulām un ievedam tās jaunajās tabulās. To darot, mēs arī pārveidojam ģeometriju no NAD 83 uz Albers. Beigās ir svarīgi ģeometrijā izveidot telpisko indeksu, jo tas patiešām paātrinās telpisko izvēli.

Kad dati ir ievietoti, mēs varam pārbaudīt ģeometrijas derīgumu ar ST_IsValid, un, ja ģeometrija ir slikta, mēs to varam salabot ar citu paziņojumu, izmantojot ST_MakeValid, kur IN satur identifikatorus nepareizai ģeometrijai, kas atklāta iepriekšējā paziņojumā.

Mēs varam izpildīt pārklāšanās darbību ar vienu paziņojumu. PostGIS ļauj aprēķināt laukumu lidojumā, izmantojot funkciju ST_Area, un pārklāšanai ir divas funkcijas: ST_Intersects darbojas kā telpisks savienojums, kas vienu slāni saista ar otru, atlasot visas funkcijas, kuras krustojas, savukārt ST_Intersection izvēlas katra faktiskos gabalus. iezīme & # 8217s ģeometrija, kas krustojas. Šis piemērs ir paredzēts tikai Pensilvānijai, kuru mēs atlasām, izmantojot štata FIPS kodu & # 821742 & # 8217 no CD slāņa. Pirms izpildīt visu kopu, ir laba ideja iegūt paziņojumu tieši uz ierakstu paraugu. Divkāršie koli ir PostgreSQL saīsne datu tipu pārsūtīšanai no viena veida uz otru. Tas ir nepieciešams, ja izmantojat funkciju ROUND, lai iegūtu rezultātu, kas nav vesels skaitlis (jo ROUND nevar izmantot, lai noapaļotu reālos decimāldaļus, kas iegūti no funkcijas AREA, līdz noteiktam skaitlim aiz komata).

Šis paziņojums man prasīja apmēram 20 sekundes, lai palaistu. Rezultāti (sk. Zemāk) ietver vairākus ierakstus, kurus QGIS neatgriezās, kur laukums un pārklāšanās ir 0 vai nu bezgalīgi maza pārklāšanās laukuma dēļ, kas noapaļojas līdz nullei, vai arī stingra krustojuma interpretācija (kas ietver apgabalus, kas pārklājas un pieskaras ). Lai gan ir funkcija ST_Overlap, tā neatgriezīs ģeometriju, ja viena ģeometrija ir pilnībā ietverta citā (tāpēc mēs to nevaram izmantot). Piemēram, ZCTA 19138 un 19139 parādās vienā apgabalā, bet tiem ir divi ieraksti, viens ar 100% vērtību, bet otrs ar 0% vērtību.

Krustošanās darbību un laukuma aprēķinu rezultāts pgAdmin / PostGIS

Mēs varam mest šos ierakstus, vai nu izdzēšot tos no gala rezultāta, kad process ir pabeigts, vai arī varam pievienot citu apgalvojumu mūsu WHERE klauzulai, lai tos filtrētu:

Tas pagarināja izpildes laiku līdz 30 sekundēm un samazināja ierakstu skaitu no 2523 līdz 2061.

Kad paziņojums izskatās labi, mēs varam nomest AND filtru Pensilvānijā un ģenerēt rezultātu visai valstij. Izmantojot pgAdmin 4, rezultātu varam ierakstīt tieši kā CSV. Vai arī varat priekšvārdu ievadīt ar CREATE VIEW pārklāšanos, lai saglabātu paziņojumu kā vaicājumu, kuru varat izsaukt jebkurā laikā. Vai arī jūs varat ievadīt priekšrakstu ar CREATE TABLE pārklāšanos, un vaicājuma rezultāts tiks saglabāts jaunā tabulā. Tas prasa ilgāku laiku nekā pārējās divas iespējas, taču dod iespēju vaicāt un modificēt iegūto tabulu. Eksportēt tabulu kā CSV var ātri, dodot vislabāko no 1. un 3. opcijas. Galīgais kods un rezultāts ir parādīts zemāk.

Galīgais rezultāts PostGIS / pgAdmin


Vairāk ziņu

PostGIS 3.1.2

PostGIS komandai ir prieks izlaist PostGIS 3.1.2 izlaidumu!

Šis izlaidums ir kļūdu labojumu izlaidums, kas risina problēmas, kas konstatētas iepriekšējā 3.1 laidienā.

    , TopoGeometry :: Ģeometrija cast atgriež NULL tukšiem TopoGeometry objektiem (Sandro Santilli), postgistīģerisgeocoder Labākas atbildes, ja netiek nodrošināts rāvējslēdzējs (Regīna Obe), rīkojieties ar sarežģītākām salikto koordinātu sistēmām (Pols Ramsijs), DRS asis pagriež tikai tad, ja pirmajā kolonnā ir & # 8220Lat & # 8221 (Pols Ramsijs)
  • Atbalstiet jaunākās Proj versijas, kurās ir noņemts pjgūtizlaidums (Pols Ramzijs), Pielāgojiet ģeodēzisko aprēķinu pielaidi (Pols Ramzijs), Nepareiza negatīvās ģeogrāfiskās azimuta pārveidošana par pozitīvu (Pols Ramzijs), DBSCAN kopa nav izveidota, ja ierakstu kopas garums ir vienāds ar minPoints (Dan Baston), Atjauniniet boksus pēc skalas / afinācijas koordinēt izmaiņas (Paul Ramsey), novērst ar rastriem saistītas problēmas, kas saistītas ar PostgreSQL 14 tablefunc izmaiņām (Paul Ramsey, Regina Obe), mingw64 PostGIS / PostgreSQL 14 kompilēt (Regina Obe, Tom Lane), atjaunināt, lai atbalstītu Tiger 2020 (Regina Obe), mainīt projektu kešatmiņas kalpošanas laiks ilgst tik ilgi, kamēr ir izveidots savienojums (Pols Ramsijs), Pievienojiet Pg14 veidošanas atbalstu (Pols Ramsijs)

PostGIS 3.1.1

PostGIS komandai ir prieks izlaist PostGIS 3.1.1 izlaidumu!

Šis izlaidums ir kļūdu labojumu laidiens, kas risina problēmas, kas konstatētas iepriekšējā 3.1 laidienā.

    , Crash nodod kolekciju tikai ar tukšiem komponentiem ST_MakeValid, padara sintētisko VSICURL draiveri darbojošos kā dokumentētu, nestabilus ST_MakeValid rezultātus, izvairieties no vienas un tās pašas ģeometrijas uzskaitīšanas dažādās kolekcijās

PostGIS 3.1.0

PostGIS komanda ar prieku izlaiž PostGIS 3.1.0 laidienu!

Šī versija parāda jaunās GEOS 3.9 funkcijas, kā arī daudzus galvenos veiktspējas uzlabojumus telpisko savienojumu, lielu objektu piekļuves, teksta formāta izvades un daudz ko citu.

Veiktspēja ir galvenā šī laidiena iezīme, uzlabojot telpiskos savienojumus, teksta izvades, lielu objektu lasījumus, vektoru elementu izvadi un daudzus mazākus pielāgojumus.

K-vidus klasterizācijas kods ir uzlabots, lai atbalstītu svēršanu un augstāku dimensiju kopas.

Vienkāršākiem datu bāzes apkopošanas vaicājumiem ir pievienoti ģeometrijas ģeneratori, lai izveidotu sešstūra un kvadrātveida elementus.

Visbeidzot, PostGIS parāda jaunākos uzlabojumus GEOS ģeometrijas bibliotēkas 3.9 versijā. Jaunais pārklājuma dzinējs (aka & # 8220OverlayNG & # 8221) nodrošina stingrāku sarežģītu ievades ģeometriju apstrādi, izmantojot jaunu mezglu noteikšanas stratēģiju kopumu ģeometrijas apstrādei. Lietotājam savienojuma, starpības, krustošanās vai simetriskās atšķirības funkcijas galalietotājam tam vairs nevajadzētu nozīmēt & # 8220topoloģijas izņēmumus & # 8221. PostGIS arī atklāj jauno fiksētās precizitātes pārklājuma iespēju, izmantojot papildu režģa lieluma parametru ST_Intersection un citas pārklājuma funkcijas.


Šeit ir pūķi: PostGIS 2.0 papildina 3D, rastra attēlu un topoloģijas atbalstu

Ģeogrāfisko datu bāzu sistēma PostGIS tuvojas tās 2.0 izlaišanai - būtiskam atjauninājumam, kas papildina vairākas nozīmīgas jaunas iespējas. PostGIS ir PostgreSQL datu bāzes pārvaldnieka paplašinājums, kas īsteno ĢIS specifiskus datu tipus un funkcijas. Tikpat svarīgi tomēr ir fakts, ka plašs citu atvērtā koda ģeogrāfiskās informācijas sistēmu (ĢIS) projektu klāsts var izmantot PostGIS kā aizmugures datu avotu, ieskaitot GUI lietojumprogrammas un serverus. Šis 2.0 izlaidums ir svarīgs pagrieziena punkts ne tikai ātruma un stabilitātes apsvērumu dēļ, bet arī tāpēc, ka tas paplašina datu bāzi trīs jaunās jomās: rastra dati, topoloģija un 3D.

PostGIS papildina atbalstu ģeometriskiem primitīviem (punktiem, līnijām, daudzstūriem, kā arī "visu trīs" kolekcijām "un citām datu struktūrām), kā arī plaša standarta ģeotelpisko datu formātu klāsta nolasīšanu, pārveidošanu un rakstīšanu. ĢIS lietojumprogrammām bieži vien ir nepieciešami īpaši operatori, lai aprēķinātu attālumus un laukumus, savienojumus, krustojumus un citas iestatītās funkcijas, kā arī specializētus meklēšanas veidus.

PostGIS ievieš šo funkcionalitāti, ievērojot Open Geospatial Consortium standarta Simple Feature Access for SQL standartu, lai gan projekts nemaksā par atbilstības pārbaudēm, kas nepieciešamas, lai reklamētu sevi kā oficiālu ieviešanu. PostGIS ir aktīvi attīstījies kopš 2001. gada, un ir izveidojis ievērojamu bibliotēku, kurā tiek atbalstītas ĢIS lietojumprogrammas, tostarp GRASS GIS, gvSIG un MapServer. Ir pieejami pat komerciāli savienotāji, lai piesaistītu patentētus ĢIS produktus PostGIS datu bāzēs.

Tomēr visā šajā laikā PostGIS ir koncentrējies uz to, ko jūs varētu saukt par tradicionālu, uz vektoriem balstītu, 2D ģeometriju. Nevajadzētu to uztvert kā vājums lielākā daļa ĢIS lietojumu ir 2D un balstītas uz vektoriem. Uz vektoriem balstīti dati kodē ģeogrāfiskās iezīmes kā formas: punktus un daudzstūrus kartes projekcijā, līnijas, kas savieno iezīmes, un tā tālāk.

Rastrs

Tomēr ir daudz datu, piemēram, rastra attēlu, kā arī, piemēram, gaisa un satelīta fotoattēlu, kurus var ģeokodēt, lai tos varētu pareizi izlīdzināt un pārveidot, lai tie ietilptu kartē. Pēdējos gados PostGIS kopiena strādāja pie rastra atbalsta, izmantojot papildinājumu paketi, kuras sākotnējais nosaukums bija WKT Raster, kuru vēlāk pārdēvēja par PostGIS Raster.

Ar 2.0 tā funkcionalitāte tiks pilnībā integrēta galvenajā lietojumprogrammā. Rastra attēli tiek atbalstīti īpašās rastra tabulās, kuras var ielādēt no jebkura formāta, ko atbalsta Ģeotelpisko datu abstrakcijas bibliotēka (GDAL), un eksportēt uz jebkuru GDAL atbalstītu formātu. Atbalstīto formātu saraksts nepārtraukti pieaug, taču šobrīd GDAL projektā ir uzskaitīti vairāk nekā 120.

Protams, ielāde un eksportēšana nav reāls darbs, kas papildus rastriem tiek atbalstīts rastra attēliem, tāpēc PostGIS 2.0 pievieno vairākas funkcijas, lai analizētu un darbotos ar datiem pikseļos. Rasterus var "izspiest" ģeometrijā (piemēram, vienas krāsas apgabalus rastra attēlā pārvērst par daudzstūri), vidēji aprēķināt un citādi pārbaudīt. Rasterus var darbināt ar esošajām funkcijām (piemēram, aprēķinot, kur tie krustojas ar vektoru ģeometriskām figūrām). Datu bāzē būs iespējams arī rediģēt importētos rastrus, kas paver iespējas visu veidu transformācijām.

Trešā dimensija

Tāpat netrūkst 3D datu, kurus varētu izrādīties interesanti pārbaudīt, ja ir pieejami datu glabāšanas veidi un funkcijas to pārveidošanai. PostGIS 2.0 papildina plašu 3D atbalstu, sākot ar diviem ģeometrijas veidiem: daudzstūra virsmām un trīsstūrveida neregulāriem tīkliem (TIN). Daudzstūra virsmas ir tieši tādas, kādas jūs tās iedomājaties: trīsdimensiju virsmas, kuras nosaka savienoti daudzstūri. TIN pilnībā nosaka virsmas ar trijstūriem, taču trijstūru izmērs ir elastīgs un nedaudz līdzīgs daudzdimensiju sietam 3D modelēšanas programmā. TIN var izmantot ļoti maz trijstūri, lai aprakstītu plakanākus kartes apgabalus un vairāk, lai aprakstītu svarīgas pazīmes. Abos gadījumos atbalsts jaunajai ģeometrijai sastāv ne tikai no pamatdatu veidiem, bet arī atbalsta operatoriem atkārtotu uzdevumu veikšanai, piemēram, reģionu apgabalu (un apjomu) atrašanai jaunajā formātā.

Papildus jaunajiem ģeometrijas veidiem esošie telpiskie indeksi ir padarīti par 3D saprotamiem un pievienota 3D funkciju bibliotēka. Tas ļaus GIS lietotājiem aprēķināt attālumus trīs dimensijās, atrast līniju un formu 3D krustojumus un atgriezt 3D ierobežojošās kastes vai aprēķināt sarežģītas lietas, piemēram, 3D īsākos ceļus.

Visvienkāršākais 3D pielietojums ĢIS ir ainavas iezīmju modelēšana trīs dimensijās, taču to ir vairāk. Daudzi citi ģeogrāfiski kodētu datu veidi var tikt importēti 3D PostGIS datu bāzē modelēšanai un analīzei. Apsveriet, piemēram, aprēķinot redzes līnijas redzamību starp ēkām, radioviļņu izplatīšanos vai lidojuma vektoriem. Visas ir saistītas ar pazīstamām ĢIS operācijām 3D formātā, lai gan tās nav stingri saistītas ar “kartēšanu”.

Tas, kā vislabāk izvadīt 3D datus, ir jautājums, kas lielā mērā paliek front-end lietojumprogrammas domēns (par to mazliet vēlāk.), Taču PostGIS 2.0 pievieno atbalstu 3D datu tiešai izvadīšanai uz XML balstītu X3D formātu. X3D definē Web3D konsorcijs, kas cītīgi strādā pie tā, lai HTML5 formāts tiktu pieņemts. Neatkarīgi no tā, vai HTML5 kādreiz ļauj iekļaut satura X3D ainas lapas saturā, tomēr formāts, visticamāk, tiks atbalstīts & ltcanvas & gt elementos vai kā iegultos objektos.

Topoloģija

Pēdējais nozīmīgais PostGIS funkcionalitātes paplašinājums 2.0 laidienā ir atbalsts topoloģijai. GIS izteiksmē topoloģija ir atsauce uz topogrāfiskajām kartēm. Tas drīzāk nozīmē tādu datu tipu un funkciju atbalstīšanu, kas ievieš matemātiskus grafikus. Citiem vārdiem sakot, punktu, līniju un daudzstūru vietā topoloģijā tiek izmantoti mezgli, malas un sejas, un potenciāli pat virzītas un / vai svērtas malas.

Vektoru ģeometrijas pārveidošana topoloģijas datos padara to, kas bija formu kolekcija, ainas matemātiskā attēlojumā, ieskaitot mezglu un reģionu savienojumu. Cilvēka acs šos savienojumus var izveidot uzreiz, taču datu bāzei ir nepieciešams nepārprotams atbalsts, lai tos izteiktu. Kartes slāņa topoloģiskās versijas iekļaušana datu bāzē ļauj lietojumprogrammai veikt ceļa atrašanu, maršrutēšanu un plūsmas analīzi, ko nevar veikt neapstrādātā ģeometrijā.

Šīs atšķirības kanoniskais piemērs ir K & oumlnigsberg tilta problēma: cilvēka matemātiķis (teiksim, Euler, lai izvēlētos vienu nejauši.) Var apskatīt pilsētas un tās septiņu slaveno tiltu zīmējumu un izstrādāt tā diagrammu kā netieši mezglus un malas. . PostGIS lietojumprogramma nevar darīt to pašu tikai ar formas upes un sauszemes masu. Vispirms dati jāpārvērš.

PostGIS 2.0 varēs pārveidot standarta ģeometriju topoloģiskos datos, apstiprināt topoloģiju un rediģēt mezglus un malas. Topoloģiju var arī pārveidot par standarta ģeogrāfiskās iezīmēšanas valodu (GML) izvadei.

Šis solis ir topoloģijas atbalsta sākums PostGIS. Turpmākās lietojumprogrammas ietver tīkla plūsmu (piemēram, satiksmes modelēšanu), krīžu pārvaldību katastrofu plānošanai (piemēram, minimālo aptverošo koku un īsāko loģistikas ceļu), automātisko karšu krāsošanu, problēmu "aptveršanu" un vēl daudz vairāk. Tie, kas neietilpst ĢIS jomā, var domāt, piemēram, par ĢIS darbu nacionālā kartēšanas mērogā, taču apsver, cik vērtīgs topoloģijas atbalsts padarītu PostGIS tīkla plūsmas analīzei vai komunālo pakalpojumu maršrutēšanai ēkā.

Lietojumprogrammu atbalsts un papildu uzlabojumi

Tādām funkcijām kā topoloģija un 3D ir ierobežota vērtība bez atbalsta lietojumprogrammās, kas izmanto PostGIS. Šajā frontē GRASS un gvSIG ir pirmie, kas iekļauj topoloģiju, un, domājams, sekos citi. Savukārt MapServer un QGIS jau ir rastra slāņa atbalsts. Rastra datu atbalsta kategorijā var būt vairāk tādu, kas manto to rastra funkcionalitāti no agrākā PostGIS Raster spraudņa atbalsta, un dokumentācija ne vienmēr ir skaidra.

3D datiem vienīgā lietojumprogramma, kas, šķiet, šobrīd atbalsta atbalstu, ir gvSIG, kuru plānots iekļaut nākamajā laidienā. Tiek ziņots, ka tas būs tikai 3D skatīšanās atbalsts. Vairāki no atvērtā koda ĢIS emuāriem ir satraukti par 3D iespējām, ieskaitot tā potenciālu integrēt virtuālo realitāti vai paplašināto realitāti. Šķiet, ka tas ir pāris soļu attālumā, tāpat kā iespēja apvienot topoloģiju un 3D datus.

PostGIS 2.0 paredzētais rastra, 3D un topoloģijas atbalsts nav vienīgās datu bāzes sistēmas jaunās funkcijas. Emuāros un adresātu sarakstos atkārtoti tiek pieminēti TIGER ģeokodera uzlabojumi, kas importē datus no ASV Tautas skaitīšanas biroja apkopotajiem publiskā domēna karšu datiem un izputēja, kad TIGER 2010. gadā mainīja formātu. Ir arī jauna funkcija "reverse geocoder". kas paņem kartes punktu un atgriež tuvumā esošos adreses datus vai ielu krustojumus, kā arī atjaunotu GUI formas failu ielādētāju, kas pirmo reizi var ielādēt vairākus failus vienlaikus. Visbeidzot, ir eksperimentālas Windows versijas pirmo reizi & mdash iepriekšējos laidienos, Windows lietotājiem bija jāapkopo PostGIS no jauna. Projekta tiešsaistes dokumentācijā ir pilns jaunu, uzlabotu un novecojušu funkciju saraksts.

Iespējams, ka vēl būs daudz uzlabojumu, kas tiek ziņots, ka PostGIS vēl nav paziņojis par galīgo funkciju iesaldēšanu, un ir finansēti darbuzņēmēji, kas strādā dažās svarīgās jomās, ieskaitot 3D. Galīgā izlaišana oficiāli gaidāma (ziemeļu puslodē) "agrā pavasarī", kas šajā brīdī, protams, ir tikai dažas dienas vecs. Pa to laiku atbilstoši uzdrīkstēšanās var iegūt testa paketes no PostGIS vietnes. Pateicoties šīm daudzajām būtiskajām jaunajām funkcijām, var būt vērts to apskatīt agri.

Šī raksta indeksa ieraksti
Viesu rakstiVilis, Neitans

(Piesakieties, lai ievietotu komentārus)

Šeit ir pūķi: PostGIS 2.0 papildina 3D, rastra attēlu un topoloģijas atbalstu

Ievietoja 2011. gada 31. martā 3:56 UTC (otrdiena) flywellyn (abonents, Nr. 5047) [Saite]


4 atbildes 4

Es mēģinātu izveidot negatīvu buferi, ja tas ēd plānus daudzstūrus, tad tas ir labi, ja tas neēd daudzstūri, tad tas ir mans. :-)

palaidiet šo skriptu, iepriekš iestatot 2/3 no lineāro daudzstūru platuma.

izveidot tabulas nosaukumu_tabulu kā
ATLASĪT ST_Buffer (
(ST_Dump (
(ST_Union (
ST_Buffer (
(geom), - 0.0001))))). geom,
0.0001)) kā geom no source_table

OS :-).

galu galā jūsu ieteikums ir tas, kas man vislabāk derēja. I ended using something like ST_Area(ST_Buffer(geom, -10)) , the -10 being -10 meters in my case. If anything returned 0 from that expression then I could filter it out.

Thank you, I am glad that it helped you, use this approach in such cases, with respect .

Instead of area/perimeter, it is better to use the area divided by the square of the perimeter (or its inverse).

This is also called "shape index". The square of the perimeter divided by the area has a minimum value of 4*Pi() (in the case of a disk, which is the most compact 2D geometry), so it can be normalized by 4*Pi() for an easy interpretation (normalized values close to 1 then mean that you have very compact objects and squares have a values of approximately 1.27).

EDIT: A threshold on the area would be usefull to remove the very small artefacts, which could be compact. Then the shape index would show better contrast.
EDIT: in addition to this answer, the use of ST_Snap could help you solve the problem before it occurs.

Paldies! But I'm unsure how ST_Snap could help in this case. If I got it right, you're suggesting something like (o.overlap_perimeter^2 / o.overlap_area) / (4 * Pi()) as overlap_ratio ? This is having worse results for me than just area / perimeter.

Now using o.overlap_perimeter / (4 * sqrt(o.overlap_area)) as overlap_ratio according to this paper, but still worse results (although that's hard to quantify what I mean by worse) isprs-ann-photogramm-remote-sens-spatial-inf-sci.net/I-7/135/…, page 183.

Thank you for this, I had never heard of the "shape index". I had always thought that using a minimum bounding rectangle was the best way to answer this sort of question. I found this, repository.asu.edu/attachments/111230/content/…, which is interesting.

– John Powell
Mar 20 at 16:50

@JohnPowell intersting paper, thanks. I see that what I know as a shape index is called circularity index in the paper. My problem with minimum bounding rectangles is that it doesn't work with very concave objects (e.g. U-shaped)

@bplmp ST_Snap would help you snap the vertices of "nearly" adjacent polygons so that they do no overlap anymore. There is no scale on your figures, but your artefact look like lines, so I guess that you can use a tolerance value theat is enough to avoid artefacts but does not affect the large polygons.

One option would be to use the ratio of the area of the polygon to the longest line that can be drawn using its extremities. Identifying long narrow polygons.

select * from polygons where ST_Length(ST_LongestLine(geom, geom)) < ST_Area(geom) * 4

This works pretty well for sliver polygons. You can adjust what the ratio (what you multiply the area with) to suit your needs and projection.

It sounds like this might match your use case: Eliminate selected polygons


Combines selected polygons of the input layer with certain adjacent polygons by erasing their common boundary. The adjacent polygon can be either the one with the largest or smallest area or the one sharing the largest common boundary with the polygon to be eliminated.

Eliminate is normally used to get rid of sliver polygons, i.e. tiny polygons that are a result of polygon intersection processes where boundaries of the inputs are similar but not identical.


It sounds like you'd want to try the "Largest Common Boundary" option.

I realize now you were asking for postgis solutions not qgis solutions. My apologies, I don't think postgis has an equivalent function but I'll leave this up for posterity.


Chapter 7 The cartographer as mediator: Cartographic representation from shared geographic information *

The advent of the Spatial Data Infrastructure (SDI) and distributed, agent-based computing present new challenges for the development of cartographic systems. The ability to effectively share meaning between system elements (semantic interoperability) remains an area of active research. The authors suggest a concept of geographic mediation (geomediation) that may be useful in framing current and emerging processes of integrating and representing geographic information in the context of distributed information. It is proposed that this concept can be used to guide practice and theory related to the design and evaluation of cartographic systems that can be seen as central to concepts like Taylor's cybercartography. The chapter presents a high-level architecture, the “open cartographic framework”, based on a mediator approach. Implications for using such an approach are discussed in this chapter. The chapter concludes by suggesting that an effective geomediation process necessitates consideration of both formal and negotiated processes for establishing its meaning.

This chapter is based on a PhD comprehensive paper presented as part of the lead author's PhD program at Carleton University, Ottawa, Ontario, Canada.


Skatīties video: Telpiskās attiecības, izmantojot PostGIS. PostGIS Baby Steps (Oktobris 2021).