2010-06-10 3 views
8

Sto lavorando con i file shape in GeoDjango. In questo momento sto provando a scrivere un test per il codice che carica in un file di forma e lo salva in un database. Il file di forma ha attualmente un conteggio delle caratteristiche di 64.118. Mi piacerebbe ridurlo a una manciata così il test può caricarlo rapidamente e confermare tutto è giusto.Dividere o salvare un sottoinsieme di un file Shape SHP ESRI in un nuovo file?

Poiché i file di forma non sono in un formato di testo, c'è un'applicazione o una libreria libera che posso utilizzare per estrarre una manciata di funzioni e salvarle in un nuovo file?

Vorrei menzionare che non ho una licenza né accesso a nessuna delle linee di prodotti ESRI.

+0

Forse questo tipo di domande sarebbe adatto anche su http://gis.stackexchange.com/? –

+0

Questi processi possono funzionare con file shp in un database di file? i miei file di aspetto e pendenza hanno più di 16 milioni di record. migliore, – GeorgeC

risposta

12

Sono disponibili diverse opzioni per esportare un sottoinsieme di record da uno shapefile.

  • Qualsiasi GIS desktop Open Source sarà in grado di eseguire questa operazione. Alcuni dei più popolati sono Quantum GIS, gvSIG o openJUMP. I passaggi esatti variano in ognuno di essi, ma in pratica devi caricare il file di forma, iniziare a modificare, selezionare i record che desideri ed esportarli in un nuovo shapefile.

  • Lo strumento ogr2ogr, parte del pacchetto GDAL consente di trasformare tra diversi formati vettoriali geografici (o all'interno dello stesso formato) ed è possibile specificare un'espressione tipo SQL per filtrare il set di dati originale.

    ogr2ogr -f "file di forma ESRI" -dove "id < 10" huge_shapefile.shp new_shapefile.shp

  • Se si utilizza PostGIS e non si desidera installare una qualsiasi delle applicazioni precedenti, è possibile utilizzare lo strumento pgsql2shp per esportare un sottoinsieme della tabella PostGIS in uno shapefile.

    pgsql2shp -f "/ path/to/shapefile" server -h -u utente P password postgisdb "SELECT * FROM Tabella WHERE id < 10"

Edit: In qualsiasi le tre opzioni è possibile eseguire un filtro spaziale (cioè le funzionalità che rientrano in un rettangolo di selezione) piuttosto che una selezione basata su attributi.