2010-01-11 22 views
43

Interesuje mnie pisanie programu do wizualizacji danych drogowych w 2009 Tiger/Line Shapefiles. Chciałbym narysować dane linii, aby wyświetlić wszystkie drogi w moim hrabstwie.Czy ktoś wie o bibliotece w Javie, która może parsować pliki kształtu ESRI?

ESRI Shapefile lub po prostu shapefile to popularny format danych geoprzestrzennych wektorowych do informacji geograficznej Software Systems. Jest to opracowane i regulowane przez ESRI jako (w większości) otwarta specyfikacja dla kompatybilności danych pomiędzy ESRI i innymi produktami oprogramowania. 1 "Plik kształtu" zwykle odnosi się do zbioru plików z ".shp", ".shx", ".dbf" i innymi rozszerzeniami o wspólnej nazwie prefiksowej (np. "Jeziorami. *"). Rzeczywisty plik shape dotyczy w szczególności plików z rozszerzeniem ".shp", , jednak ten plik sam w sobie jest niekompletny do dystrybucji, ponieważ inne pliki pomocnicze są wymagane.

Czy ktoś wie o istniejącej biblioteki do parsowania i czytania w danych linii dla Shapefiles?

+0

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

Odpowiedz

8

Openmap ma Java API, który umożliwia odczyt i zapis dostępu do plików ESRI.

+1

Należy pamiętać, że chociaż OpenMap BBN jest open source, używa dziwnej licencji specyficznej dla BBN. Jest to dość permisywne, ale fakt, że nie jest to standardowa licencja, może powodować problemy przy próbie połączenia jej z innym oprogramowaniem (lub próbą uzyskania zatwierdzenia przez beagle prawne). –

+0

Czy możesz podać przykład użycia tego interfejsu API do odczytu pliku ESRI? API OpenMap jest dla mnie nieprzejrzysty i kompletnie kłopotliwy. –

57

GeoTools zrobi to. Jest mnóstwo słoików i nie potrzebujesz ich większości. Jednak czytanie shapefile to tylko kilka linijek.

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

jeśli użyjesz Mavena do kompilacji programu, to obsłuży on dla ciebie wszystkie słoiki. –

+1

Geotools ma świetny samouczek, jak rozpocząć rozwój. Jest to aplikacja Swing do wizualizacji mapy http://docs.geotools.org/latest/userguide/tutorial/quickstart/netbeans.html –

+0

Ten przykład jest doskonały, uratował mnie przed głębokim zanurzeniem w dokumentach API –

3

Możesz spróbować użyć biblioteki Java ESRI Shape File Reader. Jest mały, łatwy w instalacji i ma bardzo prosty interfejs API. Jedyną wadą jest to, że nie czyta innych plików obowiązkowych i opcjonalnych (.shx, .dbf itp.), Które są zwykle dostarczane z plikiem kształtu.

+0

Czy wiesz każda inna mała, łatwa w użyciu biblioteka do czytania tego przypadku.shx i .dbf? –

0

Można bezpośrednio używać narzędzi GIS GUI, aby nie było potrzeby zmiany kodu źródłowego GeoTools.

Używam QGIS, który wykonuje wszystkie operacje (nawet więcej) niż GeoTools.

Quantum GIS - System informacji geograficznej typu open source do edycji, łączenia i upraszczania map shapefile. Zobacz także: tworzenie map z wieloma warstwami za pomocą Quantum GIS.