天天看點

wicket API 解讀

背景

因為在業務中有一些關于地圖資料使用的場景,因為也使用了 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 當與

read

merge

等方法結合使用時,傳回為處理後資料;當未使用任何方法時,參數為必須

出參:

參數 類型 說明
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 資料,資料包含

type

coordinates

字段

出參:

參數 類型 說明
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 資料,資料包含

type

coordinates

字段;或者 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

繼續閱讀