ESRI Shapefile Reader in .NET

Updated on Monday, September 19, 2022

ESRI Shapefile Reader in C#/.NET

I've just released a .NET library for parsing ESRI shapefiles - see ESRI Shapefile Reader on GitHub. The library and source code are available under the Microsoft Public License.

A Shapefile is actually at least three files: a main file containing shape data (*.shp), an index file for locating shape records in the main file (*.shx) and a database of metadata for each shape (*.dbf) in dBASE format.

I ended up writing the library in order to convert Eric Muller's time zone shapefile into a format I could use with Catfood Earth. I found other libraries that could read shape data but not metadata, or provided a very thin .NET wrapper on top of unmanaged code and so I decided that a fully managed library could be useful.

The library - Catfood.Shapefile.dll - provides read-only, forward-only access to shapes and shape metadata. Currently all 2D shapes are supported: Null, Point, MultiPoint, PolyLine and Polygon. I might add additional types in the future, or if you have a pressing need it would be easy to extend the library by looking at an existing shape subclass and the shapefile specification (PDF).

See the GitHub project for sample code and documentation.

Updates

Catfood.Shapefile 1.60

I just released Catfood.Shapefile 1.60. This contains a fix from Libor Weigl that factors out the enumerator so that you can still access the shapefile after enumeration.

Catfood.Shapefile is a .NET library for parsing ESRI Shapefiles.

(previously)

Shapefile Update

A few people have asked for 3D shape support in my ESRI Shapefile library. I've never got around to it, but CodePlex user ekleiman has forked a version in his ESRI Shapefile to Image Convertor that supports PointZ, PolygonZ and PolyLineZ shapes. If that's what you need please check it out.

Catfood.Shapefile 1.50

I've just released a small update to my C# Shapefile library on Codeplex. Catfood.Shapefile 1.50 fixes a couple of bugs related to metadata and adds the ability to access metadata records directly via IDataRecord. 

Catfood.Shapefile 1.40

I’ve just released a small update to Catfood.Shapefile. Stephan Stapel, who implemented PolyLineM support, has contributed a patch that improves the class hierarchy. CodePlex user originSH suggested supporting the ACE driver for 64-bit systems. I’ve added a constructor overload that allows you to use predefined Jet and ACE connection strings or provide your own templates if necessary. Thanks to Stephan and originSH.

Catfood.Shapefile is a .NET library for enumerating ESRI shapefiles. I originally wrote the library to help me build some complex layers in Catfood Earth. Since then it’s picked up thousands of users and some really valuable suggestions and patches from the CodePlex community. I’m very glad a took a couple of hours to open source the library back in 2009.

PolyLineM support in Catfood.Shapefile

I’ve just updated Catfood.Shapefile, my ESRI Shapefile parser for .NET, with PolyLineM support thanks to a contribution from Stephan Stapel. The solution for the new version has also been updated to Visual Studio 2010.

Download Catfood.Shapefile.dll 1.30 from CodePlex.

ESRI Shapefile Library Update

I've just released a small update for my ESRI Shapefile Reader project on GitHub. The only change is a patch from SolutionMania that fixes a problem when the shapefile name is also a reserved name in the metadata database. The patch escapes the name preventing an exception from being thrown.

Catfood.Shapefile.dll is a .NET 2.0 forward only parser for reading an ESRI Shapefile. Download 1.20 from GitHub.

Catfood.Shapefile.dll 1.10

I've just released v1.10 of my ESRI Shapefile Reader (Catfood.Shapefile.dll). This is a .NET 2.0 forward only parser for reading shapefile content.

Sharon Tickell was kind enough to report two bugs with suggested updates. These have both been fixed in 1.10.

While working on these fixes I also discovered that there are no 64-bit Jet drivers (since releasing the first version I've upgraded to a 64-bit box for development). This is an easy fix, just target any application using Catfood.Shapefile.dll at x86. I've updated the demo application accordingly.

Download Catfood.Shapefile.dll from GitHub.

(Related: Export Google Fit Daily Steps, Weight and Distance to a Google Sheet; Migrating from Blogger to BlogEngine.NET; Monitor page index status with Google Sheets, Apps Script and the Google Search Console API)

(You might also like: Recount; How to backup Google Photos to Google Drive automatically after July 2019 with Apps Script; The end of Facebook)

(All Code Posts)

Comments

Cat
Rob Ellison

Thanks Cat, will check it out and see if it works with the Shapefile dBase format.

Patrick Cozzi

Rob, I'm interested to know if the 64-bit drivers work with the Shapefile dBase format. I am currently running as a 32-bit process to workaround the issue.

Also, do you know if I can read different shapefiles using different threads with your library?

Regards,
Patrick

Rob Ellison

Patrick, I haven't tried the 64-bit driver yet. This was the only reason for forcing the demo app to run as 32-bit so it should be easy to test by updating the project to "Any CPU" and trying it with a shapefile.

The library is not thread safe so you should enumerate on a single thread. This only applies to parsing the file, once you've got the shape objects you could use worker threads to perform whatever processing is needed. Does this help?

Richie Rich

Hi mate, just a short "THANK YOU" for all your work on the catfood shapefile suite, I've just got it up and running on a vb.net project I'm working on. Thanks :)

Ian Hannah

Hi,

How can you determine if the points read are in lat/long or easting/northing format?

Obviously I could probably try and work it out but is there an easier way to find out?

Thanks

Ian

Robert Ellison

Depends on the file. If you have a .prj that should have coordinate information. I usually understand this from the source of the shapefile, or plot it and see if it makes sense.

Jon Bastow

Hi,

Just trying to get this handy little library working in a .NET project in VS2022. Seeing some problems with the following exception:

Unhandled exception. System.InvalidOperationException: The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.

The only way I can get this working is targeting an x86 environment.

Are you aware of any options to get this running on 64-bit?

Cheers,

jon

Robert Ellison

Hi Jon, I'm not aware of any solution to the missing 64-bit Jet drivers. When I use this library I target x86. If you find anything useful please post back.

Add Comment

All comments are moderated. Your email address is used to display a Gravatar and optionally for notification of new comments and to sign up for the newsletter.

I Thought He Came With You is Robert Ellison's blog.

Newsletter

Related

Google Fit Daily Step Export