@giszhc/geojson-to-wkt
v0.0.3
Published
一个 **简单、轻量、健壮** 的 JavaScript / TypeScript 库,用于将 **GeoJSON** 数据转换为 **WKT(Well-Known Text)** 格式。
Readme
geojson-to-wkt 坐标格式转换
一个 简单、轻量、健壮 的 JavaScript / TypeScript 库,用于将 GeoJSON 数据转换为 WKT(Well-Known Text) 格式。
本库面向 真实 GIS / 数据库场景 设计,适用于将前端或服务端的 GeoJSON 数据输出为数据库可直接使用的 WKT。
特性
- 🚀 轻量、无依赖
- 🧠 明确的几何类型映射(非字符串拼接)
- 🧩 支持 GeoJSON Geometry / Feature / FeatureCollection
- 📐 支持 Z / M 坐标(XY / XYZ / XYM / XYZM)
- 🗄 输出数据库标准 WKT
- 🌲 Tree Shaking 友好,支持按需引入
安装
pnpm install @giszhc/geojson-to-wkt或
npm install @giszhc/geojson-to-wkt支持的类型映射
| GeoJSON 类型 | WKT 类型 | | ------------------ | ------------------ | | Point | POINT | | MultiPoint | MULTIPOINT | | LineString | LINESTRING | | MultiLineString | MULTILINESTRING | | Polygon | POLYGON | | MultiPolygon | MULTIPOLYGON | | GeometryCollection | GEOMETRYCOLLECTION | | Feature | 对应 Geometry | | FeatureCollection | GEOMETRYCOLLECTION |
API
geometryToWKT(geometry: Geometry): string
将 GeoJSON Geometry 转换为 WKT 字符串
import { geometryToWKT } from '@giszhc/geojson-to-wkt';
const geometry = {
type: 'Point',
coordinates: [120, 30]
};
geometryToWKT(geometry);
// "POINT (120 30)"featureToWKT(feature: Feature): string
将 GeoJSON Feature 转换为 WKT
Feature 的
properties会被忽略,仅处理geometry
import { featureToWKT } from '@giszhc/geojson-to-wkt';
const feature = {
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [120, 30]
},
properties: {}
};
featureToWKT(feature);
// "POINT (120 30)"featureCollectionToWKT(featureCollection: FeatureCollection): string
将 GeoJSON FeatureCollection 转换为 GEOMETRYCOLLECTION WKT
import { featureCollectionToWKT } from '@giszhc/geojson-to-wkt';
const collection = {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [120, 30]
},
properties: {}
},
{
type: 'Feature',
geometry: {
type: 'LineString',
coordinates: [[120, 30], [121, 31]]
},
properties: {}
}
]
};
featureCollectionToWKT(collection);
// "GEOMETRYCOLLECTION (POINT (120 30), LINESTRING (120 30, 121 31))"toWKT(input: GeoJSON): string
通用转换方法,自动识别输入类型
支持:
- Geometry
- Feature
- FeatureCollection
import { toWKT } from '@giszhc/geojson-to-wkt';
toWKT({
type: 'Point',
coordinates: [120, 30]
});
// "POINT (120 30)"
toWKT({
type: 'Feature',
geometry: {
type: 'LineString',
coordinates: [[120, 30], [121, 31]]
}
});
// "LINESTRING (120 30, 121 31)"Multi* 几何示例
MultiPoint
geometryToWKT({
type: 'MultiPoint',
coordinates: [
[10, 10],
[20, 20]
]
});
// "MULTIPOINT (10 10, 20 20)"MultiLineString
geometryToWKT({
type: 'MultiLineString',
coordinates: [
[[10, 10], [20, 20]],
[[30, 30], [40, 40]]
]
});
// "MULTILINESTRING ((10 10, 20 20), (30 30, 40 40))"MultiPolygon
geometryToWKT({
type: 'MultiPolygon',
coordinates: [
[[[0, 0], [10, 0], [10, 10], [0, 0]]]
]
});
// "MULTIPOLYGON (((0 0, 10 0, 10 10, 0 0)))"GeometryCollection
geometryToWKT({
type: 'GeometryCollection',
geometries: [
{
type: 'Point',
coordinates: [10, 10]
},
{
type: 'LineString',
coordinates: [[20, 20], [30, 30]]
}
]
});
GEOMETRYCOLLECTION (POINT (10 10), LINESTRING (20 20, 30 30))Z / M 坐标支持
geometryToWKT({
type: 'Point',
coordinates: [10, 10, 5]
});
// "POINT (10 10 5)"
geometryToWKT({
type: 'Point',
coordinates: [10, 10, 5, 7]
});
// "POINT (10 10 5 7)"推荐测试用例
const cases = [
{
type: 'Point',
coordinates: [10, 10]
},
{
type: 'MultiPoint',
coordinates: [[10, 10], [20, 20]]
},
{
type: 'LineString',
coordinates: [[10, 10], [20, 20]]
},
{
type: 'Polygon',
coordinates: [[[0, 0], [10, 0], [10, 10], [0, 0]]]
},
{
type: 'GeometryCollection',
geometries: [
{ type: 'Point', coordinates: [1, 1] },
{ type: 'LineString', coordinates: [[0, 0], [1, 1]] }
]
}
];
cases.forEach(geojson => {
expect(() => toWKT(geojson as any)).not.toThrow();
});注意事项
- 输出格式遵循数据库标准:
TYPE (x y, ...) - 不自动添加
SRID - 不修改原始坐标维度与顺序
Feature.properties不参与转换
