java查询WFS服务
在我们访问wfs服务时候,有时候会遇到前台访问时候的跨域问题。这里给出java访问的一个小例子。
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.UnsupportedEncodingException;
- import java.util.List;
- import org.apache.commons.httpclient.HttpClient;
- import org.apache.commons.httpclient.HttpException;
- import org.apache.commons.httpclient.methods.PostMethod;
- import org.apache.commons.httpclient.methods.StringRequestEntity;
- import org.apache.commons.httpclient.params.HttpMethodParams;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
- import org.dom4j.QName;
- public class WFSUtil
- {
- /**
- * 得到过滤结果。名字默认是Poi
- *
- * @param keyWords
- * @param wfsUrl
- * @return
- * @throws HttpException
- * @throws IOException
- */
- public String findPointsXmlByKeywords(String[] keyWords, String wfsUrl,
- String wfsTitle, String layerName) throws HttpException,
- IOException
- {
- if (keyWords.length==0)
- {
- return "<root/>";
- }
- if (wfsTitle == null)
- {
- wfsTitle = "ST";
- }
- if (layerName == null)
- {
- layerName = "POI";
- }
- StringBuffer buffer = new StringBuffer(
- "<?xml version='1.0' encoding='UTF-8'?>"
- + "<wfs:GetFeature maxFeatures='100' service='WFS' version='1.1.0' "
- + "xmlns:wfs='http://www.opengis.net/wfs' "
- + "xmlns:gml='http://www.opengis.net/gml' "
- + "xmlns:ogc='http://www.opengis.net/ogc' "
- + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
- + "xsi:schemaLocation='http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd'>"
- + "<wfs:Query typeName='" + layerName
- + "' srsName='EPSG:4326'>"
- + "<ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>");
- if (keyWords.length > 1)
- {
- buffer.append("<ogc:Or>");
- for (int i = 0; i < keyWords.length; i++)
- {
- buffer.append(addPropertyIsLike(keyWords[i]));
- }
- buffer.append("</ogc:Or>");
- }
- else if (keyWords.length == 1)
- {
- buffer.append(addPropertyIsLike(keyWords[0]));
- }
- else
- {
- return null;
- }
- buffer.append("</ogc:Filter></wfs:Query></wfs:GetFeature>");
- PostMethod post = new PostMethod(wfsUrl);
- post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,
- "utf-8");
- post.setRequestEntity(new StringRequestEntity(buffer.toString(),
- "application/xml", "UTF-8"));
- HttpClient httpclient = new HttpClient();
- httpclient.executeMethod(post);
- InputStream xmlis = post.getResponseBodyAsStream();
- //确定读取编码为utf-8,不设置的话会用系统默认编码,例如在tomcat容器中,就可能乱码。
- BufferedReader br = new BufferedReader(new InputStreamReader(xmlis,"utf-8"));
- String tempbf;
- StringBuffer html = new StringBuffer(100);
- while ((tempbf = br.readLine()) != null)
- {
- html.append(tempbf);
- }
- // System.out.println(html.toString());
- return formatPoint(html.toString(),keyWords[0]);
- }
- private String addPropertyIsLike(String word)
- {
- String result = "";
- if (word != null && (!word.trim().isEmpty()))
- {
- result += "<ogc:PropertyIsLike wildCard='*' singleChar='.' escape='!'><ogc:PropertyName>POI_NAME</ogc:PropertyName><ogc:Literal>*"
- + word + "*</ogc:Literal></ogc:PropertyIsLike>";
- }
- return result;
- }
- private String formatPoint(String xml,String keyWord)
- {
- try
- {
- Document doc = DocumentHelper.parseText(xml);
- Element root = doc.getRootElement();
- Element newRoot = DocumentHelper.createElement("root");
- newRoot.addAttribute("keyword", keyWord);
- List<Element> list = root.elements("featureMember");
- for (Element e : list)
- {
- Element point = newRoot.addElement("point");
- Element xs = e.element("Poi").element("X");
- Element ys = e.element("Poi").element("Y");
- if (xs != null&&ys!=null)
- {
- String text=xs.getText()+","+ys.getText();
- point.addElement("xys").setText(text);
- point.addElement("type").setText("point");
- //point.addElement("x").setText(xs.getText());
- //point.addElement("y").setText(ys.getText());
- }
- point.addElement("name").setText(
- e.element("Poi").element("POI_NAME").getText());
- point.addElement("address").setText(
- e.element("Poi").element("ADDRESS").getText());
- }
- return newRoot.asXML();
- // throw new Exception("formatPoint is fail");
- }
- catch (DocumentException e)
- {
- // TODO Auto-generated catch block
- System.out.println("格式化失败!");
- e.printStackTrace();
- }
- return null;
- }
- }
这里面用到了commons.HttpClientj-3.1.jar和dom4j这两个jar包,如果是不同版本的jar包,写法可能略有不同。
欢迎交流:http://www.cnblogs.com/shizhongtao/p/3468664.html
有时间再整理下……
java查询WFS服务的更多相关文章
- WFS服务查询方法
基于Geoserver发布的wfs服务,实现空间和属性信息的查询.wfs包含getFeature操作,用来检索要素信息,支持返回gml格式的地理要素表达. WFS的getFeature操作需要提供的参 ...
- cesium结合geoserver利用WFS服务实现图层新增(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- leaflet结合geoserver利用WFS服务实现图层删除功能(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- openlayers6结合geoserver利用WFS服务实现图层新增功能(附源码下载)
内容概览 1.openlayers6结合geoserver利用WFS服务实现图层新增功能2.源代码demo下载 效果图如下: 本篇主要是openlayers6通过调用geoserver发布的地图服务W ...
- leaflet结合geoserver利用WFS服务实现图层新增功能(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- cesium结合geoserver利用WFS服务实现图层编辑(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- cesium结合geoserver利用WFS服务实现图层删除(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- Java查询大文本
但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差,难以实现高效的并行处理. 使用免费的集算器可以弥补这一不足.集算器封装了丰富的结构化文件读写和游标计算函数,书写简单 ...
- OpenLayers调用ArcGIS Server发布的WFS服务
OpenLayers调用ArcGIS Server发布的WFS服务 原创: 蔡建良 2013-08-20 一. 开发环境 1) Openlayers2.13+arcgis server9.3 2) W ...
随机推荐
- php7.0 redis扩展下载地址
http://windows.php.net/downloads/pecl/snaps/redis/20160319/
- c# ado 连接数据库 六步曲
建立连接分为六步:1.定义连接字符串,oracle 的连接字符串为: private static string connString = "Data Source=192.168.1.13 ...
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...
- C++析构函数为什么要为虚函数
注:本文内容来源于zhice163博文,感谢作者的整理. .为什么基类的析构函数是虚函数? 在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生. 下面转自网络:源地址 h ...
- debian下软件包管理方式总结
linux最流行的包管理方式除了rpm之外就是debian的deb格式了.目前采用deb管理方式的主流操作系统主要有debian和ubuntu系列.和rpm包管理方式不同的是,虽然debian也有包含 ...
- 前端js插件
jquery jquery官方 版本:v 2.1.0v 1.11.0 yquery 暂停更新 版本: v 1.6v 1.5 v 1.4v 1.3 v 1.2v 1.1 v 1.0 jQuery 原型插 ...
- Honda HDS IMMO PCM Code calculator Free Download
HDS IMMO PCM Code calculator software for Honda vehicle models is free download available in Eobd2.f ...
- Javascript与Ajax
不使用jquery来处理ajax请求该怎么做? 首先要明确html中的某些数据需要从服务端获得,也就是客户端向服务端请求(request)数据,服务端就响应(response)这个请求,把客户端要的数 ...
- 奥运会订票系统c语言代写源码下载
制作能够实现2008北京奥运会网上订票的系统,能够实现购票人员注册.购票.管理人员可以设置各个比赛场地的赛事安排及票数. 程序要求实现的功能如下: 购票者信息注册:购票者可以用昵称和身份证进行注册,若 ...
- 怎么删除远程登录连接的ip
通过远程桌面可以登录到远程电脑上进行相应的操作,在登录过后会在本地电脑上留下登录过的IP以及登录用户名相关信息,可能会给远程的电脑带来安全隐患,下面介绍一下清除远程桌面历史记录的方法. 1.删除我的文 ...