Leaflet WFST
2.0.0
用於傳單的 OGC WFS-T 用戶端層。
通過 npm:
npm i leaflet-wfst --save
通過鮑爾:
bower i leaflet-wfst --save
來自 GitHub:
npm i -S git://github.com/Flexberry/Leaflet-WFST.git#v1.1.1
其中 #v1.1.1 是特定發行版的版本。
options: {
crs : L . CRS . EPSG3857 ,
showExisting : true ,
geometryField : 'Shape' ,
url : '' ,
typeNS : '' ,
typeName : '' ,
opacity : 1 ,
style : {
color : 'black' ,
weight : 1
}
}
const wfstPointOptions = {
crs : L . CRS . EPSG4326 ,
showExisting : true ,
geometryField : 'geom' ,
url : `http://localhost:8080/geoserver/wfs` ,
typeNS : 'test' ,
typeName : 'test' ,
maxFeatures : 90 ,
opacity : 1 ,
style : function ( layer ) {
// you can use if statemt etc
return {
color : 'black' ,
weight : 1
}
} ,
} ;
const wfstPoint = new L . WFST ( wfstPointOptions , new L . Format . GeoJSON ( {
crs : L . CRS . EPSG4326 ,
pointToLayer ( geoJsonPoint , latlng ) {
const layer = new L . CircleMarker ( latlng , {
radius : 10 ,
} ) ;
return layer ;
} ,
} ) ) ;
wfstPoint . addTo ( map ) ;
選項名稱 | 預設 | 評論 |
---|---|---|
crs | L.CRS.EPSG3857 | 圖層的空間參考系統,應實現 ICRS,例如 Proj4Leaflet |
顯示現有的 | 真的 | 在建立層上載入現有功能 |
幾何場 | '形狀' | 用於儲存幾何圖形的字段,對於非事務服務可以省略 |
網址 | - | WFS url,例如 http://demo.opengeo.org/geoserver/osm/ows |
NS型 | - | 類型命名空間 |
類型名稱 | - | 類型名稱 |
類型NS名稱 | - | 類型命名空間名稱 |
命名空間Uri | - | 命名空間URI |
不透明度 | 1 | 圖層的不透明度 |
風格 | - | 傳單向量風格。函數或物件 |
篩選 | - | 任何過濾器。請參閱過濾器 |
最大特徵 | - | 限制回傳的特徵數量 |
var map = L . map ( 'map' ) . setView ( [ 0 , 0 ] , 2 ) ;
var boundaries = new L . WFS ( {
url : 'http://demo.opengeo.org/geoserver/ows' ,
typeNS : 'topp' ,
typeName : 'tasmania_state_boundaries' ,
crs : L . CRS . EPSG4326 ,
style : {
color : 'blue' ,
weight : 2
}
} ) . addTo ( map )
. on ( 'load' , function ( ) {
map . fitBounds ( boundaries ) ;
} )
使用 toGml(crs) 函數擴展傳單類別:
觸發兩種類型的事件:
標記幾何體寫入 posNode,所有其他層幾何體寫入 posList
OGC Filter Encoding v1.1.0 的實現
過濾器實作僅傳回過濾器元素的內部內容。
所有濾波器建構函數的一些注意事項:
姓名 | 建構函數 |
---|---|
ID | |
Gml對象ID | L.Filter.GmlObjectId(值id) |
比較 | |
屬性等於 | L.Filter.EQ(屬性表達式第一個參數,文字表達式第二個參數,布林 matchCase) |
屬性不等於 | L.Filter.NotEQ(屬性表達式第一個參數,文字表達式第二個參數,布林 matchCase) |
財產小於 | L.Filter.LT(屬性表達式第一個參數,文字表達式第二個參數,布林 matchCase) |
財產大於 | L.Filter.GT(屬性表達式第一個參數,文字表達式第二個參數,布林 matchCase) |
屬性小於或等於 | L.Filter.LEQ(屬性表達式第一個參數,文字表達式第二個參數,布林 matchCase) |
屬性大於或等於 | L.Filter.GEQ(屬性表達式第一個參數,文字表達式第二個參數,布林 matchCase) |
財產就像 | L.Filter.Like(字串屬性名稱,字串like表達式,物件屬性) |
屬性為空 | L.Filter.IsNull(字串屬性名稱) |
屬性介於之間 | L.Filter.IsBetween(屬性表達式firstArgument,文字表達式下邊界,文字表達式上邊界) |
營運商 | |
添加 | L.Filter.Add(表達式, 表達式) |
子 | L.Filter.Sub(表達式, 表達式) |
穆爾 | L.Filter.Mul(表達式, 表達式) |
分割區 | L.Filter.Div(表達式, 表達式) |
邏輯 | |
和 | L.Filter.And(表達式[, 表達式]*) |
或者 | L.Filter.Or(表達式[, 表達式]*) |
不是 | L.Filter.Not(表達式) |
空間 | |
盒子 | L.Filter.BBox(字串屬性名稱, latLngBounds 邊界, ICRS crs) |
等於 | L.Filter.Equals(字串屬性名稱,圖層幾何形狀,ICRS crs) |
不相交 | L.Filter.Disjoint(字串屬性名稱,圖層幾何形狀,ICRS crs) |
觸摸 | L.Filter.Touches(字串屬性名稱,圖層幾何形狀,ICRS crs) |
之內 | L.Filter.Within(字串屬性名稱,圖層幾何形狀,ICRS crs) |
重疊 | L.Filter.Overlaps(字串屬性名稱,圖層幾何形狀,ICRS crs) |
十字架 | L.Filter.Crosses(字串屬性名稱,圖層幾何形狀,ICRS crs) |
相交 | L.Filter.Intersects(字串屬性名稱,圖層幾何圖形,ICRS crs) |
包含 | L.Filter.Contains(字串屬性名稱,圖層幾何形狀,ICRS crs) |
空間距離緩衝區 | |
D內 | L.Filter.DWithin(字串屬性名稱、圖層幾何形狀、ICRS crs、值距離、字串單位) |
超過 | L.Filter.Beyond(字串屬性名稱,圖層幾何形狀,ICRS crs,值距離,字串單位) |
其他 | |
功能 | L.Filter.Function(字串函數名[,表達式]*) |
屬性名稱 | L.Filter.propertyName(字串名稱) |
文字 | L.Filter.literal(值) |
PropertyName和Literal是函數,直接回傳Gml。
標準中有兩個過濾器 - GmlObjectID 和 FeatureID,但最新的過濾器被標記為已棄用,因此未實現。
例子:
var filter = new L . Filter . GmlObjectID ( 1 ) ;
結果XML:
< ogc : Filter xmlns : ogc = " http://www.opengis.net/ogc " >
< ogc : GmlObjectId xmlns : gml = " http://www.opengis.net/gml " gml : id = " 1 " />
</ ogc : Filter >
var filter = new L . Filter . EQ ( 'city' , 'Perm' ) ;
filter . toGml ( )
結果XML:
< ogc : PropertyIsEqualTo >
< ogc : PropertyName >city</ ogc : PropertyName >
< ogc : Literal >Perm</ ogc : Literal >
</ ogc : PropertyIsEqualTo >
此過濾器接受可選屬性物件:
attributes: {
wildCard : '*' ,
singleChar : '#' ,
escapeChar : '!' ,
matchCase : true
}
var filter = new L . Filter . Like ( 'city' , '*perm*' , { matchCase : false } ) ;
filter . toGml ( )
結果XML:
< ogc : ogc:PropertyIsLike wildCard = " * " singleChar = " # " escapeChar = " ! " matchCase = " false " >
< ogc : PropertyName >city</ ogc : PropertyName >
< ogc : Literal >*perm*</ ogc : Literal >
</ ogc : ogc:PropertyIsLike >
例子:
var filter = new L . Filter . BBox ( 'ogr_geometry' , L . latLngBounds ( L . latLng ( 40.712 , - 74.227 ) , L . latLng ( 40.774 , - 74.125 ) ) , L . CRS . EPSG4326 ) ;
filter . toGml ( )
結果XML:
< ogc : Filter xmlns : ogc = " http://www.opengis.net/ogc " >
< ogc : BBOX >
< ogc : PropertyName >ogr_geometry</ ogc : PropertyName >
< gml : Envelope xmlns : gml = " http://www.opengis.net/gml " srsName = " EPSG:4326 " >
< gml : lowerCorner >-74.227 40.712</ gml : lowerCorner >
< gml : upperCorner >-74.125 40.774</ gml : upperCorner >
</ gml : Envelope >
</ ogc : BBOX >
</ ogc : Filter >
例子:
var filter = new L . Filter . Intersects ( 'ogr_geometry' , L . polygon ( [ L . latLng ( 40.712 , - 74.227 ) , L . latLng ( 40.774 , - 74.125 ) , L . latLng ( 40.734 , - 74.175 ) ] ) , L . CRS . EPSG4326 ) ;
filter . toGml ( ) ;
結果XML:
< ogc : Filter xmlns : ogc = " http://www.opengis.net/ogc " >
< ogc : Intersects >
< ogc : PropertyName >ogr_geometry</ ogc : PropertyName >
< gml : Polygon xmlns : gml = " http://www.opengis.net/gml " srsName = " EPSG:4326 " srsDimension = " 2 " >
< gml : exterior >
< gml : LinearRing srsDimension = " 2 " >
< gml : posList >-74.227 40.712 -74.125 40.774 -74.175 40.734 -74.227 40.712</ gml : posList >
</ gml : LinearRing >
</ gml : exterior >
</ gml : Polygon >
</ ogc : Intersects >
</ ogc : Filter >
編輯外掛 - Leaflet.Editable
L . WFST . include ( MultiEditableMixin ) ;
var wfst = new L . WFST ( {
url : 'http://myserver/geoserver/ows' ,
typeNS : 'myns' ,
typeName : 'POIPOINT' ,
style : {
color : 'blue' ,
weight : 2
}
} ) . addTo ( map ) . once ( 'load' , function ( ) {
map . fitBounds ( wfst ) ;
wfst . enableEdit ( ) ;
} ) ;
map . on ( 'editable:created' , function ( e ) {
wfst . addLayer ( e . layer ) ;
} ) ;
map . on ( 'editable:editing' , function ( e ) {
wfst . editLayer ( e . layer ) ;
} ) ;
使「wfs:Transaction」POST 請求呼叫 save() 方法,例如 Leaflet.EasyButton
L . easyButton ( 'fa-save' , function ( ) {
wfst . save ( ) ;
} , 'Save changes' ) ;
//simple layer
layer = new L . Marker ( [ 0 , 0 ] ) ;
layer . feature = {
id : 1 ,
properties : {
a : 'a' ,
b : 'b'
}
} ;
//get value by key 'a'
var a = layer . getProperty ( 'a' ) ;
//change values
layer . setProperties ( {
a : 'b' ,
b : 'a'
} ) ;
//add new property
layer . setProperties ( {
c : 'c'
} ) ;
//delete properties
layer . deleteProperties ( [ 'a' , 'b' , 'c' ] ) ;
GML 讀取格式的演示
GeoJSON 讀取格式演示
演示過濾器 bbox
麻省理工學院許可證