Does anyone know of a library in Java that can parse ESRI Shapefiles?
JavaShapefileGeotoolsJava Problem Overview
I'm interested in writing a visualization program for the road data in the 2009 Tiger/Line Shapefiles. I'd like to draw the line data to display all the roads for my county.
> The ESRI Shapefile or simply a > shapefile is a popular geospatial > vector data format for geographic > information systems software. It is > developed and regulated by ESRI as a > (mostly) open specification for data > interoperability among ESRI and other > software products.1 A "shapefile" > commonly refers to a collection of > files with ".shp", ".shx", ".dbf", and > other extensions on a common prefix > name (e.g., "lakes.*"). The actual > shapefile relates specifically to > files with the ".shp" extension, > however this file alone is incomplete > for distribution, as the other > supporting files are required.
Does anyone know of existing libraries for parsing and reading in the line data for Shapefiles?
Java Solutions
Solution 1 - Java
GeoTools will do it. There are a ton of jars and you don't need most of them. However, reading the shapefile is just a few lines.
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) {}
Solution 2 - Java
Solution 3 - Java
There is GeoTools, or more exactly this class ShapefileDataStore.
Solution 4 - Java
You could try to use [Java ESRI Shape File Reader][1] library. It's small, easy to install and has very simple API. The only drawback is that it does not read other mandatory and optional files (.shx, .dbf, etc.) that are usually shipped with a shape file.
[1]: http://sourceforge.net/projects/javashapefilere/ "Java ESRI Shape File Reader"
Solution 5 - Java
You can directly use GUI GIS tools so that their is no need of changing the source code of GeoTools.
I use QGIS which does all operations(even more) than GeoTools.
Quantum GIS - An open source Geographic Information System for editing, merging and simplifying shapefile maps. See also: creating maps with multiple layers using Quantum GIS.