Več

Ring Self-Intersections v PostGIS


To je nadaljevanje prejšnjega vprašanja. Videli boste, da sem nov uporabnik PostGIS -a.

Preučil sem veljavnost topologije v svojih podatkih in v zbirki podatkov o zemljiščih (poligonih) odkril okoli 1700 topoloških vprašanj. Vse to so "Ring Self_intersection".

Z uporabo nekaterih koristnih informacij v tej predstavitvi Paula Ramsayja (stran 20) sem poskušal ustrezno shraniti svoje podatke:

UPDATE schema.data SET the_geom = medpomnilnik (the_geom, 0.0) WHERE je neveljaven (the_geom) = false in je neveljaven (buffer (the_geom, 0.0)) = true;

Dobim pa odgovor:

OBVESTILO: Obrnite samopresek na ali blizu točke (urejeno) NAPAKA: nova vrstica za razmerje "sgm_buffer" krši omejitev preverjanja "forcece_geotype_the_geom"

********** Napaka **********

NAPAKA: nova vrstica za razmerje "sgm_buffer" krši omejitev preverjanja "execute_geotype_the_geom" Stanje SQL: 23514

Prav tako sem poskusil:

UPDATE csgn.sgm_buffer SET the_geom = medpomnilnik (the_geom, 0.0)

in dobite:

NAPAKA: nova vrstica za relacijo "sgm_buffer" krši omejitev preverjanja "execute_geotype_the_geom"

********** Napaka **********

NAPAKA: nova vrstica za relacijo "sgm_buffer" krši omejitev preverjanja "execute_geotype_the_geom" Stanje SQL: 23514

Torej domnevam, da ta vmesna tehnika ne bo delovala pri mojih vprašanjih? Ali pa delam kaj narobe?

G. Ramsay nato v istem dokumentu predlaga dodatno tehniko za obravnavo poligonov "številka 8". Ne razumem popolnoma, kako to v celoti zapisati v kodi (ali kaj počne in ali mi bo to pomagalo):

SELECT ST_BuildArea (ST_Union ('LINESTRING EMPTY', ST_ExteriorRing ('POLYGON ((...))' '

Torej ... lahko kdo pomaga? To dokazuje pravo nočno moro z mojimi kratkimi časovnimi okviri in omejenimi veščinami v PostGIS -u.


Mislim, da se dogaja, da vaši samopresekajoči se poligoni med pufriranjem postanejo MULTIPOLIGONI.

imate dve možnosti:

1 odstranite omejitev "execute_geotype_the_geom", to lahko storite v pgAdmin
2 namesto posodobitve starega rezultat vnesite v novo tabelo. to je pogosto dober način, da ne naredite ničesar v svoji prvotni tabeli. poizvedba lahko izgleda tako:

CREATE TABLE new_buffered_table as SELECT ST_Buffer (the_geom, 0.0) as the_geom, gid FROM original_table;

seveda boste želeli v svojo novo tabelo vnesti več polj.

najprej poskusite z vmesnim trikom. V drugem pristopu si Paul lahko pove, kaj vpliva na prazen niz vrstic. Ne spomnim se, kako se zgodi ta čarovnija.


Enake težave sem imel pred nekaj meseci. V bazi podatkov sem imel poligone z veliko samopretišč. Uporabil sem metodo Niklas Aven, vendar ni delovala. Uporabil sem tudi druge metode.

Moja metoda je odstraniti samosečišče iz mojih poligonov. Tu je poizvedba SQL, ki sem jo uporabil:

- Ustvarite nove poligone SELECT ST_GeomFromText (poligon) kot geom iz (SELECT st_astext (ST_MakePolygon (linearno)) kot poligona iz (SELECT st_astext ((ST_dump (st_boundary (ST_MakeValid (ST_Transform (ST_SETSR26)), geometrija) )). geom) kot linearno iz ime_tabel) kot poizvedba2) kot poizvedba1, kjer je območje ST_ (poligon)> 1

Izračunal sem površino poligona in samopreseka in obdržal bom le poligone, ki imajo površino> 1.1je toleranca, ker je območje samopreseka zelo majhno. Upoštevajte tudi, da je pretvorba SRID v števce pomembna, če imate podatke v stopinjah.