在我们访问wfs服务时候,有时候会遇到前台访问时候的跨域问题。这里给出java访问的一个小例子。

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.UnsupportedEncodingException;
  6. import java.util.List;
  7.  
  8. import org.apache.commons.httpclient.HttpClient;
  9. import org.apache.commons.httpclient.HttpException;
  10. import org.apache.commons.httpclient.methods.PostMethod;
  11. import org.apache.commons.httpclient.methods.StringRequestEntity;
  12. import org.apache.commons.httpclient.params.HttpMethodParams;
  13. import org.dom4j.Document;
  14. import org.dom4j.DocumentException;
  15. import org.dom4j.DocumentHelper;
  16. import org.dom4j.Element;
  17. import org.dom4j.QName;
  18.  
  19. public class WFSUtil
  20. {
  21.  
  22. /**
  23. * 得到过滤结果。名字默认是Poi
  24. *
  25. * @param keyWords
  26. * @param wfsUrl
  27. * @return
  28. * @throws HttpException
  29. * @throws IOException
  30. */
  31. public String findPointsXmlByKeywords(String[] keyWords, String wfsUrl,
  32. String wfsTitle, String layerName) throws HttpException,
  33. IOException
  34. {
  35. if (keyWords.length==0)
  36. {
  37. return "<root/>";
  38. }
  39.  
  40. if (wfsTitle == null)
  41. {
  42. wfsTitle = "ST";
  43. }
  44. if (layerName == null)
  45. {
  46. layerName = "POI";
  47. }
  48. StringBuffer buffer = new StringBuffer(
  49. "<?xml version='1.0' encoding='UTF-8'?>"
  50. + "<wfs:GetFeature maxFeatures='100' service='WFS' version='1.1.0' "
  51. + "xmlns:wfs='http://www.opengis.net/wfs' "
  52. + "xmlns:gml='http://www.opengis.net/gml' "
  53. + "xmlns:ogc='http://www.opengis.net/ogc' "
  54. + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
  55. + "xsi:schemaLocation='http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd'>"
  56. + "<wfs:Query typeName='" + layerName
  57. + "' srsName='EPSG:4326'>"
  58. + "<ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>");
  59.  
  60. if (keyWords.length > 1)
  61. {
  62. buffer.append("<ogc:Or>");
  63. for (int i = 0; i < keyWords.length; i++)
  64. {
  65. buffer.append(addPropertyIsLike(keyWords[i]));
  66. }
  67. buffer.append("</ogc:Or>");
  68. }
  69. else if (keyWords.length == 1)
  70. {
  71. buffer.append(addPropertyIsLike(keyWords[0]));
  72. }
  73. else
  74. {
  75. return null;
  76. }
  77.  
  78. buffer.append("</ogc:Filter></wfs:Query></wfs:GetFeature>");
  79. PostMethod post = new PostMethod(wfsUrl);
  80. post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,
  81. "utf-8");
  82. post.setRequestEntity(new StringRequestEntity(buffer.toString(),
  83. "application/xml", "UTF-8"));
  84. HttpClient httpclient = new HttpClient();
  85.  
  86. httpclient.executeMethod(post);
  87.  
  88. InputStream xmlis = post.getResponseBodyAsStream();
  89. //确定读取编码为utf-8,不设置的话会用系统默认编码,例如在tomcat容器中,就可能乱码。
  90. BufferedReader br = new BufferedReader(new InputStreamReader(xmlis,"utf-8"));
  91.  
  92. String tempbf;
  93. StringBuffer html = new StringBuffer(100);
  94. while ((tempbf = br.readLine()) != null)
  95. {
  96. html.append(tempbf);
  97. }
  98. // System.out.println(html.toString());
  99. return formatPoint(html.toString(),keyWords[0]);
  100. }
  101.  
  102. private String addPropertyIsLike(String word)
  103. {
  104. String result = "";
  105. if (word != null && (!word.trim().isEmpty()))
  106. {
  107. result += "<ogc:PropertyIsLike wildCard='*' singleChar='.' escape='!'><ogc:PropertyName>POI_NAME</ogc:PropertyName><ogc:Literal>*"
  108. + word + "*</ogc:Literal></ogc:PropertyIsLike>";
  109. }
  110. return result;
  111. }
  112.  
  113. private String formatPoint(String xml,String keyWord)
  114. {
  115. try
  116. {
  117. Document doc = DocumentHelper.parseText(xml);
  118.  
  119. Element root = doc.getRootElement();
  120.  
  121. Element newRoot = DocumentHelper.createElement("root");
  122. newRoot.addAttribute("keyword", keyWord);
  123.  
  124. List<Element> list = root.elements("featureMember");
  125.  
  126. for (Element e : list)
  127. {
  128. Element point = newRoot.addElement("point");
  129. Element xs = e.element("Poi").element("X");
  130. Element ys = e.element("Poi").element("Y");
  131. if (xs != null&&ys!=null)
  132. {
  133. String text=xs.getText()+","+ys.getText();
  134. point.addElement("xys").setText(text);
  135. point.addElement("type").setText("point");
  136. //point.addElement("x").setText(xs.getText());
  137. //point.addElement("y").setText(ys.getText());
  138. }
  139. point.addElement("name").setText(
  140. e.element("Poi").element("POI_NAME").getText());
  141. point.addElement("address").setText(
  142. e.element("Poi").element("ADDRESS").getText());
  143. }
  144. return newRoot.asXML();
  145. // throw new Exception("formatPoint is fail");
  146. }
  147. catch (DocumentException e)
  148. {
  149. // TODO Auto-generated catch block
  150. System.out.println("格式化失败!");
  151. e.printStackTrace();
  152. }
  153.  
  154. return null;
  155. }
  156.  
  157. }

