index.html 9.51 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
<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ä (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>