shp 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +34 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +28 -0
  6. data/README.md +30 -0
  7. data/Rakefile +23 -0
  8. data/ext/shp/base.hpp +113 -0
  9. data/ext/shp/dbf.cpp +381 -0
  10. data/ext/shp/dbf.hpp +44 -0
  11. data/ext/shp/extconf.rb +13 -0
  12. data/ext/shp/shape_object.cpp +58 -0
  13. data/ext/shp/shape_object.hpp +27 -0
  14. data/ext/shp/shapefile.cpp +299 -0
  15. data/ext/shp/shapefile.hpp +35 -0
  16. data/ext/shp/shapelib/.cvsignore +15 -0
  17. data/ext/shp/shapelib/ChangeLog +450 -0
  18. data/ext/shp/shapelib/HOWTO-RELEASE +16 -0
  19. data/ext/shp/shapelib/LICENSE.LGPL +483 -0
  20. data/ext/shp/shapelib/Makefile +113 -0
  21. data/ext/shp/shapelib/README +41 -0
  22. data/ext/shp/shapelib/README.tree +172 -0
  23. data/ext/shp/shapelib/contrib/.cvsignore +12 -0
  24. data/ext/shp/shapelib/contrib/Makefile +66 -0
  25. data/ext/shp/shapelib/contrib/ShapeFileII.pas +234 -0
  26. data/ext/shp/shapelib/contrib/Shape_PointInPoly.cpp +238 -0
  27. data/ext/shp/shapelib/contrib/Shape_PointInPoly_README.txt +59 -0
  28. data/ext/shp/shapelib/contrib/csv2shp.c +558 -0
  29. data/ext/shp/shapelib/contrib/dbfcat.c +166 -0
  30. data/ext/shp/shapelib/contrib/dbfinfo.c +106 -0
  31. data/ext/shp/shapelib/contrib/makefile.vc +34 -0
  32. data/ext/shp/shapelib/contrib/my_nan.h +46 -0
  33. data/ext/shp/shapelib/contrib/shpcat.c +100 -0
  34. data/ext/shp/shapelib/contrib/shpcentrd.c +159 -0
  35. data/ext/shp/shapelib/contrib/shpdata.c +129 -0
  36. data/ext/shp/shapelib/contrib/shpdxf.c +340 -0
  37. data/ext/shp/shapelib/contrib/shpfix.c +110 -0
  38. data/ext/shp/shapelib/contrib/shpgeo.c +1595 -0
  39. data/ext/shp/shapelib/contrib/shpgeo.h +154 -0
  40. data/ext/shp/shapelib/contrib/shpinfo.c +113 -0
  41. data/ext/shp/shapelib/contrib/shpproj.c +260 -0
  42. data/ext/shp/shapelib/contrib/shpsort.c +605 -0
  43. data/ext/shp/shapelib/contrib/shpsort.txt +44 -0
  44. data/ext/shp/shapelib/contrib/shpwkb.c +123 -0
  45. data/ext/shp/shapelib/contrib/tests/shpproj.sh +38 -0
  46. data/ext/shp/shapelib/dbfopen.c +2221 -0
  47. data/ext/shp/shapelib/makefile.vc +86 -0
  48. data/ext/shp/shapelib/makeshape.sh +21 -0
  49. data/ext/shp/shapelib/mkdist.sh +37 -0
  50. data/ext/shp/shapelib/mkinstalldirs +38 -0
  51. data/ext/shp/shapelib/mkrelease.sh +55 -0
  52. data/ext/shp/shapelib/safileio.c +286 -0
  53. data/ext/shp/shapelib/shapefil.h +647 -0
  54. data/ext/shp/shapelib/shapelib.def +46 -0
  55. data/ext/shp/shapelib/shpopen.c +2388 -0
  56. data/ext/shp/shapelib/shptree.c +1187 -0
  57. data/ext/shp/shapelib/shputils.c +1072 -0
  58. data/ext/shp/shapelib/stream1.out +1465 -0
  59. data/ext/shp/shapelib/stream1.sh +28 -0
  60. data/ext/shp/shapelib/stream2.out +530 -0
  61. data/ext/shp/shapelib/stream2.sh +11 -0
  62. data/ext/shp/shapelib/stream3.out +37 -0
  63. data/ext/shp/shapelib/web/.cvsignore +2 -0
  64. data/ext/shp/shapelib/web/codepage.html +403 -0
  65. data/ext/shp/shapelib/web/dbf_api.html +436 -0
  66. data/ext/shp/shapelib/web/index.html +235 -0
  67. data/ext/shp/shapelib/web/license.html +78 -0
  68. data/ext/shp/shapelib/web/manifest.html +87 -0
  69. data/ext/shp/shapelib/web/release.html +80 -0
  70. data/ext/shp/shapelib/web/shapelib-tools.html +352 -0
  71. data/ext/shp/shapelib/web/shp_api.html +376 -0
  72. data/ext/shp/shp.cpp +19 -0
  73. data/ext/shp/shp.hpp +47 -0
  74. data/lib/shp.rb +35 -0
  75. data/lib/shp/version.rb +3 -0
  76. data/shp.gemspec +23 -0
  77. data/spec/shp_spec.rb +127 -0
  78. metadata +176 -0
