|
|
<html> |
|
|
<head> |
|
|
<title>Shapefile C Library</title> |
|
|
<link href="maptools.css" rel="stylesheet" type="text/css"> |
|
|
</head> |
|
|
|
|
|
<body> |
|
|
<h1>Shapefile C Library</h1> |
|
|
|
|
|
<h2>Purpose</h2> |
|
|
|
|
|
The Shapefile C Library provides the ability to write simple C programs |
|
|
for reading, writing and updating (to a limited extent) ESRI Shapefiles, |
|
|
and the associated attribute file (.dbf).<p> |
|
|
|
|
|
<h2>Supporting Information</h2> |
|
|
|
|
|
<ul> |
|
|
<li> <a href="shp_api.html">Shapefile API Docs</a> |
|
|
<li> <a href="dbf_api.html">DBF/xBase API Docs</a> |
|
|
<li> <a href="shapelib-tools.html">Shapefile Tools Docs</a> |
|
|
<li> <a href="release.html">Release Notes</a> |
|
|
<li> <a href="manifest.html">Shapelib File Manifest</a> |
|
|
<li> <a href="license.html">Shapelib Licensing Terms</a> |
|
|
</ul> |
|
|
|
|
|
<h2>What is a Shapefile?</h2> |
|
|
|
|
|
If you don't know, you probably don't need this library. The Shapefile |
|
|
format is a working and interchange format promulagated by |
|
|
<a href="http://www.esri.com/">ESRI</a> for simple vector data with attributes. |
|
|
<p> |
|
|
|
|
|
An excellent <a href="dl/shapefile.pdf">white paper</a> on the shapefile format |
|
|
is available from ESRI, |
|
|
but it is .pdf format, so you will need Adobe Acrobat to browse it.<p> |
|
|
|
|
|
The file format actually consists of three files.<p> |
|
|
|
|
|
<pre> |
|
|
XXX.shp - holds the actual vertices. |
|
|
XXX.shx - hold index data pointing to the structures in the .shp file. |
|
|
XXX.dbf - holds the attributes in xBase (dBase) format. |
|
|
</pre> |
|
|
|
|
|
<h2>Download</h2> |
|
|
|
|
|
Source code, and some other odds and ends can be downloaded from |
|
|
<a href="http://download.osgeo.org/shapelib">http://download.osgeo.org/shapelib</a>.<p> |
|
|
|
|
|
Shapelib is available for anonymous CVS access: |
|
|
|
|
|
<pre> |
|
|
cvs -d :pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot login |
|
|
Password: (hit enter) |
|
|
cvs -d :pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot co shapelib |
|
|
</pre> |
|
|
|
|
|
<h2>Bugs, Maintainance and Support</h2> |
|
|
|
|
|
This library is maintained by <a href="http://pobox.com/~warmerdam">Frank |
|
|
Warmerdam</a>. Please send me bug reports, patches and suggestions for the |
|
|
library via the <a href="http://bugzilla.maptools.org/enter_bug.cgi?product=Shapelib">maptools.org Bugzilla</a>. Shapelib bugs can also be |
|
|
<a href="http://bugzilla.maptools.org/query.cgi?product=Shapelib">queried</a>. |
|
|
<p> |
|
|
|
|
|
Shapelib is hosted at |
|
|
<a href="http://shapelib.maptools.org">shapelib.maptools.org</a>. A mailing |
|
|
list for discussion of how to use shapelib, and announcing new releases |
|
|
<a href="http://lists.maptools.org/mailman/listinfo/shapelib/">is |
|
|
available</a>. To only find out about new releases of Shapelib select the |
|
|
"<i>Subscribe to new releases</i>" option from the link at |
|
|
<a href="http://freshmeat.net/projects/shapelib/">Freshmeat</a>.<p> |
|
|
|
|
|
<h2>Credits</h2> |
|
|
|
|
|
I didn't start this section anywhere near soon enough, so alot of earlier |
|
|
contributors to Shapelib are lost in pre-history. |
|
|
|
|
|
<ul> |
|
|
<li> Bill Miller (NY-DOT) for shputils.c |
|
|
<li> Carl Anderson for the contents of the contrib directory, and |
|
|
the "tuple" additions to dbfopen.c. |
|
|
<li> Andrea Giacomelli for patches for dbfopen.c. |
|
|
<li> Doug Matthews for portability improvements. |
|
|
<li> Jan-Oliver Wagner for convincing me to make it available under LGPL, |
|
|
shared library support, and various other patches. |
|
|
<li> Dennis Christopher (of Avenza) for testing and bug fixes. |
|
|
<li> Miko Syrj<EFBFBD> (of 3D-system Oy) for a record size bug fix. |
|
|
<li> Steven Lime and Curtis Hill for help with NULL shapes. |
|
|
<li> Jim Matthews for support of NULL attributes in dbf files. |
|
|
<li> <a href="http://www.pcigeomatics.com/">PCI Geomatics</a> who let me |
|
|
release a modified version of their shapefile code in the beginning and |
|
|
who hosted shapelib for years. |
|
|
</ul> |
|
|
|
|
|
<h2>In Memorium</h2> |
|
|
|
|
|
I would like to dedicate Shapelib to the memory of Sol Katz. While I never |
|
|
met him in person, his generous contributions to the GIS community took |
|
|
many forms, including free distribution of a variety of GIS translators |
|
|
with source. The fact that he used this Shapelib in some of his utilities, |
|
|
and thanked me was a great encouragement to me. I hope I can do his memory |
|
|
honour by trying to contribute in a similar fashion.<p> |
|
|
|
|
|
<h2>Portability</h2> |
|
|
|
|
|
The Shapefile C Library should port easily to 32bit systems with ANSI C |
|
|
compilers. It should work on 64 bit architectures (such as the DEC AXP).<p> |
|
|
|
|
|
Care should also be taken to pass the binary access flag into SHPOpen() |
|
|
and DBFOpen() when operating on systems with special text file translation |
|
|
such as MSDOS.<p> |
|
|
|
|
|
The shputils.c module is contributed, and may not take the same approach |
|
|
to portability as the rest of the package.<p> |
|
|
|
|
|
On Linux, and most unix systems it should be possible to build and |
|
|
install shapefile support as a shared library using the "lib" and "lib_install" |
|
|
targets of the Makefile. Note that this Makefile doesn't use autoconf |
|
|
mechanisms and will generally require some hand tailoring for your environment. |
|
|
|
|
|
<h2>Limitations</h2> |
|
|
|
|
|
<ul> |
|
|
|
|
|
<li> You can't modify the vertices of existing structures (though you |
|
|
can update the attributes of existing structures, and create new |
|
|
structures).<p> |
|
|
|
|
|
<li> Not written in such a way as to be particularly fast. This is |
|
|
particularly true of the 1.2 API. For applications more concerned with |
|
|
speed it may be worth using the V1.1 API.<p> |
|
|
|
|
|
<li> Doesn't set the last access time properly in the .dbf files.<p> |
|
|
|
|
|
<li> There is no way to synchronize information to the file except to close it. |
|
|
<p> |
|
|
|
|
|
<li> Poor error checking and reporting.<p> |
|
|
|
|
|
<li> Not professionally supported (well it can be, if you want to pay).<p> |
|
|
|
|
|
<li> Some aspects of xBase files not supported, though I believe they are |
|
|
not used by ESRI.<p> |
|
|
|
|
|
<li> The application must keep the .dbf file in sync with the .shp/.shx |
|
|
files through appropriate use of the DBF and SHP APIs.<p> |
|
|
|
|
|
<li> No support for the undocumented .sbn/.sbx spatial index files.<p> |
|
|
|
|
|
</ul> |
|
|
|
|
|
<h2>Other Shapefile Resources</h2> |
|
|
|
|
|
<ul> |
|
|
<li> <a href="dl/shapefile.pdf">Shapefile Format Specifications (pdf)</a><p> |
|
|
|
|
|
<li> <a href="http://www.clicketyclick.dk/databases/xbase/format/">Xbase (.dbf) File Format Description</a>. <p> |
|
|
|
|
|
<li> <a href="codepage.html">Language ID / Code Page mappings</a><p> |
|
|
|
|
|
<li> Shapelib is used within the multiformat |
|
|
<a href="http://ogr.maptools.org/">OGR</a> library. If you are looking for a |
|
|
high level C++ library with support for many geospatial vector formats you |
|
|
might want to check it out.<p> |
|
|
|
|
|
<li> Ari Jolma has produced an initial <b>perl</b> binding on top of shapelib, |
|
|
which can be found at CPAN as Geo::ShapeFile under the |
|
|
<a href="http://www.cpan.org/modules/by-module/Geo/">Geo</a> module. |
|
|
<p> |
|
|
|
|
|
<li> Bernhard Herzog has produced <b>python</b> bindings for Shapelib with |
|
|
SWIG, available at <a href="http://ftp.intevation.de/users/bh/pyshapelib/">http://ftp.intevation.de/users/bh/pyshapelib</a>. A new version not using swig is |
|
|
available as <a href="http://wald.intevation.org/plugins/scmsvn/viewcvs.php/trunk/thuban/libraries/pyshapelib/?root=thuban">part of Thuban</a>.<p> |
|
|
|
|
|
<li> <a href="http://www.triplexware.huckfinn.de/shpapi.html">Delphi</a> |
|
|
bindings for Shapelib courtesy of Alexander Weidauer.<p> |
|
|
|
|
|
<li> Miguel Filgueiras has implemented |
|
|
<a href="http://www.ncc.up.pt/gpsmanshp/">Tcl</a> bindings for Shapelib |
|
|
as part of <a href="http://www.ncc.up.pt/gpsman/">GPSMan</a>.<p> |
|
|
|
|
|
<li> David Gancarz has implemented a Microsoft |
|
|
<a href="dl/contrib/DotNetArchive.zip">.NET wrapper</a> for |
|
|
Shapelib. An example of using shapelib with VB6 is also icluded in the .NET wrapper project file.<p> |
|
|
|
|
|
<li> Andrey Hristov (php at hristov dot com) has developed a PHP extension |
|
|
based on Shapelib. It can be found in CVS at http://cvs.php.net/pecl/shp.<p> |
|
|
|
|
|
<li> Toyoda Eizi has developed Ruby bindings found at |
|
|
<a href="http://sourceforge.net/projects/ruby-shapelib">http://sourceforge.net/projects/ruby-shapelib</a>.<p> |
|
|
|
|
|
<li> Davide Cesari has developed FORTRAN bindings that can be found at |
|
|
<a href"http://www.webalice.it/o.drofa/davide/shapelib-fortran/"> |
|
|
http://www.webalice.it/o.drofa/davide/shapelib-fortran</a>. |
|
|
|
|
|
<li> Jan-Oliver Wagner has implemented a commandline program |
|
|
(<b>gen2shp</b>) for producing shapefiles from Arc/Info Generate format ASCII |
|
|
files. He maintains a <a href="http://intevation.de/~jan/gen2shp">web page</a> for his work. <p> |
|
|
|
|
|
<li> Tom Russo has implemented a shpcs2cs program, which reprojects shapefiles |
|
|
using arguments similar to the PROJ.4 cs2cs program including datum conversion. |
|
|
Use as an alternate to the contrib/shpproj which doesn't do datums. It is |
|
|
available at the bottom of Tom's <a href="http://www.swcp.com/~russo/shape_web/">Xastir Shapefile Resources</a> page. <p> |
|
|
|
|
|
<li> |
|
|
Andrew Williamson's |
|
|
<a href="http://www.geocities.com/SiliconValley/Haven/2295/useful.html">Useful |
|
|
Scripts and Stuff</a> page for ArcView, which includes ShapeChecker.<p> |
|
|
|
|
|
<li> The University of Bonn <a href="http://katla.giub.uni-bonn.de/sfjava/"> |
|
|
sf4java</a> project apparently includes Java classes for reading Shapefiles.<p> |
|
|
|
|
|
<li> The <a href="http://gis.esri.com/arcscripts/details.cfm?CFGRIDKEY=628102085">ShapeIO2</a> Visual Basic libraries may be of interest to those wanting |
|
|
VB access to Shapefiles. Also available <a href="http://shapelib.maptools.org/dl/contrib/ShapeIO2.zip">locally</a>.<p> |
|
|
|
|
|
<li> The <a href="http://arcscripts.esri.com/details.asp?dbid=11810">ShapeFile Read/Write OCX</a> is another option for Visual Basic programmers.<p> |
|
|
|
|
|
<li> <a href="http://www.casa.ucl.ac.uk/sanjay/software_isovistanalyst.htm">Isovist Analyst</a> is a sort-of-free isovist generating extension for |
|
|
ArcView using shapelib.<p> |
|
|
|
|
|
<li> <a href="http://www.obviously.com/gis/shpdiff/">shpdiff</a> utility |
|
|
by Bryce Nesbitt.<p> |
|
|
|
|
|
<li> <a href="http://www.aequometer.de/">Aequometer</a>: a program for |
|
|
MS Excel to calculate the area of polygons and export as shapefiles.<p> |
|
|
|
|
|
</ul> |
|
|
|
|
|
</body> |
|
|
</html>
|
|
|
|