GIS的学习(十九)Geoserver使用添加,删除,查询地图中的POI
来源:互联网 发布:怎么查看数据库关系 编辑:程序博客网 时间:2024/05/18 03:13
GIS的学习(十九)Geoserver使用添加,删除,查询地图中的POI
在geoserver自定义的地图中通过geoserver wfs 查询,删除,添加相关的POI。
相关操作的格式如下:
查询
<wfs:GetFeature service="WFS" version="1.0.0"
outputFormat="GML2"
xmlns:opengis="http://www.cetusOpengis.com"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd">
<wfs:Query typeName="opengis:qqy">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>status</ogc:PropertyName>
<ogc:Literal>0</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>;
添加
<wfs:Transaction service="WFS" version="1.0.0"
outputFormat="GML2"
xmlns:opengis="http://www.cetusOpengis.com"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd">
<wfs:Insert handle="someprj1">
<opengis:someprj>
<opengis:the_geom>
<gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#3395" >
<gml:coordinates decimal="." cs="," ts="">13404701.212,3850391.781</gml:coordinates>
</gml:Point>
</opengis:the_geom>
<opengis:ssds>13</opengis:ssds>
<opengis:qqybh>12</opengis:qqybh>
<opengis:status>0</opengis:status>
</opengis:someprj>
</wfs:Insert>
</wfs:Transaction>;
修改
<wfs:Transaction service="WFS" version="1.0.0"
outputFormat="GML2"
xmlns:opengis="http://www.cetusOpengis.com"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd">
<wfs:Update typeName="opengis:qqyproject">
<wfs:Property>
<wfs:Name>qqybh</wfs:Name>
<wfs:Value>12</wfs:Value>
</wfs:Property>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>qqybh</ogc:PropertyName>
<ogc:Literal>0</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Update>
</wfs:Transaction>;
删除
<wfs:Transaction service="WFS" version="1.0.0"
outputFormat="GML2"
xmlns:opengis="http://www.cetusOpengis.com"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd">
<wfs:Delete typeName="opengis:qqyproject">
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>qqybh</ogc:PropertyName>
<ogc:Literal>12</ogc:Literal>
</ogc:PropertyIsLessThan>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>qqybh</ogc:PropertyName>
<ogc:Literal>0</ogc:Literal>
</ogc:PropertyIsGreaterThan>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>;
具体实现如下:
- package com.geoserver;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Map.Entry;
- /**
- * 操作geoserver的几种方法
- *
- *
- *
- * @Title: TODO
- * @Description: 实现TODO
- * @Copyright:Copyright (c) 2011
- * @Company:
- * @Date:2012-8-30
- * @author
- * @version 1.0
- */
- public class MainGeoService {
- public static void main(String[] args) {
- addGeoServerService();
- }
- /**
- * 添加地图定的信息
- */
- public static void addGeoServerService(){
- String layerName="loc_point";
- String namespaceValue="http://www.easyway.net.cn";
- double lat=139.54d;
- double lon=-116.23d;
- Map<String,String> params=new HashMap<String,String>();
- params.put("FID", "loc_point.4");
- params.put("NAME", "easyway_001");
- params.put("OBJECT_CODE", "beijing_tsingperk_768");
- params.put("HANDLE_ID", "768");
- params.put("STATUS", "1");
- params.put("DESCRIPTION", "this is point add by programe");
- StringBuffer sb = new StringBuffer();
- sb.append("<wfs:Transaction service='WFS' version='1.0.0' ");
- sb.append("outputFormat='GML2' ");
- sb.append(" xmlns:opengis='"+namespaceValue+"' ");
- sb.append(" xmlns:wfs='http://www.opengis.net/wfs' ");
- sb.append(" xmlns:ogc='http://www.opengis.net/ogc' ");
- sb.append(" xmlns:gml='http://www.opengis.net/gml' ");
- sb.append("xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' ");
- sb.append(" xsi:schemaLocation='http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd'> ");
- sb.append(" <wfs:Insert handle='"+layerName+"'>");
- sb.append(" <opengis:"+layerName+">");
- sb.append(" <opengis:the_geom>");
- sb.append(" <gml:Point srsName='http://www.opengis.net/gml/srs/epsg.xml#3395' >");
- sb.append(" <gml:coordinates decimal='.' cs=',' ts=' '>"+lat+","+lon+"</gml:coordinates>");
- sb.append(" </gml:Point>");
- sb.append(" </opengis:the_geom>");
- if(!params.isEmpty()){
- for (Entry<String,String> entry : params.entrySet()) {
- sb.append(" <opengis:"+entry.getKey()+">"+entry.getValue()+"</opengis:"+entry.getKey()+">");
- }
- }
- sb.append(" </opengis:"+layerName+">");
- sb.append(" </wfs:Insert> ");
- sb.append(" </wfs:Transaction>");
- String response = HttpUtils.doGeoServerPOST(
- "http://10.100.108.20:8080/geoserver/wfs?outputFormat=json",
- sb.toString());
- System.out.println("response:");
- System.out.println("" + response);
- }
- /**
- * 查询地图中的访问
- * 假定我们指定的查询范围为bbox,根据上述参数设定,进行范围查询的Url为:
- * “WfsUrl?REQUEST=GetFeature&typeName= WfsNamespace : WfsLayerName &bbox=bbox&outputFormat=json”。
- * bbox是怎么来的呢?bbox实际上描绘的是一个矩形,假定矩形左下角的点是Max(x1,y1),右上角的点是Min(x2,y2),
- * 则bbox是形如“x1,y1,x2,y2”的一个字符串。
- */
- public static void queryRangeGeoServerService() {
- //空间
- String namespace="jacob";
- //图层名称
- String layerName="loc_point";
- double minX=40.34d;
- double minY=65.344d;
- double maxX=45.34d;
- double maxY=67.34d;
- String queryRangeURL="http://10.100.108.20:8080/geoserver/wfs?REQUEST=GetFeature&typeName="+namespace+":"+layerName+"&bbox="+minX+","+minY+","+maxX+","+maxY+"&outputFormat=json";
- String response = HttpUtils.doGeoServerPOST(queryRangeURL,"");
- System.out.println("response:");
- System.out.println("" + response);
- }
- /**
- * 查询名称为cesuo 的地方
- *
- */
- public static void queryGeoServerService() {
- String namespace="jacob";
- String namespaceValue="http://www.easyway.net.cn";
- String layerName="loc_point";
- Map<String,String> params=new HashMap<String,String>();
- params.put("Name", "cesuo");
- StringBuffer sb = new StringBuffer();
- sb.append("<w:GetFeature service='WFS' version='1.1.0' ");
- sb.append(" xmlns:w='http://www.opengis.net/wfs' ");
- sb.append(" xmlns:f='"+namespaceValue+"' ");
- sb.append(" xmlns:g='http://www.opengis.net/gml' ");
- sb.append(" xmlns:o='http://www.opengis.net/ogc' ");
- sb.append(" x:schemaLocation='http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd WfsUrl/DescribeFeatureType?version=1.1.0&typename="+namespace+":"+layerName+"' ");
- sb.append(" xmlns:x='http://www.w3.org/2001/XMLSchema-instance'>");
- sb.append(" <w:Query typeName='f:"+layerName+"'>");
- sb.append(" <o:Filter>");
- sb.append(" <o:PropertyIsEqualTo>");
- if(!params.isEmpty()){
- for (Entry<String,String> entry : params.entrySet()) {
- sb.append(" <o:PropertyName>f:"+entry.getKey()+"</o:PropertyName>");
- sb.append(" <o:Literal>"+entry.getValue()+"</o:Literal>");
- }
- }
- sb.append(" </o:PropertyIsEqualTo>");
- sb.append(" </o:Filter>");
- sb.append(" </w:Query>");
- sb.append("</w:GetFeature>");
- String response = HttpUtils.doGeoServerPOST(
- "http://10.100.108.20:8080/geoserver/wfs?outputFormat=json",
- sb.toString());
- System.out.println("response:");
- System.out.println("" + response);
- }
- /**
- *
- * 假定我们要删除的STATE_NAME为北京的点,则根据上述参数设定,此查询的url为:WfsUrl,
- * 同时需要将如下形式的参数信息,提交到服务器。如以post的方式,
- * 将参数信息写入HttpWebRequest的RequestStream中。
- *
- */
- public static void deletePointGeoServerService() {
- String namespace="jacob";
- String namespaceValue="http://www.easyway.net.cn";
- String layerName="loc_point";
- Map<String,String> params=new HashMap<String,String>();
- params.put("Name", "cesuo");
- StringBuffer sb = new StringBuffer();
- sb.append("<w:Transaction xmlns:w='http://www.opengis.net/wfs' ");
- sb.append(" xmlns:f='"+namespaceValue+"' xmlns:g='http://www.opengis.net/gml' ");
- sb.append(" service='WFS' version='1.1.0' xmlns:o='http://www.opengis.net/ogc' ");
- sb.append(" x:schemaLocation='http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd WfsUrl /DescribeFeatureType?version=1.1.0&typename="+namespace+":"+layerName+" ' xmlns:x='http://www.w3.org/2001/XMLSchema-instance'>");
- sb.append(" <w:Delete typeName='f:"+layerName+"'>");
- sb.append(" <o:Filter>");
- sb.append(" <o:PropertyIsEqualTo>");
- if(!params.isEmpty()){
- for (Entry<String,String> entry : params.entrySet()) {
- sb.append(" <o:PropertyName>f:"+entry.getKey()+"</o:PropertyName>");
- sb.append(" <o:Literal>"+entry.getValue()+"</o:Literal>");
- }
- }
- sb.append(" </o:PropertyIsEqualTo>");
- sb.append(" </o:Filter>");
- sb.append(" </w:Delete>");
- sb.append(" </w:Transaction>");
- String response = HttpUtils.doGeoServerPOST(
- "http://10.100.108.20:8080/geoserver/wfs?outputFormat=json",
- sb.toString());
- System.out.println("response:");
- System.out.println("" + response);
- }
- }
- package com.geoserver;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import org.apache.http.Header;
- import org.apache.http.HttpEntity;
- import org.apache.http.HttpHost;
- import org.apache.http.HttpResponse;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.conn.scheme.PlainSocketFactory;
- import org.apache.http.conn.scheme.Scheme;
- import org.apache.http.conn.scheme.SchemeRegistry;
- import org.apache.http.conn.ssl.SSLSocketFactory;
- import org.apache.http.entity.StringEntity;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.params.CoreConnectionPNames;
- import org.apache.http.util.EntityUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- *
- * @Title: TODO
- * @Description: 实现TODO
- * @Copyright:Copyright (c) 2011
- * @Company:
- * @Date:2012-8-30
- * @author
- * @version 1.0
- */
- public class HttpUtils {
- private final static Logger logger = LoggerFactory.getLogger(HttpUtils.class);
- private static final int DEFAULT_CONN_TIMEOUT_MILLISECONDS = 5 * 1000;
- private static final int DEFAULT_READ_TIMEOUT_MILLISECONDS = 60 * 1000;
- private static final String CHARSET = "utf-8";
- private static HttpClient httpClient;
- static HttpHost proxy;
- static {
- proxy = new HttpHost("10.0.0.172", 80);
- }
- private static HttpClient initHttpClient(String charset) {
- if (charset == null)
- charset = System.getProperty("sun.jnu.encoding");
- releaseConnection();
- // 设置我们的HttpClient支持HTTP和HTTPS两种模式
- SchemeRegistry schemeRegistry = new SchemeRegistry();
- schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
- schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));
- // 使用线程安全的连接管理来创建HttpClient
- /*ThreadSafeClientConnManager connectionManager = new ThreadSafeClientConnManager(schemeRegistry);
- connectionManager.setMaxTotal(DEFAULT_MAX_TOTAL_CONNECTIONS);
- connectionManager.setDefaultMaxPerRoute(DEFAULT_MAX_CONNECTIONS_PER_ROUTE);*/
- httpClient = new DefaultHttpClient();
- /*HttpParams params = httpClient.getParams();
- params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,
- DEFAULT_CONN_TIMEOUT_MILLISECONDS);
- params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT,
- DEFAULT_READ_TIMEOUT_MILLISECONDS);*/
- setConnectTimeout(DEFAULT_CONN_TIMEOUT_MILLISECONDS);
- setReadTimeout(DEFAULT_READ_TIMEOUT_MILLISECONDS);
- return httpClient;
- }
- /**
- * HTTP post请求
- *
- * @param url
- * 请求地址
- * @param parmsMap
- * post数据
- * @return
- */
- public static String doGeoServerPOST(String url, String requst) {
- HttpPost httpPost = null;
- HttpResponse httpResponse = null;
- ObjectInputStream ois = null;
- try {
- if (httpClient == null)
- initHttpClient(CHARSET);
- httpPost = new HttpPost(url);
- // 绑定参数Entity
- StringEntity stringEntity = new StringEntity(requst, CHARSET);
- httpPost.setEntity(stringEntity);
- // 发送请求
- httpResponse = httpClient.execute(httpPost);
- if (httpResponse.getStatusLine().getStatusCode() == 200) {
- Header[] headers = httpResponse.getAllHeaders();
- for(Header h : headers){
- System.err.println(h.getName() + " : " + h.getValue());
- }
- HttpEntity entity = httpResponse.getEntity();
- return EntityUtils.toString(entity);
- }
- return null;
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- } finally {
- try {
- if (ois != null) {
- ois.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- httpClient.getConnectionManager().shutdown();
- }
- }
- /**
- * Set the connection timeout for the underlying HttpClient. A timeout value
- * of 0 specifies an infinite timeout.
- *
- * @param timeout the timeout value in milliseconds
- */
- private static void setConnectTimeout(int timeout) {
- httpClient.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,
- timeout);
- }
- /**
- * Set the socket timeout (SO_TIMEOUT) in milliseconds, which is the timeout
- * for waiting for data or, put differently, a maximum period inactivity
- * between two consecutive data packets.A timeout value of 0 specifies an
- * infinite timeout.
- *
- * @param timeout the timeout value in milliseconds
- */
- private static void setReadTimeout(int timeout) {
- httpClient.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, timeout);
- }
- private static void releaseConnection() {
- if (httpClient != null)
- httpClient.getConnectionManager().shutdown();
- }
- }
- GIS的学习(十九)Geoserver使用添加,删除,查询地图中的POI
- GIS的学习(二十)基于Geoserver的WFS服务与Openlayers实现地理查询
- GIS的学习(二十)基于Geoserver的WFS服务与Openlayers实现地理查询
- GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析
- GIS的学习(二十三)geoserver中CQL和ECQL的使用
- Geoserver 谷歌栅格地图的使用
- 使用geoserver发布地图
- 中科燕园GIS外包 讲解2---使用geoserver+openLayers加载google地图
- 摘一些GIS地图的基础知识(学习学习)
- iOS 之 使用百度地图 (删除地图页面所有自己添加的标注)
- iOS 之 使用百度地图 (删除地图页面所有自己添加的标注)
- iOS 之 使用百度地图 (删除地图页面所有自己添加的折线)
- 在JAVA中添加openlayer3的js包制作地图,使用geoserver发布地图,将发布的地图连接到网页中
- WebGIS学习(九)WebGIS中的矢量查询(针对AGS和GeoServer)
- 开源GIS技术初探之Geoserver地图服务器
- Geoserver 谷歌栅格地图的使用 多级发布
- 在GeoServer中使用Udig配置的地图样式
- 开源GIS:GeoServer和MapServer的对比
- 八皇后问题递归代码
- Linux下VMware-tools安装方法
- 本博客目录
- WAMP中httpd.exe报0xc000007b应用程序错误
- Maven的配置文件pom.xml
- GIS的学习(十九)Geoserver使用添加,删除,查询地图中的POI
- centos 推荐使用epel源
- 刘仲敬:国民党是如何失掉大陆的?
- 蓝桥杯算法训练_格子操作_线段树_区间和与区间最值
- 如何减少返工工作量?
- OC面向对象—多态
- 使用baidu push报错
- GIS的学习(二十)基于Geoserver的WFS服务与Openlayers实现地理查询
- POJ 1840 - Eqs(数学)