2010-01-11 16 views
43

Mi interessa scrivere un programma di visualizzazione per i dati stradali nello 2009 Tiger/Line Shapefiles. Mi piacerebbe disegnare i dati della linea per visualizzare tutte le strade della mia contea.Qualcuno sa di una libreria in Java che può analizzare gli Shapefile ESRI?

Il file di forma ESRI shapefile o semplicemente un è un formato di dati geospaziali popolare vettore geografica software sistemi informazioni. È sviluppato e regolato da ESRI come una specifica aperta (principalmente) per l'interoperabilità dei dati tra ESRI e altri prodotti software . 1 Uno "shapefile" si riferisce comunemente a una raccolta di file con ".shp", ".shx", ".dbf" e altre estensioni su un prefisso comune nome (ad esempio "laghi" *). Lo shapefile effettivo si riferisce specificamente ai file con estensione ".shp", tuttavia questo file da solo è incompleto per la distribuzione, in quanto sono richiesti gli altri file di supporto .

Qualcuno conosce le librerie esistenti per l'analisi e la lettura dei dati di riga per Shapefiles?

+0

https://github.com/delight-im/Java-Shapefile-Parser – caw

risposta

8

Openmap ha un Java API che fornisce accesso in lettura e scrittura ai file ESRI.

+1

Si noti che, sebbene OpenBap di BBN sia open source, utilizza una strana licenza specifica per BBN. È piuttosto permissivo, ma il fatto che non sia una licenza standard può causare problemi quando si cerca di combinarlo con altri software (o quando si tenta di ottenerlo approvato dai tuoi beagles legali). –

+0

Potete fornire un esempio di come utilizzare detta API per leggere un file ESRI? L'API di OpenMap è opaca e assolutamente sconcertante per me. –

57

GeoTools lo farà. Ci sono un sacco di barattoli e non hai bisogno della maggior parte di loro. Tuttavia, la lettura dello shapefile è solo di poche righe.

File file = new File("mayshapefile.shp"); 

try { 
    Map<String, String> connect = new HashMap(); 
    connect.put("url", file.toURI().toString()); 

    DataStore dataStore = DataStoreFinder.getDataStore(connect); 
    String[] typeNames = dataStore.getTypeNames(); 
    String typeName = typeNames[0]; 

    System.out.println("Reading content " + typeName); 

    FeatureSource featureSource = dataStore.getFeatureSource(typeName); 
    FeatureCollection collection = featureSource.getFeatures(); 
    FeatureIterator iterator = collection.features(); 


    try { 
    while (iterator.hasNext()) { 
     Feature feature = iterator.next(); 
     GeometryAttribute sourceGeometry = feature.getDefaultGeometryProperty(); 
    } 
    } finally { 
    iterator.close(); 
    } 

} catch (Throwable e) {} 
+3

se usi Maven per compilare il programma, gestisce tutti i vasi per te. –

+1

Geotools ha un ottimo tutorial su come avviare lo sviluppo. È un'applicazione Swing per la visualizzazione di una mappa http://docs.geotools.org/latest/userguide/tutorial/quickstart/netbeans.html –

+0

Questo esempio di risposta è eccellente, mi ha salvato il bisogno di approfondire la documentazione dell'API –

3

Si potrebbe provare a utilizzare la libreria Java ESRI Shape File Reader. È piccolo, facile da installare e ha un'API molto semplice. L'unico inconveniente è che non legge altri file obbligatori e facoltativi (.shx, .dbf, ecc.) Che vengono solitamente forniti con un file di forma.

+0

Lo sai qualsiasi altra piccola libreria facile da usare per questa lettura del caso.shx e .dbf? –

0

È possibile utilizzare direttamente gli strumenti GIS della GUI in modo che non siano necessari per modificare il codice sorgente di GeoTools.

Io uso QGIS che esegue tutte le operazioni (anche più) di GeoTools.

Quantum GIS - Un sistema di informazioni geografiche open source per l'editing, la fusione e la semplificazione delle mappe di shapefile. Vedi anche: creazione di mappe con più livelli usando Quantum GIS.

Problemi correlati