@@ -0,0 +1,436 @@
1
+ <html>
2
+ <head>
3
+ <title>Attribute (.DBF) API</title>
4
+ </head>
5
+ <body>
6
+ <h1>Attribute (.DBF) API</h1>
7
+
8
+ The Attribute (DBF) API uses DBFHandle to represent a handle for access
9
+ to one .dbf file. The contents of the DBFHandle are visible (see shapefil.h)
10
+ but should be ignored by the application. It is intended that all information
11
+ be accessed by API functions. Note that there should be exactly one record
12
+ in the .dbf file for each shape in the .shp/.shx files. This constraint
13
+ must be maintained by the application.<p>
14
+
15
+ <!-------------------------------------------------------------------------->
16
+
17
+ <h2>DBFOpen()</h2>
18
+
19
+ <pre>
20
+ DBFHandle DBFOpen( const char * pszDBFFile, const char * pszAccess );
21
+
22
+ pszDBFFile: The name of the xBase (.dbf) file to access.
23
+
24
+ pszAccess: The fopen() style access string. At this time only
25
+ "rb" (read-only binary) and "rb+" (read/write binary)
26
+ should be used.
27
+ </pre>
28
+
29
+ The DBFOpen() function should be used to establish access to an existing
30
+ xBase format table file. The returned DBFHandle is passed to other
31
+ access functions, and DBFClose() should be invoked to recover resources, and
32
+ flush changes to disk when complete. The DBFCreate() function should
33
+ called to create new xBase files. As a convenience, DBFOpen() can be
34
+ called with the name of a .shp or .shx file, and it will figure out the
35
+ name of the related .dbf file.<p>
36
+
37
+ <!-------------------------------------------------------------------------->
38
+
39
+ <h2>DBFCreate()</h2>
40
+
41
+ <pre>
42
+ DBFHandle DBFCreate( const char * pszDBFFile );
43
+
44
+ pszDBFFile: The name of the xBase (.dbf) file to create.
45
+ </pre>
46
+
47
+ The DBFCreate() function creates a new xBase format file with the given
48
+ name, and returns an access handle that can be used with other DBF functions.
49
+ The newly created file will have no fields, and no records. Fields should
50
+ be added with DBFAddField() before any records add written.
51
+
52
+ <!-------------------------------------------------------------------------->
53
+
54
+ <h2>DBFGetFieldCount()</h2>
55
+
56
+ <pre>
57
+ int DBFGetFieldCount( DBFHandle hDBF );
58
+
59
+ hDBF: The access handle for the file to be queried, as returned
60
+ by DBFOpen(), or DBFCreate().
61
+ </pre>
62
+
63
+ The DBFGetFieldCount() function returns the number of fields currently
64
+ defined for the indicated xBase file.
65
+
66
+ <!-------------------------------------------------------------------------->
67
+
68
+ <h2>DBFGetRecordCount()</h2>
69
+
70
+ <pre>
71
+ int DBFGetRecordCount( DBFHandle hDBF );
72
+
73
+ hDBF: The access handle for the file to be queried, as returned by
74
+ DBFOpen(), or DBFCreate().
75
+ </pre>
76
+
77
+ The DBFGetRecordCount() function returns the number of records that
78
+ exist on the xBase file currently. Note that with shape files one xBase
79
+ record exists for each shape in the .shp/.shx files.<p>
80
+
81
+ <!-------------------------------------------------------------------------->
82
+
83
+ <h2>DBFGetFieldIndex()</h2>
84
+
85
+ <pre>
86
+ int DBFGetFieldIndex( DBFHandle hDBF, const char *pszFieldName );
87
+
88
+ hDBF: The access handle for the file to be queried, as returned by
89
+ DBFOpen(), or DBFCreate().
90
+
91
+ pszFieldName: Name of the field to search for.
92
+ </pre>
93
+
94
+ Returns the index of the field matching this name, or -1 on failure. The
95
+ comparison is case insensitive. However, lengths must match exactly.<p>
96
+
97
+ <!-------------------------------------------------------------------------->
98
+
99
+ <h2>DBFGetFieldInfo()</h2>
100
+
101
+ <pre>
102
+ DBFFieldType DBFGetFieldInfo( DBFHandle hDBF, int iField, char * pszFieldName,
103
+ int * pnWidth, int * pnDecimals );
104
+
105
+ hDBF: The access handle for the file to be queried, as returned by
106
+ DBFOpen(), or DBFCreate().
107
+
108
+ iField: The field to be queried. This should be a number between
109
+ 0 and n-1, where n is the number fields on the file, as
110
+ returned by DBFGetFieldCount().
111
+
112
+ pszFieldName: If this pointer is not NULL the name of the requested field
113
+ will be written to this location. The pszFieldName buffer
114
+ should be at least 12 character is size in order to hold
115
+ the longest possible field name of 11 characters plus a
116
+ terminating zero character.
117
+
118
+ pnWidth: If this pointer is not NULL, the width of the requested field
119
+ will be returned in the int pointed to by pnWidth. This is
120
+ the width in characters.
121
+
122
+ pnDecimals: If this pointer is not NULL, the number of decimal places
123
+ precision defined for the field will be returned. This is
124
+ zero for integer fields, or non-numeric fields.
125
+ </pre>
126
+
127
+ The DBFGetFieldInfo() returns the type of the requested field, which is
128
+ one of the DBFFieldType enumerated values. As well, the field name, and
129
+ field width information can optionally be returned. The field type returned
130
+ does not correspond one to one with the xBase field types. For instance
131
+ the xBase field type for Date will just be returned as being FTInteger. <p>
132
+
133
+ <pre>
134
+ typedef enum {
135
+ FTString, /* fixed length string field */
136
+ FTInteger, /* numeric field with no decimals */
137
+ FTDouble, /* numeric field with decimals */
138
+ FTLogical, /* logical field. */
139
+ FTInvalid /* not a recognised field type */
140
+ } DBFFieldType;
141
+ </pre>
142
+
143
+ <!-------------------------------------------------------------------------->
144
+
145
+ <h2>DBFAddField()</h2>
146
+
147
+ <pre>
148
+ int DBFAddField( DBFHandle hDBF, const char * pszFieldName,
149
+ DBFFieldType eType, int nWidth, int nDecimals );
150
+
151
+ hDBF: The access handle for the file to be updated, as returned by
152
+ DBFOpen(), or DBFCreate().
153
+
154
+ pszFieldName: The name of the new field. At most 11 character will be used.
155
+ In order to use the xBase file in some packages it may be
156
+ necessary to avoid some special characters in the field names
157
+ such as spaces, or arithmetic operators.
158
+
159
+ eType: One of FTString, FTInteger or FTDouble in order to establish
160
+ the type of the new field. Note that some valid xBase field
161
+ types cannot be created such as date fields.
162
+
163
+ nWidth: The width of the field to be created. For FTString fields this
164
+ establishes the maximum length of string that can be stored.
165
+ For FTInteger this establishes the number of digits of the
166
+ largest number that can
167
+ be represented. For FTDouble fields this in combination
168
+ with the nDecimals value establish the size, and precision
169
+ of the created field.
170
+
171
+ nDecimals: The number of decimal places to reserve for FTDouble fields.
172
+ For all other field types this should be zero. For instance
173
+ with nWidth=7, and nDecimals=3 numbers would be formatted
174
+ similarly to `123.456'.
175
+ </pre>
176
+
177
+ The DBFAddField() function is used to add new fields to an existing xBase
178
+ file opened with DBFOpen(), or created with DBFCreate(). Note that fields
179
+ can only be added to xBase files with no records, though this is limitation
180
+ of this API, not of the file format.<p>
181
+
182
+ The DBFAddField() return value is the field number of the new field, or
183
+ -1 if the addition of the field failed.<p>
184
+
185
+ <!-------------------------------------------------------------------------->
186
+
187
+ <h2>DBFReadIntegerAttribute()</h2>
188
+
189
+ <pre>
190
+ int DBFReadIntegerAttribute( DBFHandle hDBF, int iShape, int iField );
191
+
192
+ hDBF: The access handle for the file to be queried, as returned by
193
+ DBFOpen(), or DBFCreate().
194
+
195
+ iShape: The record number (shape number) from which the field value
196
+ should be read.
197
+
198
+ iField: The field within the selected record that should be read.
199
+ </pre>
200
+
201
+ The DBFReadIntegerAttribute() will read the value of one field and return
202
+ it as an integer. This can be used even with FTString fields, though the
203
+ returned value will be zero if not interpretable as a number.<p>
204
+
205
+ <!-------------------------------------------------------------------------->
206
+
207
+ <h2>DBFReadDoubleAttribute()</h2>
208
+
209
+ <pre>
210
+ double DBFReadDoubleAttribute( DBFHandle hDBF, int iShape, int iField );
211
+
212
+ hDBF: The access handle for the file to be queried, as returned by
213
+ DBFOpen(), or DBFCreate().
214
+
215
+ iShape: The record number (shape number) from which the field value
216
+ should be read.
217
+
218
+ iField: The field within the selected record that should be read.
219
+ </pre>
220
+
221
+ The DBFReadDoubleAttribute() will read the value of one field and return
222
+ it as a double. This can be used even with FTString fields, though the
223
+ returned value will be zero if not interpretable as a number.<p>
224
+
225
+ <!-------------------------------------------------------------------------->
226
+
227
+ <h2>DBFReadStringAttribute()</h2>
228
+
229
+ <pre>
230
+ const char *DBFReadStringAttribute( DBFHandle hDBF, int iShape, int iField );
231
+
232
+ hDBF: The access handle for the file to be queried, as returned by
233
+ DBFOpen(), or DBFCreate().
234
+
235
+ iShape: The record number (shape number) from which the field value
236
+ should be read.
237
+
238
+ iField: The field within the selected record that should be read.
239
+ </pre>
240
+
241
+ The DBFReadStringAttribute() will read the value of one field and return
242
+ it as a string. This function may be used on any field type (including
243
+ FTInteger and FTDouble) and will return the string representation stored
244
+ in the .dbf file. The returned pointer is to an internal buffer
245
+ which is only valid untill the next DBF function call. It's contents may
246
+ be copied with normal string functions such as strcpy(), or strdup(). If
247
+ the TRIM_DBF_WHITESPACE macro is defined in shapefil.h (it is by default)
248
+ then all leading and trailing space (ASCII 32) characters will be stripped
249
+ before the string is returned.<p>
250
+
251
+ <!-------------------------------------------------------------------------->
252
+
253
+ <h2>DBFIsAttributeNULL()</h2>
254
+
255
+ <pre>
256
+ int DBFIsAttributeNULL( DBFHandle hDBF, int iShape, int iField );
257
+
258
+ hDBF: The access handle for the file to be queried, as returned by
259
+ DBFOpen(), or DBFCreate().
260
+
261
+ iShape: The record number (shape number) from which the field value
262
+ should be read.
263
+
264
+ iField: The field within the selected record that should be read.
265
+ </pre>
266
+
267
+ This function will return TRUE if the indicated field is NULL valued
268
+ otherwise FALSE. Note that NULL fields are represented in the .dbf file
269
+ as having all spaces in the field. Reading NULL fields will result in
270
+ a value of 0.0 or an empty string with the other DBFRead*Attribute()
271
+ functions.<p>
272
+
273
+ <!-------------------------------------------------------------------------->
274
+
275
+ <h2>DBFWriteIntegerAttribute</h2>
276
+
277
+ <pre>
278
+ int DBFWriteIntegerAttribute( DBFHandle hDBF, int iShape, int iField,
279
+ int nFieldValue );
280
+
281
+ hDBF: The access handle for the file to be written, as returned by
282
+ DBFOpen(), or DBFCreate().
283
+
284
+ iShape: The record number (shape number) to which the field value
285
+ should be written.
286
+
287
+ iField: The field within the selected record that should be written.
288
+
289
+ nFieldValue: The integer value that should be written.
290
+ </pre>
291
+
292
+ The DBFWriteIntegerAttribute() function is used to write a value to a numeric
293
+ field (FTInteger, or FTDouble). If the write succeeds the value TRUE will
294
+ be returned, otherwise FALSE will be returned. If the value is too large to
295
+ fit in the field, it will be truncated and FALSE returned.<p>
296
+
297
+ <!-------------------------------------------------------------------------->
298
+
299
+ <h2>DBFWriteDoubleAttribute()</h2>
300
+
301
+ <pre>
302
+ int DBFWriteDoubleAttribute( DBFHandle hDBF, int iShape, int iField,
303
+ double dFieldValue );
304
+
305
+ hDBF: The access handle for the file to be written, as returned by
306
+ DBFOpen(), or DBFCreate().
307
+
308
+ iShape: The record number (shape number) to which the field value
309
+ should be written.
310
+
311
+ iField: The field within the selected record that should be written.
312
+
313
+ dFieldValue: The floating point value that should be written.
314
+ </pre>
315
+
316
+ The DBFWriteDoubleAttribute() function is used to write a value to a numeric
317
+ field (FTInteger, or FTDouble). If the write succeeds the value TRUE will
318
+ be returned, otherwise FALSE will be returned. If the value is too large to
319
+ fit in the field, it will be truncated and FALSE returned.<p>
320
+
321
+ <!-------------------------------------------------------------------------->
322
+
323
+ <h2>DBFWriteStringAttribute()</h2>
324
+
325
+ <pre>
326
+ int DBFWriteStringAttribute( DBFHandle hDBF, int iShape, int iField,
327
+ const char * pszFieldValue );
328
+
329
+ hDBF: The access handle for the file to be written, as returned by
330
+ DBFOpen(), or DBFCreate().
331
+
332
+ iShape: The record number (shape number) to which the field value
333
+ should be written.
334
+
335
+ iField: The field within the selected record that should be written.
336
+
337
+ pszFieldValue: The string to be written to the field.
338
+ </pre>
339
+
340
+ The DBFWriteStringAttribute() function is used to write a value to a string
341
+ field (FString). If the write succeeds the value TRUE willbe returned,
342
+ otherwise FALSE will be returned. If the value is too large to
343
+ fit in the field, it will be truncated and FALSE returned.<p>
344
+
345
+ <!-------------------------------------------------------------------------->
346
+
347
+ <h2>DBFWriteNULLAttribute()</h2>
348
+
349
+ <pre>
350
+ int DBFWriteNULLAttribute( DBFHandle hDBF, int iShape, int iField );
351
+
352
+ hDBF: The access handle for the file to be written, as returned by
353
+ DBFOpen(), or DBFCreate().
354
+
355
+ iShape: The record number (shape number) to which the field value
356
+ should be written.
357
+
358
+ iField: The field within the selected record that should be written.
359
+ </pre>
360
+
361
+ The DBFWriteNULLAttribute() function is used to clear the indicated field
362
+ to a NULL value. In the .dbf file this is represented by setting the entire
363
+ field to spaces. If the write succeeds the value TRUE willbe returned,
364
+ otherwise FALSE will be returned.<p>
365
+
366
+ <!-------------------------------------------------------------------------->
367
+
368
+ <h2>DBFClose()</h2>
369
+
370
+ <pre>
371
+ void DBFClose( DBFHandle hDBF );
372
+
373
+ hDBF: The access handle for the file to be closed.
374
+ </pre>
375
+
376
+ The DBFClose() function will close the indicated xBase file (opened with
377
+ DBFOpen(), or DBFCreate()), flushing out all information to the file on
378
+ disk, and recovering any resources associated with having the file open.
379
+ The file handle (hDBF) should not be used again with the DBF API after
380
+ calling DBFClose().<p>
381
+
382
+ <!-------------------------------------------------------------------------->
383
+
384
+ <h2>DBFIsRecordDeleted()</h2>
385
+
386
+ <pre>
387
+ int DBFIsRecordDeleted( DBFHandle hDBF, int iShape );
388
+
389
+ hDBF: The access handle for the file to be checked.
390
+ iShape: The record index to check.
391
+ </pre>
392
+
393
+ Returns TRUE (non-zero) if the record is marked for deletion, otherwise
394
+ it returns FALSE.<p>
395
+
396
+ <!-------------------------------------------------------------------------->
397
+
398
+ <h2>DBFMarkRecordDeleted()</h2>
399
+
400
+ <pre>
401
+ int DBFMarkRecordDeleted( DBFHandle hDBF, int iShape, int bIsDeleted );
402
+
403
+ hDBF: The access handle for the file.
404
+ iShape: The record index to update.
405
+ bIsDeleted: TRUE to mark record deleted, or FALSE to undelete it.
406
+ </pre>
407
+
408
+ Returns TRUE on success, or FALSE on error.<p>
409
+
410
+ <!-------------------------------------------------------------------------->
411
+
412
+ <h2>DBFGetNativeFieldType()</h2>
413
+
414
+ <pre>
415
+ char DBFGetNativeFieldType( DBFHandle hDBF, int iField );
416
+
417
+ hDBF: The access handle for the file.
418
+ iField: The field index to query.
419
+
420
+ </pre>
421
+
422
+ This function returns the DBF type code of the indicated field. It will
423
+ be one of:<p>
424
+
425
+ <ul>
426
+ <li> 'C' (String)
427
+ <li> 'D' (Date)
428
+ <li> 'F' (Float)
429
+ <li> 'N' (Numeric, with or without decimal)
430
+ <li> 'L' (Logical)
431
+ <li> 'M' (Memo: 10 digits .DBT block ptr)
432
+ <li> ' ' (field out of range)
433
+ </ul>
434
+
435
+ </body>
436
+ </html>
@@ -0,0 +1,235 @@
1
+ <html>
2
+ <head>
3
+ <title>Shapefile C Library V1.2</title>
4
+ <link href="http://www.maptools.org/maptools.css" rel="stylesheet" type="text/css">
5
+ </head>
6
+
7
+ <body>
8
+ <h1>Shapefile C Library V1.2</h1>
9
+
10
+ <h2>Purpose</h2>
11
+
12
+ The Shapefile C Library provides the ability to write simple C programs
13
+ for reading, writing and updating (to a limited extent) ESRI Shapefiles,
14
+ and the associated attribute file (.dbf).<p>
15
+
16
+ <h2>Supporting Information</h2>
17
+
18
+ <ul>
19
+ <li> <a href="shp_api.html">Shapefile API Docs</a>
20
+ <li> <a href="dbf_api.html">DBF/xBase API Docs</a>
21
+ <li> <a href="shapelib-tools.html">Shapefile Tools Docs</a>
22
+ <li> <a href="release.html">Release Notes</a>
23
+ <li> <a href="manifest.html">Shapelib File Manifest</a>
24
+ <li> <a href="license.html">Shapelib Licensing Terms</a>
25
+ </ul>
26
+
27
+ <h2>What is a Shapefile?</h2>
28
+
29
+ If you don't know, you probably don't need this library. The Shapefile
30
+ format is a working and interchange format promulagated by
31
+ <a href="http://www.esri.com/">ESRI</a> for simple vector data with attributes.
32
+ <p>
33
+
34
+ An excellent <a href="dl/shapefile.pdf">white paper</a> on the shapefile format
35
+ is available from ESRI,
36
+ but it is .pdf format, so you will need Adobe Acrobat to browse it.<p>
37
+
38
+ The file format actually consists of three files.<p>
39
+
40
+ <pre>
41
+ XXX.shp - holds the actual vertices.
42
+ XXX.shx - hold index data pointing to the structures in the .shp file.
43
+ XXX.dbf - holds the attributes in xBase (dBase) format.
44
+ </pre>
45
+
46
+ <h2>Download</h2>
47
+
48
+ Source code, and some other odds and ends can be downloaded from
49
+ <a href="http://download.osgeo.org/shapelib">http://download.osgeo.org/shapelib</a> or <a href="http://shapelib.maptools.org/dl">http://shapelib.maptools.org/dl</a>.<p>
50
+
51
+ Shapelib is available for anonymous CVS access:
52
+
53
+ <pre>
54
+ cvs -d :pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot login
55
+ Password: (hit enter)
56
+ cvs -d :pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot co shapelib
57
+ </pre>
58
+
59
+ <h2>Bugs, Maintainance and Support</h2>
60
+
61
+ This library is maintained by <a href="http://pobox.com/~warmerdam">Frank
62
+ Warmerdam</a>. Please send me bug reports, patches and suggestions for the
63
+ library via the <a href="http://bugzilla.maptools.org/enter_bug.cgi?product=Shapelib">maptools.org Bugzilla</a>. Shapelib bugs can also be
64
+ <a href="http://bugzilla.maptools.org/query.cgi?product=Shapelib">queried</a>.
65
+ <p>
66
+
67
+ Shapelib is hosted at
68
+ <a href="http://shapelib.maptools.org">shapelib.maptools.org</a>. A mailing
69
+ list for discussion of how to use shapelib, and announcing new releases
70
+ <a href="http://lists.maptools.org/mailman/listinfo/shapelib/">is
71
+ available</a>. To only find out about new releases of Shapelib select the
72
+ "<i>Subscribe to new releases</i>" option from the link at
73
+ <a href="http://freshmeat.net/projects/shapelib/">Freshmeat</a>.<p>
74
+
75
+ <h2>Credits</h2>
76
+
77
+ I didn't start this section anywhere near soon enough, so alot of earlier
78
+ contributors to Shapelib are lost in pre-history.
79
+
80
+ <ul>
81
+ <li> Bill Miller (NY-DOT) for shputils.c
82
+ <li> Carl Anderson for the contents of the contrib directory, and
83
+ the "tuple" additions to dbfopen.c.
84
+ <li> Andrea Giacomelli for patches for dbfopen.c.
85
+ <li> Doug Matthews for portability improvements.
86
+ <li> Jan-Oliver Wagner for convincing me to make it available under LGPL,
87
+ shared library support, and various other patches.
88
+ <li> Dennis Christopher (of Avenza) for testing and bug fixes.
89
+ <li> Miko Syrj� (of 3D-system Oy) for a record size bug fix.
90
+ <li> Steven Lime and Curtis Hill for help with NULL shapes.
91
+ <li> Jim Matthews for support of NULL attributes in dbf files.
92
+ <li> <a href="http://www.pcigeomatics.com/">PCI Geomatics</a> who let me
93
+ release a modified version of their shapefile code in the beginning and
94
+ who hosted shapelib for years.
95
+ </ul>
96
+
97
+ <h2>In Memorium</h2>
98
+
99
+ I would like to dedicate Shapelib to the memory of Sol Katz. While I never
100
+ met him in person, his generous contributions to the GIS community took
101
+ many forms, including free distribution of a variety of GIS translators
102
+ with source. The fact that he used this Shapelib in some of his utilities,
103
+ and thanked me was a great encouragement to me. I hope I can do his memory
104
+ honour by trying to contribute in a similar fashion.<p>
105
+
106
+ <h2>Portability</h2>
107
+
108
+ The Shapefile C Library should port easily to 32bit systems with ANSI C
109
+ compilers. It should work on 64 bit architectures (such as the DEC AXP).<p>
110
+
111
+ Care should also be taken to pass the binary access flag into SHPOpen()
112
+ and DBFOpen() when operating on systems with special text file translation
113
+ such as MSDOS.<p>
114
+
115
+ The shputils.c module is contributed, and may not take the same approach
116
+ to portability as the rest of the package.<p>
117
+
118
+ On Linux, and most unix systems it should be possible to build and
119
+ install shapefile support as a shared library using the "lib" and "lib_install"
120
+ targets of the Makefile. Note that this Makefile doesn't use autoconf
121
+ mechanisms and will generally require some hand tailoring for your environment.
122
+
123
+ <h2>Limitations</h2>
124
+
125
+ <ul>
126
+
127
+ <li> You can't modify the vertices of existing structures (though you
128
+ can update the attributes of existing structures, and create new
129
+ structures).<p>
130
+
131
+ <li> Not written in such a way as to be particularly fast. This is
132
+ particularly true of the 1.2 API. For applications more concerned with
133
+ speed it may be worth using the V1.1 API.<p>
134
+
135
+ <li> Doesn't set the last access time properly in the .dbf files.<p>
136
+
137
+ <li> There is no way to synchronize information to the file except to close it.
138
+ <p>
139
+
140
+ <li> Poor error checking and reporting.<p>
141
+
142
+ <li> Not professionally supported (well it can be, if you want to pay).<p>
143
+
144
+ <li> Some aspects of xBase files not supported, though I believe they are
145
+ not used by ESRI.<p>
146
+
147
+ <li> The application must keep the .dbf file in sync with the .shp/.shx
148
+ files through appropriate use of the DBF and SHP APIs.<p>
149
+
150
+ <li> No support for the undocumented .sbn/.sbx spatial index files.<p>
151
+
152
+ </ul>
153
+
154
+ <h2>Other Shapefile Resources</h2>
155
+
156
+ <ul>
157
+ <li> <a href="dl/shapefile.pdf">Shapefile Format Specifications (pdf)</a><p>
158
+
159
+ <li> <a href="http://www.clicketyclick.dk/databases/xbase/format/">Xbase (.dbf) File Format Description</a>. <p>
160
+
161
+ <li> <a href="codepage.html">Language ID / Code Page mappings</a><p>
162
+
163
+ <li> Shapelib is used within the multiformat
164
+ <a href="http://ogr.maptools.org/">OGR</a> library. If you are looking for a
165
+ high level C++ library with support for many geospatial vector formats you
166
+ might want to check it out.<p>
167
+
168
+ <li> Ari Jolma has produced an initial <b>perl</b> binding on top of shapelib,
169
+ which can be found at CPAN as Geo::ShapeFile under the
170
+ <a href="http://www.cpan.org/modules/by-module/Geo/">Geo</a> module.
171
+ <p>
172
+
173
+ <li> Bernhard Herzog has produced <b>python</b> bindings for Shapelib with
174
+ 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
175
+ available as <a href="http://wald.intevation.org/plugins/scmsvn/viewcvs.php/trunk/thuban/libraries/pyshapelib/?root=thuban">part of Thuban</a>.<p>
176
+
177
+ <li> <a href="http://www.triplexware.huckfinn.de/shpapi.html">Delphi</a>
178
+ bindings for Shapelib courtesy of Alexander Weidauer.<p>
179
+
180
+ <li> Miguel Filgueiras has implemented
181
+ <a href="http://www.ncc.up.pt/gpsmanshp/">Tcl</a> bindings for Shapelib
182
+ as part of <a href="http://www.ncc.up.pt/gpsman/">GPSMan</a>.<p>
183
+
184
+ <li> David Gancarz has implemented a Microsoft
185
+ <a href="dl/contrib/DotNetArchive.zip">.NET wrapper</a> for
186
+ Shapelib. An example of using shapelib with VB6 is also icluded in the .NET wrapper project file.<p>
187
+
188
+ <li> Andrey Hristov (php at hristov dot com) has developed a PHP extension
189
+ based on Shapelib. It can be found in CVS at http://cvs.php.net/pecl/shp.<p>
190
+
191
+ <li> Toyoda Eizi has developed Ruby bindings found at
192
+ <a href="http://sourceforge.net/projects/ruby-shapelib">http://sourceforge.net/projects/ruby-shapelib</a>.<p>
193
+
194
+ <li> Davide Cesari has developed FORTRAN bindings that can be found at
195
+ <a href"http://www.webalice.it/o.drofa/davide/shapelib-fortran/">
196
+ http://www.webalice.it/o.drofa/davide/shapelib-fortran</a>.
197
+
198
+ <li> Jan-Oliver Wagner has implemented a commandline program
199
+ (<b>gen2shp</b>) for producing shapefiles from Arc/Info Generate format ASCII
200
+ files. He maintains a <a href="http://intevation.de/~jan/gen2shp">web page</a> for his work. <p>
201
+
202
+ <li> Tom Russo has implemented a shpcs2cs program, which reprojects shapefiles
203
+ using arguments similar to the PROJ.4 cs2cs program including datum conversion.
204
+ Use as an alternate to the contrib/shpproj which doesn't do datums. It is
205
+ available at the bottom of Tom's <a href="http://www.swcp.com/~russo/shape_web/">Xastir Shapefile Resources</a> page. <p>
206
+
207
+ <li>
208
+ Andrew Williamson's
209
+ <a href="http://www.geocities.com/SiliconValley/Haven/2295/useful.html">Useful
210
+ Scripts and Stuff</a> page for ArcView, which includes ShapeChecker.<p>
211
+
212
+ <li> The University of Bonn <a href="http://katla.giub.uni-bonn.de/sfjava/">
213
+ sf4java</a> project apparently includes Java classes for reading Shapefiles.<p>
214
+
215
+ <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
216
+ VB access to Shapefiles. Also available <a href="http://shapelib.maptools.org/dl/contrib/ShapeIO2.zip">locally</a>.<p>
217
+
218
+ <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>
219
+
220
+ <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
221
+ ArcView using shapelib.<p>
222
+
223
+ <li> <a href="http://www.obviously.com/gis/shpdiff/">shpdiff</a> utility
224
+ by Bryce Nesbitt.<p>
225
+
226
+ <li> <a href="http://www.aequometer.de/">Aequometer</a>: a program for
227
+ MS Excel to calculate the area of polygons and export as shapefiles.<p>
228
+
229
+ </ul>
230
+
231
+ </body>
232
+ </html>
233
+
234
+
235
+