背景
因为在业务中有一些关于地图数据使用的场景,因为也使用了 wictet 这个库。但是在使用过程可参考文档较少,中文文档更是没有,导致不能完全掌握其打开方式。所以抽空扒了一下源码,并且也实际跑了测试代码验证后总结了如下内容。
在有WKT数据、GeoJSON数据以及地图引擎数据等场景数据转换中可以方便使用
一句话介绍
Wicket 是一个轻量级库,用于在WKT和各种矢量地图数据之间转换。
安装
npm install wicket
特性
1、read
作用:读取WKT字符串,进行验证并且获得解析数据。可读取类型为 WKT
和 GeoJSON
。
入参:
参数 | 类型 | 是否必须 | 说明 |
str | String | 是 |
出参:
参数 | 类型 | 说明 |
obj | wkt实例对象 | { type: "", components: [], delimiter: "" } |
示例:
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); // Read in any kind of WKT string wkt.read("POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))"); // output: polygon console.log(wkt.type) // output: "(30 10, 10 20, 20 40, 40 40, 30 10)" console.log(wkt.base) // output: [ [ {x: 30, y: 10}, {x: 10, y: 30}, ...] ] console.log(wkt.components)
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); // Read a GeoJSON string wkt.read('{"coordinates": [[[30, 10], [10, 20], [20, 40], [40, 40], [30, 10]]], "type": "Polygon"}'); // output: polygon console.log(wkt.type) // output: [ [ {x: 30, y: 10}, {x: 10, y: 30}, ...] ] console.log(wkt.components)
2、write
作用:写入WKT串,可与 read
等方法结合使用。
入参:
参数 | 类型 | 是否必须 | 说明 |
components | Array | 否 | 当与 |
出参:
参数 | 类型 | 说明 |
str | String | POLYGON((30 10,10 20,20 40,40 40,30 10)) |
示例:
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); // Read in any kind of WKT string wkt.read("POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))"); // merge wkt.merge(new Wkt.Wkt('POLYGON((35 15,15 25,25 45,45 45,35 15))')); // output: MULTIPOLYGON(((30 10,10 20,20 40,40 40,30 10)),((35 15,15 25,25 45,45 45,35 15))) wkt.write();
3、merge
作用:接受另一个WKT串,与自己合并,创建并返回一个MULTI-geometry
集合。主要是用于两个同类型WKT合并,或者向MULTIPOLYGON
中添加POLYGON
。
入参:
参数 | 类型 | 是否必须 | 说明 |
wkt | Wkt.Wkt object | 是 |
出参:
参数 | 类型 | 说明 |
obj | Object | 可通过wkt.write()或wkt.toString()获取WKT结果 |
示例:
import Wkt from 'wicket';
const wkt = new Wkt.Wkt();
// Read in any kind of WKT string
wkt.read("POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))");
wkt.merge(new Wkt.Wkt('POLYGON((35 15,15 25,25 45,45 45,35 15))'));
// output: MULTIPOLYGON(((30 10,10 20,20 40,40 40,30 10)),((35 15,15 25,25 45,45 45,35 15)))
console.log(wkt.toString());
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); // Read in any kind of WKT string wkt.read('MULTIPOLYGON(((30 10,10 20,20 40,40 40,30 10)),((35 15,15 25,25 45,45 45,35 15)))'); wkt.merge(new Wkt.Wkt('POLYGON((25 15,5 15,15 35,35 35,25 15))')); // output: MULTIPOLYGON(((30 10,10 20,20 40,40 40,30 10)),((35 15,15 25,25 45,45 45,35 15)),((25 15,5 15,15 35,35 35,25 15))) console.log(wkt.toString());
4、sameCoords
作用:比较两个x、y坐标是否相等。
入参:
参数 | 类型 | 是否必须 | 说明 |
a | Object({ x,y }) | 是 | |
b | Object({ x,y }) | 是 |
出参:
参数 | 类型 | 说明 |
bool | Boolean |
示例:
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); const bool = wkt.sameCoords({ x:30, y: 10 }, { x:30, y: 10 }); // output: true console.log(bool);
5、fromObject
依赖于框架的构造方法对象,用于生成适配框架且一致的各种几何类的对象。也就是在WKT和给定框架的特性之间转换(框架一般指各种地图引擎,例如gmap
、arcgis
、leaflet
、高德amap
,几何类对象包括 point、multipoint、linestring、multilinestring、box、polygon、multipolygon等)。使用前必须先引入对应框架扩展或者重新定义wicket原型方法deconstruct
。
作用:将外部框架的几何数据对象,转化为WKT。
入参:
参数 | 类型 | 是否必须 | 说明 |
obj | Object | 是 | geometry 数据,数据包含 |
出参:
参数 | 类型 | 说明 |
obj | any |
示例:
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); // Deconstruct an existing point feature e.g. google.maps.Marker instance wkt.fromObject(somePointObject); // output: POINT(100 0) console.log(wkt.toString());
6、toObject
赖于框架的构造方法对象,用于生成适配框架且一致的各种几何类的对象。也就是在WKT和给定框架的特性之间转换(框架一般指各种地图引擎,例如gmap
、arcgis
、leaflet
、高德amap
,几何类对象包括 point、multipoint、linestring、multilinestring、box、polygon、multipolygon等)。使用前必须先引入对应框架扩展或者重新定义wicket原型方法deconstruct
。
作用:与 fronObject
使用类似,作用相反。创建一个外部框架的几何数据对象,将WKT进行映射。
入参:
参数 | 类型 | 是否必须 | 说明 |
config | Object | 否 | 数据处理时可传入自定义参数 |
出参:
参数 | 类型 | 说明 |
obj | Object | 可通过wkt.write()或wkt.toString()获取WKT结果 |
示例:
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); // Read in any kind of WKT string wkt.read("POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))"); // outputs an object console.log(wkt.toObject());
7、toString
作用:返回WKT串,与 write()
方法返回结果一致。
8、fromJson
作用:解析 json 并转化为WKT
入参:
参数 | 类型 | 是否必须 | 说明 |
obj | Object | 是 | geometry 数据,数据包含 |
出参:
参数 | 类型 | 说明 |
obj | Object | 可通过wkt.write()或wkt.toString()获取WKT结果 |
示例:
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); wkt.fromJson({ "type": "Point", "coordinates": [100.0, 0.0] }); // output: POINT(100 0) console.log(wkt.toString());
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); wkt.fromJson( { "type": "Feature", "bbox": [-180.0, -90.0, 180.0, 90.0], "geometry": { "type": "Polygon", "coordinates": [[ [-180.0, 10.0], [20.0, 90.0], [180.0, -5.0], [-30.0, -90.0] ]] } } ); // output: POLYGON((-180 10,20 90,180 -5,-30 -90)) console.log(wkt.toString());
9、toJson
作用:返回GeoJSON
格式地理数据。
入参:
无
出参:
参数 | 类型 | 说明 |
obj | Object | GeoJSON schema |
示例:
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); // Read in any kind of WKT string wkt.read("POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))"); // output: { type: 'Polygon', coordinates: [[[30, 10]], [], ...] } console.log(wkt.toJson());
10、isCollection
作用:用于判断是否为几何图形的集合(polygons、multi)
示例:
import Wkt from 'wicket'; const wkt = new Wkt.Wkt(); const bool1 = wkt.isCollection('POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))'); // output true const bool2 = wkt.isCollection('MULTIPOLYGON(((30 10,10 20,20 40,40 40,30 10)),((35 15,15 25,25 45,45 45,35 15))'); // output true const bool1 = wkt.isCollection('POINT (30, 10)'); // output true
WKT预览
输出WKT可直接在此进行查看效果
Wicket - Lightweight Javascript for WKT [Sandbox]