Come evitare problemi di geometria durante l'importazione dei dati MapInfo in PostGIS?

StackOverflow https://stackoverflow.com/questions/4811207

  •  25-10-2019
  •  | 
  •  

Domanda

Sono di fronte a un problema che fare con forme di raccolta censimento australiano fornito in formato MapInfo dall'Australian Bureau of Statistics . Sto caricando questi in un database PostGIS utilizzando il ogr2ogr strumento , che funziona per la maggior parte delle forme , ma non tutti.

Un semplice esempio del problema che sto affrontando è una query come questa (richiede il caricamento del set di dati NSW):

SELECT st_union(wkb_geometry) FROM cd06answ WHERE cd_code_2006 LIKE '1291%'

Il risultato di questa query non è la forma previsto ma NULL.

Non ci sono valori nulli nella tabella, ma ci sono le geometrie non valide. Ad esempio

SELECT cd_code_2006 FROM cd06answ 
WHERE cd_code_2006 LIKE '1291%' AND NOT st_isvalid(wkb_geometry)

recupera i valori '1291301' e '1.291.321'. Se Escludo geometrie non valide lo ST_Union riesce.

Quantum GIS al database consente il rendering entrambe le forme in questione. Essi dovrebbero essere parte dell'unione geometrica, quindi ho bisogno di risolvere il problema in qualche modo.

ci sono modi migliori per caricare i dati MapInfo in PostGIS? O alcuni mezzi di fissa i dati all'interno di PostGIS? Dal momento che i dati del database rende ok dovrebbe essere possibile per salvarlo, non dovrebbe esso?

EDIT: sulla base del feedback di Christophe ho sperimentato un po 'di più con ST_Buffer e st_snaptogrid. Il risultato di questa query:

SELECT 
    cd_code_2006, 
    st_isvalid(st_buffer(wkb_geometry,0)), 
    st_isvalid(st_snaptogrid(wkb_geometry, 0.00000001)),
    st_isvalid(st_snaptogrid(wkb_geometry, 0.0000001)) 
FROM
    cd06answ 
WHERE 
    cd_code_2006 LIKE '1291%' 
AND
    NOT st_isvalid(wkb_geometry)

è che per entrambe le geometrie colpite il primo e l'ultimo dei tre st_isvalids è vero, quello centrale non è.

Purtroppo né avvicinarsi fissa il sindacato, solo

SELECT st_union(st_buffer(wkb_geometry,0.4)) FROM cd06answ 
WHERE cd_code_2006 LIKE '1291%'

Risultati di una geometria, ma

SELECT st_union(st_buffer(wkb_geometry,0.3)) FROM cd06answ 
WHERE cd_code_2006 LIKE '1291%'

non (avevo provato il piccolo buffer di trick in precedenza, ma non spingerlo fino a questo livello).

Questo sembra un po 'troppo per una correzione.

È stato utile?

Soluzione

Provare a eseguire st_buffer (con raggio 0 e poi 0,000000001 ecc) o st_snaptogrid nelle geometrie non valide a 'riparazione' loro (link ai documenti qui e qui ).

Ho visto questi errori pop-up durante l'importazione da Mapinfo o da altre fonti con ogr2ogr2 (essenzialmente causata da una maggiore precisione e / o problemi di arrotondamento). Credo che gli sviluppatori PostGIS stavano progettando di includere una funzione specifica riduttore di precisione, ma se non ricordo male, non ce n'è uno in 1.4.

Se questo non risolve il problema si prega di inviare la versione corrente PostGIS e una versione wkt del poligono e la proiezione. Ci sono altre cause possibili per invalidness di poligoni.

Altri suggerimenti

Ciao

Hai provato ST_IsValidReason (geometria) per ottenere un indizio su ciò che è non va?

/ Nicklas

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top