https://github.com/vojtatom/shp.ts
πΊοΈ Shapefile Reader in TypeScript
https://github.com/vojtatom/shp.ts
dbf esri-shapefile geojson loader parser shapefile shp typescript
Last synced: 26 days ago
JSON representation
πΊοΈ Shapefile Reader in TypeScript
- Host: GitHub
- URL: https://github.com/vojtatom/shp.ts
- Owner: vojtatom
- License: other
- Created: 2023-04-28T07:03:52.000Z (about 2 years ago)
- Default Branch: dev
- Last Pushed: 2025-01-13T20:08:08.000Z (4 months ago)
- Last Synced: 2025-03-20T14:56:10.566Z (about 1 month ago)
- Topics: dbf, esri-shapefile, geojson, loader, parser, shapefile, shp, typescript
- Language: TypeScript
- Homepage:
- Size: 2.69 MB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# shp.ts πΊοΈ
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](https://www.esri.com/content/dam/esrisites/sitecore-archive/Files/Pdfs/library/whitepapers/pdfs/shapefile.pdf)
- β supports X, Y, Z, and M coordinates
- β uses vitest π§ͺ for testing
- β includes mapbox's earcut triangulation## Install from [npm](https://www.npmjs.com/package/shpts)
```
npm install shpts
```| Branch | |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Release | [](https://github.com/vojtatom/shpts/actions/workflows/ci.yaml) |
| Dev | [](https://github.com/vojtatom/shpts/actions/workflows/ci.yaml) |## Usage
```typescript
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:
```typescript
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:
```typescript
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):
```typescript
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])
```## Credits
- 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