@crmackey/shp-write
TypeScript icon, indicating that this package has built-in type declarations

0.4.5 • Public • Published

shp-write

This repository is based on a fork from the original repo that has been updated to work better as an esm module and includes typings.

Writes shapefile in pure javascript. Uses dbf for the data component, and fflate to generate ZIP file downloads in-browser.

Installing

npm install --save @crmackey/shp-write

Caveats

  • Requires a modern browser with Typed Arrays support
  • Supported Geojson Geometries: Point, LineString, MultiLineString, MultiPoint, Polygon
  • Unsupported Geojson Geometries: MultiPolygon
  • Tabular-style properties export with Shapefile's field name length limit
  • Uses fflate for zip DEFLATE compression.

Example

import { download } from '@crmackey/shp-write'

// (optional) set names for feature types and zipped folder
var options = {
    /** zip file name, id you only pass this
    * the shapefile will also receive this name
    */
    name: 'ZippedShapefile',
    /** optional nested folder */
    folder: 'myshapes',
    /** optional explicit names for shapefiles generated 
    * for each type of geometry (applicable when mixed geometries are present)
    */
    types: {
        point: 'mypoints',
        polygon: 'mypolygons',
        line: 'mylines'
    }
}
// a GeoJSON bridge for features
download({
    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'
            }
        }
    ]
}, options);
// triggers a download of a zip file with shapefiles contained within.

API

download(geojson, options)

Given a GeoJSON FeatureCollection as an object, converts convertible features into Shapefiles and triggers a download.

write(data, geometrytype, geometries, callback)

Given data, an array of objects for each row of data, geometry, the OGC standard geometry type (like POINT), geometries, a list of geometries as bare coordinate arrays, generate a shapefile and call the callback with err and an object with

{
    shp: DataView(),
    shx: DataView(),
    dbf: DataView()
}

zip(geojson, options)

Generate an Blob of a zipped shapefile, dbf, and prj, from a GeoJSON object.

zip and download options

These are the available options that can be passed into the zip and download functions:

interface WriterOptions {
  /** the zipfile name for the contained shapefile */
  name?: string;
  /** the names of the shapefile for each geometry type */
  types?: {
    /** the name for the point features shapefile if applicable */
    point: string;
    /** the name for the polygon features shapefile if applicable */
    polygon: string;
    /** the name for the line features shapefile if applicable */
    line: string;
};
  /** optional subfolder within zipfile that will contain the shapefile(s) */
  folder?: string;
}

Testing

Write

Run node ./example/write/write.js to generate shp, shx, dbf, files of every geometry type.

Run node ./example/write/linestring.js to generate shp, shx, dbf, files for a linestring.

Zip

Run node ./example/zip/zip.js to generate example zips of every geometry type.

Run node ./example/zip/linestring.js to generate a zip for a linestring.

Test geojson files

The files are named with the following format. ${geojson geometry type}-${dimensionality}-${single or multiple features in feature collection?}

The idea here is to provide a comprehensive list of geojson featureCollections that are supported

Other Implementations

Reference

Contributors

Readme

Keywords

Package Sidebar

Install

npm i @crmackey/shp-write

Weekly Downloads

152

Version

0.4.5

License

BSD-2-Clause

Unpacked Size

310 kB

Total Files

22

Last publish

Collaborators

  • crmackey