- 浏览: 7343391 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
GIS的学习(二十)基于Geoserver的WFS服务与Openlayers实现地理查询
基于Geoserver发布的wfs服务,与Openlayers结合实现空间和属性信息的查询。wfs包含getFeature操作,用来检索要素信息,支持返回gml格式的地理要素表达。
WFS的getFeature操作需要提供的参数:
参数名称 |
是否必须 |
默认值 |
举例 |
含义 |
VERSION |
是 |
1.1.0 |
version=1.1.0或version=1.0.0 |
版本号 |
SERVICE |
是 |
WFS |
WFS |
服务名称 |
REQUEST=GetFeature |
是 |
|
|
请求操作(固定值) |
TYPENAME |
是 |
text/xml; subtype=gml/3.1.1 |
typeName=bj.xzqy typeName=bj.xzqy, bj:sqdw_font_point |
图层名称(命名空间.图层名称),多个图层名称用逗号隔开 |
OUTPUTFORMAT |
|
|
outputFormat=GML2 |
输出类型 |
BBOX |
|
|
BBOX=-75.102613,40.212597,-72.361859,41.512517,EPSG:4326 |
矩形范围(左下角X坐标,左下角Y坐标,右上角X坐标,右上角Y坐标,EPSG:4326) |
FILTER |
|
|
FILTER=<Filter><Within><PropertyName>InWaterA_1M/wkbGeom<PropertyName> <gml:Envelope><gml:lowerCorner>10,10</gml:lowerCorner> <gml:upperCorner>20 20</gml:upperCorner></gml:Envelope></Within></Filter> |
过滤条件,gml格式定义空间范围,可包含属性条件。Filter是一种符合OGC规范的语言,一种XML实现的语言。SLD用它来实现复杂的Rule选择。WFS在所有需要定位操作对象的地方都会使用Filter。Filter的作用是构建一个表达式,返回值就是Feature的集合。 |
SORTBY |
|
|
|
排序字段 |
MAXFEATURES |
|
|
|
最多返回结果个数 |
PROPERTYNAME |
|
|
propertyName=STATE_NAME,PERSONS |
字段名称,逗号隔开 |
SRSNAME |
|
|
|
投影方式名称 |
FEATUREID |
|
|
FEATUREID=states.3 |
ID号(图层名称.ID号),多个用逗号隔开 |
EXPIRY |
|
|
|
排除 |
RESULTTYPE |
|
|
|
|
FEATUREVERSION |
|
|
|
|
举例:
FILTER详解:Filter是一种基于XML的并且符合OGC规范的语言。SLD用它来实现复杂的Rule选择。WFS在所有需要定位操作对象的地方都会使用Filter。Filter的作用是构建一个表达式,返回值就是Feature的集合,换句话说Filter就如他的名字一般为我们从一个集合中过滤出一个满足我们要求的子集。而过滤的方法就是Filter定义的操作符。Filter定义了三种操作符:地理操作符(Spatial operators),比较操作符(Comparison operators)和逻辑操作符(Logical operators)。
u Spatial operators定义了地理属性的操作方式,他们有:Equals,Disjoint,Touches,Within,Overlaps,Crosses,Intersects,Contains,DWithin,Beyond,BBOX。
名称 |
含义 |
举例 |
Equals |
等于 |
|
Disjoint |
不相交 |
|
Intersects |
相交(存在交集) |
|
Touches |
|
|
Within |
在..内部 |
|
DWithin |
在…外部 |
|
Overlaps |
叠加 |
|
Crosses |
通过 |
|
Contains |
包含 |
|
Beyond |
|
|
BBOX |
矩形范围 |
|
u Comparison operators定义了标量属性的操作方式,他们有:PropertyIsEqualTo,PropertyIsNotEqualTo,PropertyIsLessThan,PropertyIsGreaterThan,PropertyIsLessThanOrEq,PropertyIsGreaterThanO,PropertyIsLike,PropertyIsNull,PropertyIsBetween。
名称 |
含义 |
举例 |
PropertyIsEqualTo |
== |
|
PropertyIsNotEqualTo |
!= |
|
PropertyIsLessThan |
< |
|
PropertyIsGreaterThan |
> |
|
PropertyIsLessThanOrEq |
<= |
|
PropertyIsGreaterThanO |
>= |
|
PropertyIsLike |
利用通配符等符号对字符进行模糊匹配 |
<Filter> <PropertyIsLike wildCard="*" singleChar="#" escapeChar="!"> <PropertyName>LAST_NAME</PropertyName> <Literal>JOHN*</Literal> </PropertyIsLike> </Filter> |
PropertyIsNull |
为空 |
|
PropertyIsBetween |
在…之间 |
|
u Logical operators逻辑操作符,定义了组合这些操作的方式,他们有:And,Or,Not。
举例:构建一个表达式,人口在一千万以上,并且在指定的空间范围内的城市。
<Filter>
<And>
<PropertyIsGreaterThan>
<PropertyName>population</PropertyName>
<Literal>10000000</Literal>
</PropertyIsGreaterThan>
<BBOX>
<PropertyName>geom</PropertyName>
<Envelope srsName="EPSG:4326">
<lowerCorner>-180 -90</lowerCorner>
<upperCorner>180 90</upperCorner>
</Envelope>
</BBOX>
</And>
</Filter>
验证实例:之前走了一些弯路,自己构建Filter的xml编码,后来发现OpenLayers已经写好了Filter过滤条件和转成xml的类,这样Filter标签里的内容不用逐个编写了。
1. 拓扑查询(点与面相交- Intersects)
查询条件设置如下:
var XML;
XML = '<?xml version="1.1.0" encoding="UTF-8"?>' + "/n";
XML = '<wfs:GetFeature service="WFS" version="1.0.0" outputFormat="GML2"' + "/n";
XML += ' xmlns:topp="http://www.openplans.org/topp"' + "/n";
XML += ' xmlns:wfs="http://www.opengis.net/wfs"' + "/n";
XML += ' xmlns:ogc="http://www.opengis.net/ogc"' + "/n";
XML += ' xmlns:gml="http://www.opengis.net/gml"' + "/n";
XML += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' + "/n";
XML += ' xsi:schemaLocation="http://www.opengis.net/wfs' + "/n";
XML += ' http://schemas.opengis.net/wfs/1.1.0/WFS-basic.xsd">' + "/n";
//上面是查询用的gml的前缀
XML += '<wfs:Query typeName="bj:xzqy">' + "/n";
XML += '<wfs:PropertyName>bj:ENTITY_ID</wfs:PropertyName>' + '/n';
XML += '<wfs:PropertyName>bj:the_geom</wfs:PropertyName>' + '/n';
XML += '<ogc:Filter>' + "/n";
XML += '<ogc:Intersects>' + "/n";
XML += '<ogc:PropertyName>bj:the_geom</ogc:PropertyName>' + "/n";
XML += ' <gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">' + "/n";
XML += '<gml:coordinates>116.817265,40.5296504</gml:coordinates>' + "/n";
XML += '</gml:Point>' + "/n";
XML += '</ogc:Intersects>' + "/n";
XML += '</ogc:Filter>' + "/n";
XML += '</wfs:Query>' + "/n";
XML += '</wfs:GetFeature>';
var xmlPara = XML; //返回结果无法解析为gml??-已解决(增加返回结果样式标签)
var request = OpenLayers.Request.POST({
url: "http://localhost:8080/geoserver/wfs?",
data: xmlPara,
callback: onComplete
});
查询结果展示:地图上深色的部分为根据坐标点与行政区域面相交分析出的结果
2. 拓扑查询(面与面相交- Intersects)
查询条件设置:
var XML;
XML = '<?xml version="1.1.0" encoding="UTF-8"?>' + "/n";
XML = '<wfs:GetFeature service="WFS" version="1.0.0" outputFormat="GML2"' + "/n";
XML += ' xmlns:topp="http://www.openplans.org/topp"' + "/n";
XML += ' xmlns:wfs="http://www.opengis.net/wfs"' + "/n";
XML += ' xmlns:ogc="http://www.opengis.net/ogc"' + "/n";
XML += ' xmlns:gml="http://www.opengis.net/gml"' + "/n";
XML += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' + "/n";
XML += ' xsi:schemaLocation="http://www.opengis.net/wfs' + "/n";
XML += ' http://schemas.opengis.net/wfs/1.1.0/WFS-basic.xsd">' + "/n";
//上面是查询用的gml的前缀
XML += '<wfs:Query typeName="bj:xzqy">' + "/n";
XML += '<wfs:PropertyName>bj:ENTITY_ID</wfs:PropertyName>' + '/n';
XML += '<wfs:PropertyName>bj:the_geom</wfs:PropertyName>' + '/n';
XML += '<ogc:Filter>' + "/n";
XML += '<ogc:Intersects>' + "/n";
XML += '<ogc:PropertyName>bj:the_geom</ogc:PropertyName>' + "/n";
XML += '<gml:Polygon srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">' + "/n";
XML += '<gml:outerBoundaryIs>' + "/n";
XML += '<gml:LinearRing>' + "/n";
XML += '<gml:coordinates>115.40316,39.425701 116.40316,39.425701 116.40316,40.245 115.40316,40.245 115.40316,39.425701</gml:coordinates>' + "/n"; //0,0 100,0 100,100 0,100 0,0
XML += '</gml:LinearRing>' + "/n";
XML += '</gml:outerBoundaryIs>' + "/n";
XML += '</gml:Polygon>' + "/n";
XML += '</ogc:Intersects>' + "/n";
XML += '</ogc:Filter>' + "/n";
XML += '</wfs:Query>' + "/n";
XML += '</wfs:GetFeature>';
var xmlPara = XML; //返回结果无法解析为gml??-已解决(增加返回结果样式标签)
var request = OpenLayers.Request.POST({
url: "http://localhost:8080/geoserver/wfs?",
data: xmlPara,
callback: onComplete
});
查询结果展现:地图上深色的部分为查询到的行政辖区面要素
3. 拓扑查询(面与面包含- Contains)
使用Openlayers提供的方法构造过滤条件
1. 拓扑查询(空间相交与属性过滤)
查找指定空间范围(传入Geometry类型参数)内NAME字段以“幼儿园”结尾的要素。
或者NAME字段的值为“西罗园第三幼儿园”的要素。
或者OBJECTID字段的值的范围是从0到1000。
//验证利用Filter构建过滤条件
function conformationFilter(geo) {
var filter_1_0 = new OpenLayers.Format.Filter.v1_0_0();
//也可以使用1.1版本构造过滤条件
//var filter_1_1 = new OpenLayers.Filter({ version: "1.1.0" });
var xml = new OpenLayers.Format.XML(); //构造xml格式的文件
var filter = new OpenLayers.Filter.Logical({//逻辑操作符
type: OpenLayers.Filter.Logical.AND, //并且更改为或者
filters: [
new OpenLayers.Filter.Spatial({
type: OpenLayers.Filter.Spatial.INTERSECTS, //INTERSECTS, //相交OK
value: geo,
projection: "EPSG:4326"
}),
//BBOX方式OK
// new OpenLayers.Filter.Spatial({
// type: OpenLayers.Filter.Spatial.BBOX,
// value: new OpenLayers.Bounds(115.40316, 39.425701, 116.40316, 40.245),
// projection: "EPSG:4326"
// }),
new OpenLayers.Filter.Comparison({//比较操作符
type: OpenLayers.Filter.Comparison.LIKE, //模糊查询(通配符:*/#/!),速度很慢
property: "bj:NAME",
value: "*幼儿园"
}),
new OpenLayers.Filter.Comparison({//比较操作符
type: OpenLayers.Filter.Comparison.EQUAL_TO, //精确查询
property: "bj:NAME",
value: "西罗园第三幼儿园"
}),
new OpenLayers.Filter.Comparison({//比较操作符
type: OpenLayers.Filter.Comparison.BETWEEN, //在。。。之间(数值型)
property: "bj:OBJECTID",
lowerBoundary: 0,
upperBoundary: 1000
})
]
});
//构造指定格式的xml
return result = xml.write(filter_1_0.write(filter));
};
展示结果:
返回结果的高亮显示和属性信息展示:
//AJAX请求结果处理函数(添加标注+属性列表)
function onComplete(req) {
//openlayers的GML解析器
var gmlParse = new OpenLayers.Format.GML();//如果使用wfs1.1.0,则需要增加如下参数:{xy:false }//更改x,y坐标的读取顺序
var features = gmlParse.read(req.responseText);
var icon = new OpenLayers.Icon("img/marker-blue.png");
var feature, lonlat, marker;
var attributes = [];
//高亮显示
for (var feat in features) {
feature = features[feat];
//高亮显示
switch (feature.geometry.CLASS_NAME) {
case "OpenLayers.Geometry.MultiPolygon":
{
var polygon = feature.geometry.components[0].clone();
var vec = new OpenLayers.Feature.Vector(polygon);
temVectorLayer.addFeatures([vec]);
}
break;
case "OpenLayers.Geometry.Point":
{
//经度纬度是相反的,所以需要重新构建
var pt = feature.geometry.clone();
var vec = new OpenLayers.Feature.Vector(pt);
temVectorLayer.addFeatures([vec]);
}
break;
}
attributes.push(feature.attributes);
}
var strAttributes = "";
if (!document.all("attr")) return;
if (document.all("attr").firstChild) {
document.all("attr").firstChild.removeNode(true);
}
for (var key in attributes) {
var attr = attributes[key];
strAttributes += "[";
var trHead = document.all("attr").insertRow();
var tdHead = trHead.insertCell();
tdHead.innerText = "编号:" + key;
for (var k in attr) {
var tr = document.all("attr").insertRow();
var td0 = tr.insertCell();
td0.innerText = k;
var td1 = tr.insertCell();
td1.innerText = attr[k];
strAttributes += k + ":" + attr[k];
}
strAttributes += "]";
};
alert(strAttributes);
};
http://www.someserver.com/wfs?SERVICE=WFS& VERSION=1.1.0& REQUEST=GetFeature& PROPERTYNAME=InWaterA_1M/wkbGeom,InWaterA_1M/tileId& TYPENAME=InWaterA_1M& FILTER=<Filter><Within><PropertyName>InWaterA_1M/wkbGeom<PropertyName> <gml:Envelope><gml:lowerCorner>10,10</gml:lowerCorner> <gml:upperCorner>20 20</gml:upperCorner></gml:Envelope></Within></Filter> |
发表评论
-
TestNG简单的学习(十三)TestNG中Junit的实现
2013-12-04 09:00 3357TestNG和junit的整合 ... -
TestNG简单的学习(十二)TestNG运行
2013-12-03 09:08 51597文档来自官方地址: ... -
TestNG简单的学习(十一)TestNG学习总结
2013-12-03 09:08 14208最近一直在学习关于TestNG方面的知识,根 ... -
TestNG简单的学习(十)TestNG @Listeners 的使用
2013-12-03 09:07 8698TestNG官方网站: http://testng.or ... -
TestNG简单的学习(九)TestNG Method Interceptors 的使用
2013-12-03 09:07 2717TestNG官方网站: http://testng ... -
TestNG简单的学习(八)TestNG Annotation Transformers 的使用
2013-12-03 09:07 2815TestNG官方网站: http://testng.or ... -
TestNG简单的学习(七)TestNG编程方式运行
2013-12-02 09:22 2459TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2791TestNG官方网站: http://testng.or ... -
TestNG简单的学习(五)参数化测试数据的定制
2013-12-02 09:22 2705TestNG官方网站: http://testng.or ... -
TestNG简单的学习(四)测试方法通过名称名称依赖实现
2013-12-02 09:21 2085TestNG官方网站: http://testng.or ... -
TestNG简单的学习(三)测试方法通过测试分组依赖实现
2013-12-02 09:21 2835TestNG官方网站: http://testng.or ... -
TestNG简单的学习(二)参数化测试并发且多方法测试方法判定
2013-11-29 15:35 3705TestNG官方网站: http://testng.or ... -
TestNG简单的学习(一)类和方法级别@Test的区别
2013-11-29 15:31 9428TestNG官方文档的地址: http://testng ... -
Feed4Junit的简单使用(七)Feed4TestNg
2013-11-29 13:35 6135在Feed4Junit主要针对junit实现的 ... -
Feed4Junit的简单使用(六)数据来特定格式文件
2013-11-29 12:29 2769Feed4Junit官方地址: http://da ... -
Feed4Junit的简单使用(五)数据来自动态约束数据
2013-11-29 12:29 2633Feed4Junit官方地址: http://datab ... -
Feed4Junit的简单使用(四)数据来自定义数据源
2013-11-28 14:09 3107Feed4Junit官方地址: http://databe ... -
Feed4Junit的简单使用(三)数据源来自数据库
2013-11-28 13:58 3171Feed4Junit官方地址: http://databe ... -
Feed4Junit的简单使用(二)数据源来自文件
2013-11-28 13:50 4573Feed4Junit官方地址: http://datab ... -
Feed4Junit的简单使用(一)
2013-11-28 13:47 2218Feed4Junit官方地址: http://databe ...
相关推荐
在GIS(地理信息系统)领域,GeoServer是一款开源的、基于Java的服务器软件,它能够发布和操作地理空间数据。WFS(Web Feature Service)是OGC(Open Geospatial Consortium)制定的一种标准接口,用于在网络上交换...
OpenLayers是一个JavaScript库,用于在Web浏览器中显示地图,而GeoServer则是一个基于Java的服务,它允许用户发布、管理和操作地理空间数据。本资源主要针对初级学习者,介绍如何使用OpenLayers对GeoServer图层进行...
GeoServer是一个基于Java的Web服务,用于发布和管理地理空间数据,而OpenLayers则是一个JavaScript库,用于在Web浏览器中创建交互式地图应用。 GeoServer的核心功能是作为Web服务提供地理信息,它支持多种开放标准...
GeoServer 是一个开源的、基于 Java 的地理信息服务器,它可以读取多种GIS数据格式,并通过WMS(Web Map Service)、WFS(Web Feature Service)等OGC(开放地理空间联盟)标准进行数据发布。在本项目中,GeoServer...
同时,还会涵盖OpenLayers与GeoServer的协同工作,通过WMS和WFS请求获取和编辑地理数据。 **3. WebGIS基础** 在深入讲解Geoserver和OpenLayers之前,资料可能首先会介绍WebGIS的基本概念,包括地理坐标系统、投影...
GeoServer是一款开源的GIS服务器,它支持WFS服务,使得用户能够通过HTTP协议进行地理数据的查询、添加、修改和删除。WFS通常与Web Map Service (WMS) 配合使用,WMS负责渲染地图图像,而WFS则处理地理数据的交换。 ...
通过与GeoServer的WFS服务配合,这些点还可以存储回服务器,形成新的地理空间数据。 b. 点击地图街道选中要素:这个功能依赖于OpenLayers的“getFeatureIdAtPixel”方法。当用户点击地图时,这个方法可以确定鼠标...
【描述】提到的"geoserver+openlayers 地图专题图"是指使用开源的GIS服务器Geoserver和JavaScript库OpenLayers共同实现的地图服务。Geoserver是一款基于Java的Web服务,用于发布、管理和共享地理空间数据。它支持...
6. **客户端应用**:最后,我们可以在WebGIS客户端(如OpenLayers、Leaflet等)中调用GeoServer的WMS服务,动态请求不同规则的专题图层,以实现地图的交互和更新。 在实际应用中,GeoServer还可以与GeoWebCache结合...
GeoServer是一款开源的GIS(地理信息系统)服务器,它基于Java技术构建,并遵循GNU General Public License。作为GIS领域的重要工具,GeoServer提供了丰富的功能,用于发布、管理和共享地理空间数据。这款服务器是...
这个程序示例展示了如何结合OpenLayers和GeoServer实现地图图层的编辑功能,这在GIS(地理信息系统)开发中是非常常见的需求。GeoServer是一个开源的GIS服务器,能够发布地图数据并提供WFS(Web Feature Service)等...
在本压缩包中,我们关注的是一个基础的WebGIS(Web地理信息系统)应用程序,它主要依赖于OpenLayers库,同时与GeoServer和PostGIS数据库进行交互。这些技术都是GIS领域中非常重要的组成部分,用于构建可在线访问的...
### Geoserver与OpenLayers配置知识点详解 #### 一、基础知识概述 **Geoserver**是一种开源的服务器解决方案,用于发布地理数据,并提供强大的功能来处理、管理和分发空间信息。它支持多种开放地理信息系统(OGC)...
《Geoserver与OpenLayers配置详解》 在GIS(地理信息系统)领域,Geoserver和OpenLayers是两个非常重要的开源工具。...记住,不断学习和实践是掌握Geoserver与OpenLayers的关键,这将使你在GIS开发领域更加游刃有余。
GeoServer是一款基于Java的开源地理空间服务器,它能够发布和操作地理空间数据,而OpenLayers则是一个用于创建交互式地图的JavaScript库。这两者的结合,使得Web GIS应用的开发变得更加简单和高效。 GeoServer的...
【Geoserver与OpenLayers配置入门】是一篇指导初学者如何搭建和配置地理信息系统环境的教程,主要涉及两个核心组件:Geoserver和OpenLayers。本文将详细介绍这两个工具的使用和配置过程。 **Geoserver** 是一个开源...
总结起来,GeoServer OGC服务文档是开发者进行地图服务二次开发的重要参考资料,它详细阐述了各种服务接口的参数、用法和示例,为构建基于地理信息的Web应用提供了有力的支持。开发者可以根据需求选择合适的服务,并...
Geoserver是一款基于Java的开源GIS服务器,它可以发布和管理地理空间数据,并支持多种标准如WMS(Web Map Service)和WFS(Web Feature Service)。在本项目中,uDig定制的地图样式将被发布到Geoserver上。发布过程...
在现代地理信息系统(GIS)领域,GeoServer、PostGIS和OpenLayers是构建基于Web的地理信息应用的重要组件。GeoServer是一款开源的地理信息服务器,实现了OpenGIS标准,能够提供Web Feature Service (WFS) 和Web Map ...