这里面用到了commons.HttpClientj-3.1.jar和dom4j这两个jar包,如果是不同版本的jar包,写法可能略有不同。

欢迎交流:http://www.cnblogs.com/shizhongtao/p/3468664.html

有时间再整理下……

java查询WFS服务的更多相关文章

  1. WFS服务查询方法

    基于Geoserver发布的wfs服务,实现空间和属性信息的查询.wfs包含getFeature操作,用来检索要素信息,支持返回gml格式的地理要素表达. WFS的getFeature操作需要提供的参 ...

  2. cesium结合geoserver利用WFS服务实现图层新增(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  3. leaflet结合geoserver利用WFS服务实现图层删除功能(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  4. openlayers6结合geoserver利用WFS服务实现图层新增功能(附源码下载)

    内容概览 1.openlayers6结合geoserver利用WFS服务实现图层新增功能2.源代码demo下载 效果图如下: 本篇主要是openlayers6通过调用geoserver发布的地图服务W ...

  5. leaflet结合geoserver利用WFS服务实现图层新增功能(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  6. cesium结合geoserver利用WFS服务实现图层编辑(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  7. cesium结合geoserver利用WFS服务实现图层删除(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  8. Java查询大文本

    但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差,难以实现高效的并行处理. 使用免费的集算器可以弥补这一不足.集算器封装了丰富的结构化文件读写和游标计算函数,书写简单 ...

  9. OpenLayers调用ArcGIS Server发布的WFS服务

    OpenLayers调用ArcGIS Server发布的WFS服务 原创: 蔡建良 2013-08-20 一. 开发环境 1) Openlayers2.13+arcgis server9.3 2) W ...

随机推荐

  1. php7.0 redis扩展下载地址

    http://windows.php.net/downloads/pecl/snaps/redis/20160319/

  2. c# ado 连接数据库 六步曲

    建立连接分为六步:1.定义连接字符串,oracle 的连接字符串为: private static string connString = "Data Source=192.168.1.13 ...

  3. 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes

    贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...

  4. C++析构函数为什么要为虚函数

    注:本文内容来源于zhice163博文,感谢作者的整理. .为什么基类的析构函数是虚函数? 在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生. 下面转自网络:源地址 h ...

  5. debian下软件包管理方式总结

    linux最流行的包管理方式除了rpm之外就是debian的deb格式了.目前采用deb管理方式的主流操作系统主要有debian和ubuntu系列.和rpm包管理方式不同的是,虽然debian也有包含 ...

  6. 前端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 原型插 ...

  7. 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 ...

  8. Javascript与Ajax

    不使用jquery来处理ajax请求该怎么做? 首先要明确html中的某些数据需要从服务端获得,也就是客户端向服务端请求(request)数据,服务端就响应(response)这个请求,把客户端要的数 ...

  9. 奥运会订票系统c语言代写源码下载

    制作能够实现2008北京奥运会网上订票的系统,能够实现购票人员注册.购票.管理人员可以设置各个比赛场地的赛事安排及票数. 程序要求实现的功能如下: 购票者信息注册:购票者可以用昵称和身份证进行注册,若 ...

  10. 怎么删除远程登录连接的ip

    通过远程桌面可以登录到远程电脑上进行相应的操作,在登录过后会在本地电脑上留下登录过的IP以及登录用户名相关信息,可能会给远程的电脑带来安全隐患,下面介绍一下清除远程桌面历史记录的方法. 1.删除我的文 ...