TypeScript package for loading Esri Shapefiles, primary developed for for WebGL applications
- β returns a geojson-like representation
- β supports all shape types (including MultiPatch) per Esri Shapefile specification
- β supports X, Y, Z, and M coordinates
- β uses vitest π§ͺ for testing
- β includes mapbox's earcut triangulation
Install from npm
npm install shpts
Branch | |
---|---|
Release | |
Dev |
import { FeatureReader } from 'shpts';
const shp = 'testdata/featureclass.shp';
const shx = 'testdata/featureclass.shx';
const dbf = 'testdata/featureclass.dbf';
const cpg = 'testdata/featureclass.cpg';
const reader = await FeatureReader.fromFiles(shp, shx, dbf, cpg);
//alternatively you can use FeatureReader.fromArrayBuffers()
const features = await reader.readFeatureCollection();
const geojson = features.toGeoJson();
or you can read only the geoemtry:
import { ShapeReader } from 'shpts';
const shp = 'testdata/featureclass.shp';
const shx = 'testdata/featureclass.shx';
const reader = await ShapeReader.fromFiles(shp, shx);
//alternatively you can use ShapeReader.fromArrayBuffers()
const index = 0;
const shape = reader.readGeom(index);
const geojson = shape.toGeoJson();
or you can read only the properties:
import { DbfReader } from 'shpts';
const dbf = 'testdata/featureclass.dbf';
const cpg = 'testdata/featureclass.cpg';
const reader = await DbfReader.fromFiles(dbf, cpg);
//alternatively you can use DbfReader.fromArrayBuffers()
const index = 0;
const properties = reader.readRecord(index);
console.log(properties);
triangulate a polygon (expects a set of rings, where the first one is the outer ring and the rest are holes):
import { triangulate, Ring } from 'shpts';
const input: Ring[] = [
[
[0, 0],
[1, 0],
[1, 1],
[0, 1],
],
];
const output = triangulate(input, CoordType.XY);
//Float32Array([1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1])
- insipred by https://github.com/oyvindi/ts-shapefile (MIT Licence), uses all of its test data, partially uses its code
- inspired by https://github.com/GeospatialPython/pyshp (MIT Licence), uses some of its test data