betterknown development is supported by 🌎 placemark.io
I wrote wellknown, a WKT parser and stringifier, eons ago. It's still sort of popular but nobody maintained it after I left Mapbox.
There's wkx, which is stricter and honestly has a better parser, plus supports WKB, but it's also abandoned and has some drawbacks - no TypeScript, somewhat idiosyncratic code, and the bundle size is larger than it needs to be because it brings in browserify shims.
This project aims to be the combination of the two projects. Lightweight like wellknown, strict and correct like wkx, plus with the 2022 energy of supporting TypeScript from day one.
- 100% TypeScript
- No dependencies - tiny bundle
- Parse WKT to GeoJSON, stringify GeoJSON to WKT
- Optional reprojection of EWKT to GeoJSON's required WGS84 coordinate system
- Support for GeoSPARQL-flavored WKT
import { wktToGeoJSON, geoJSONToWkt } from "betterknown";
import proj4 from "proj4";
// Converting & reprojecting an EWKT string
wktToGeoJSON(`SRID=3857;POINT(-400004.3 60000.1)`, {
proj: proj4,
});
// Converting GeoJSON to WKT
geoJSONToWkt({
type: 'Point',
coordinates: [1, 2]
});This specification of WKT specifies Literal Axis Order, which diverges from WKT and EWKT.
For example the input
<http://www.opengis.net/def/crs/EPSG/0/4326> Point(33.95 -83.38)
Produces this GeoJSON, with flipped coordinate order.
{
"coordinates": [-83.38, 33.95],
"type": "Point",
}The behavior of Betterknown in this situation is:
- If the IRI is exactly
http://www.opengis.net/def/crs/EPSG/0/4326, then we flip coordinates. - If it is provided and not exactly that string, then we call the
projmethod, and you're in charge of reprojection and flipping coordinates: theprojmethod will receive the IRI string. Note thatproj4does not support the IRI-style projection URLs, so you'll have to include custom code here. An example of usingproj4with these URLs is listed below.