• java查询WFS服务


    在我们访问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     
    158 }

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

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

    有时间再整理下……

  • 相关阅读:
    如何在SpringMVC中使用REST风格的url
    c#实现的udt
    数据库查询服务化-缓存和分页
    c#常用数据库封装再次升级
    c#数据库连接池Hikari重构升级
    c# 常用数据库封装
    聊聊数据存储查询
    c#分析SQL语句
    c# 分析SQL语句中的表操作
    c#最近博文结尾
  • 原文地址:https://www.cnblogs.com/shizhongtao/p/3468664.html
Copyright © 2020-2023  润新知