背景
因為在業務中有一些關于地圖資料使用的場景,因為也使用了 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 資料,資料包含 和 字段;或者 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]
參考位址
- GitHub - arthur-e/Wicket: A modest library for moving between Well-Known Text (WKT) and various framework geometries