ol2加载ArcGis发布的wfs
来源:互联网 发布:linux中的dd命令 编辑:程序博客网 时间:2024/05/21 22:58
通用接入WFS
Wfs服务主要功能
:属性查询 包含图像查询。支持各种条件 和查询数据库一样。
也支持 删除、修改、增加,支持空间查询和比较。
使用Acrgis发布wfs服务;方法自行百度;
获取wfs数据的代码:
通过与配合能够得到查询条件;然后拼凑到整个查询参数当中去就行。
从上面我们也能看出来,请求其实就是ajax的post请求。只是对于 wfs 来说查询参数需要是GML格式的(就是一种xml,只不过里面的节点名称都是指定的 有一定的规则,不然不能被arcgis识别);
获取过来的数据可以通过直接转化为feature对象,然后通过layer加载就可以显示了。
wfs查询参数的格式:
下面的就是查询参数的格式,可以看出来就是个xml,格式化后就是:
Filter部分条件也就是构造的查询条件。
关于跨域
请上面的请求我们能看出来:传入的参数中有个参数:
这个参数其实就是服务器的路径,由于请求是跨域的,所以使用了代理服务器,在后台获取的,所以就要把原始路径传递过去。
Ol中使用代理服务需要在js中加一行代码:
这个官方有定义。
下面附上 ashx的完整跨域代码:其实代理服务就是设置了一个后台的获取功能。没有啥东西。以前以为代理是什么呢,草。
<%@WebHandler Language="C#"Class="Handler" %>
using System;
usingSystem.Collections.Generic;
using System.Web;
using System.Net;
using System.IO;
public classHandler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
if (string.IsNullOrEmpty(context.Request["URL"]))return;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(context.Request["URL"]);
request.UserAgent = context.Request.UserAgent;
request.ContentType =context.Request.ContentType;
request.Method =context.Request.HttpMethod;
byte[] trans = new byte[10240];
int offset = 0;
int offcnt = 0;
if (request.Method.ToUpper() =="POST")
{
Stream nstream =request.GetRequestStream();
while (offset <context.Request.ContentLength)
{
offcnt = context.Request.InputStream.Read(trans,offset, 10240);
if (offcnt > 0)
{
nstream.Write(trans, 0, offcnt);
offset +=offcnt;
}
}
nstream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//Encoding enc =Encoding.GetEncoding(65001);
context.Response.ContentType = response.ContentType;
StreamReader loResponseStream =new StreamReader(response.GetResponseStream());
string lcHtml =loResponseStream.ReadToEnd();
context.Response.Write(lcHtml);
response.Close();
loResponseStream.Close();
}
public bool IsReusable {
get {
return false;
}
}
}
完整代码:
<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<scriptsrc="../Lib/jquery/jquery-1.8.3.all.js"></script>
<scriptsrc="../OpenLayers2.13/OpenLayers.js"></script>
<scriptsrc="../OpenLayers2.13/lib/deprecated.js"></script>
<style>
html,body
{
height:100%;
overflow:hidden;
width:100%;
}
#map
{
height:500px;
width:1000px;
border:2pxred solid;
}
</style>
<scripttype="text/javascript">
var map, drawLayer; var drawLayer;
function init() {
//添加代理
OpenLayers.ProxyHost = 'Handler.ashx?URL=';
var options = {
controls: [],
projection: "EPSG:4326"
};
map = new OpenLayers.Map('map', options);
var tiled = new OpenLayers.Layer.WMS(
"province","http://ltserver:6080/arcgis/services/MyMapService/MapServer/WmsServer",
{
"LAYERS":'0',
"STYLES":'',
format: 'image/png'
},
{
buffer: 0,
isBaseLayer:true
}
);
map.addLayer(tiled);
drawLayer = new OpenLayers.Layer.Vector("drawLayer");
map.addLayer(drawLayer);
map.addControl(new OpenLayers.Control.PanZoomBar({
position: new OpenLayers.Pixel(2, 15)
}));
map.addControl(new OpenLayers.Control.Navigation());
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.setCenter([117,36],6);
GetGeoJson();
}
function GetGeoJson(layerName) {
var filter = new OpenLayers.Filter.Logical({
type:OpenLayers.Filter.Logical.AND,
filters: [
new OpenLayers.Filter.Comparison({//比较操作符
type:OpenLayers.Filter.Comparison.LIKE,
property: "所在市",
value: "温州市"
}),
new OpenLayers.Filter.Comparison({//比较操作符
type: OpenLayers.Filter.Comparison.LIKE,
property: "所在市",
value: "温州市"
})
]
});
var filter_1_0 = new OpenLayers.Format.Filter.v1_0_0();
var xml = new OpenLayers.Format.XML();
var xmlPara = '<?xml version="1.0"encoding="utf-8" ?>'
+ "<wfs:GetFeatureservice='WFS' version='1.0.0' outputFormat='GML2' "
+ "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.0.0/wfs.xsd'> "
+ "<wfs:QuerytypeName='ProtectDev:功能区方案'srsName='EPSG:4326' >"
+ "<wfs:PropertyName>ProtectDev:所在市</wfs:PropertyName>"
+xml.write(filter_1_0.write(filter)) //添加查询条件,报错,目前是获取全部数据
+ "</wfs:Query>"
+ "</wfs:GetFeature>";
var request = OpenLayers.Request.POST({
url: "http://ltserver:6080/arcgis/services/ProtectDev/MapServer/WFSServer?",
data: xmlPara,
callback: function (e) {
var gmlParse =new OpenLayers.Format.GML();
var features =gmlParse.read(e.responseText);
drawLayer.addFeatures(features);
}
});
}
</script>
</head>
<bodyonload="init()">
<divid="map"></div>
</body>
</html>
- ol2加载ArcGis发布的wfs
- openlayer3加载geoserver发布的WFS服务
- arcgis server 发布wfs、wms服务注意的问题
- Arcgis server 发布wfs、wms服务注意的问题
- arcgis server 发布wfs、wms服务注意的问题
- openlayers 3加载GeoServer发布的wfs类型服务
- ArcGIS Image Server简介以及OL2中的加载
- ArcGis 10+Oracle发布WFS-T服务,无法更新Feature的解决方法
- cesium加载WFS服务(GeoServer发布)
- 怎么使用外部配置文件发布WFS服务(基于Arcgis Server)
- arcgis server 发布wfs、wms服务注…
- openlayers3调用GeoServer发布的wfs
- Openlayers3 加载 GeoServer WFS的实现
- 巧用Arcgis Server的REST接口实现OL2中WMS添加过滤
- ArcGis Server的集中地图服务WMS/WFS/WCS介绍
- arcgis server10.3 WFS数据查询过滤器filter的问题
- 扩展TiledMapServiceLayer,加载ArcGIS Server发布的切片地图
- android加载ArcGis发布的地图(显示不出来)
- tftp如何使用?
- 多线程SDL_DestroyWindow阻塞问题
- 漫谈c语言历史
- Qt的XML封装类QXmlWrapper,实现XML文件的创建、删除以及元素节点的增加、删除、修改与查找等。
- AngularJs 技术实现简单的表格管理
- ol2加载ArcGis发布的wfs
- css 图片自适应
- oracle的几种循环示例
- ios android 真机调试
- 图像处理 椒盐噪声
- SQL SERVER STR等函数及语法 与使用实例 与Postgre数据库的函数使用区别
- 安卓第一次启机时间很长的原因
- RabbitMQ与java、Spring结合实例详细讲解(转)
- .Net AOP处理