Does anyone know of a library in Java that can parse ESRI Shapefiles?
Asked Answered
C

5

61

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?

Conduction answered 11/1, 2010 at 20:57 Comment(1)
github.com/delight-im/Java-Shapefile-ParserComras
L
79

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) {}
Lie answered 11/1, 2010 at 21:11 Comment(3)
if you use Maven to compile the program it handles all the jars for you.Shimberg
Geotools has great tutorial on how to start development. It's a Swing application for visualizing a map docs.geotools.org/latest/userguide/tutorial/quickstart/…Climb
This answers example is excellent, saved me having to deep dive into the API docsHeliostat
F
9

Openmap has a Java API that provides read and write access to ESRI files.

Flied answered 11/1, 2010 at 21:5 Comment(3)
Note that although BBN's OpenMap is open source, it uses a weird BBN-specific license. It's pretty permissive, but the fact that it's not a standard license may cause issues when trying to combine it with other software (or when attempting to get it approved by your legal beagles).Rodriques
Can you provide an example of how to use said API to read an ESRI file? OpenMap's API is opaque and utterly baffling to me.Flimflam
Note that Openmap has been relocated.Quitrent
T
6

There is GeoTools, or more exactly this class ShapefileDataStore.

Telecast answered 11/1, 2010 at 21:2 Comment(0)
N
3

You could try to use Java ESRI Shape File Reader 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.

Nineteenth answered 1/6, 2013 at 15:15 Comment(1)
Do you know any other small easy to use library for this case- reading .shx and .dbf ?Monumental
L
0

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.

Langan answered 27/6, 2014 at 10:22 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.