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
麻省理工学院许可证