Writes shapefile in pure javascript. Uses dbf for the data component, and jsZIP to generate downloads in-browser.
NPM
npm install --save @mapbox/shp-write Yarn
yarn add @mapbox/shp-write Browser
https://unpkg.com/@mapbox/shp-write@latest/shpwrite.js - Requires a capable fancy modern browser with Typed Arrays support
- Supports geometries:
Point,LineString,Polygon,MultiLineString,MultiPolygon - Tabular-style properties export with 10 character field name length limit
- Uses jsZip for ZIP files, but compression is buggy so it uses STORE instead of DEFLATE.
var shpwrite = require("@mapbox/shp-write"); const geoJSON = { type: "FeatureCollection", features: [ { type: "Feature", geometry: { type: "Point", coordinates: [0, 0], }, properties: { name: "Foo", }, }, { type: "Feature", geometry: { type: "Point", coordinates: [0, 10], }, properties: { name: "Bar", }, }, ], }; // Optional custom options passed to the underlying `zip` call const options = { folder: "my_internal_shapes_folder", filename: "my_zip_filename", outputType: "blob", compression: "DEFLATE", types: { point: "mypoints", polygon: "mypolygons", polyline: "mylines", }, }; const zipData = shpwrite.zip(geoJSON,options);To pass a custom WKT string in the .prj file to define a different projection the prj option can be used:
var options = { prj: 'PROJCS["Amersfoort / RD New",GEOGCS["Amersfoort",DATUM["D_Amersfoort",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Stereographic_North_Pole"],PARAMETER["standard_parallel_1",52.15616055555555],PARAMETER["central_meridian",5.38763888888889],PARAMETER["scale_factor",0.9999079],PARAMETER["false_easting",155000],PARAMETER["false_northing",463000],UNIT["Meter",1]]' }Generates a shapefile and calls the callback with err and an object containing shp, shx, and dbf DataViews.
- data: Array of objects for each row of data.
- geometrytype: The OGC standard geometry type (e.g., POINT).
- geometries: List of geometries as bare coordinate arrays.
- callback: Function to handle the generated DataViews.
shpwrite.write(data, geometrytype, geometries, (err, result) => { // result is equal to // { // shp: DataView(), // shx: DataView(), // dbf: DataView() // } if (err) throw err; console.log(result); });Generate a ArrayBuffer of a zipped shapefile, dbf, and prj, from a GeoJSON object.
Warning
This is now marked as deprecated because it applies to browsers only and the user should instead rely on an external library for this functionality like file-saver or downloadjs
Given a GeoJSON FeatureCollection as an object, converts convertible features into Shapefiles and triggers a download. options is passed to the underlying zip call.
- Nick Baugh niftylettuce@gmail.com
- Charles Richardson charlesrichardsonusa@gmail.com