OpenLayers调用ArcGIS Server发布的WFS服务
OpenLayers调用ArcGIS Server发布的WFS服务
原创: 蔡建良 2013-08-20
一. 开发环境
1) Openlayers2.13+arcgis server9.3
2) WFS地图空间参考EPSG: 4326也可以是EPSG:102113
3) Openlayers底图空间参考EPSG: 900913
二. 发布地图服务
1) 采用ArcMap制作mxd地图文档。
2) 采用ArcCatalog发布地图服务,将wfs打勾。
部分操作截图如下:


3) 测试WFS服务:
http://lx-server/arcgis/services/Yangdi/MapServer/WFSServer?request=GetCapabilities&service=WFS
三. 采用OpenLayers.Layer.Vector调用。该方法为POST方式。
WFS1.1.0支持服务端重投影:
new OpenLayers.Layer.Vector("一类样地",{
strategies: [new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.WFS({
version: "1.1.0",
srsName: "EPSG:102113",
url: "http://lx-server/arcgis/services/Yangdi/MapServer/WFSServer",
featureNS: "",
featureType: "plotpoint_Liaoning_Intersect",
maxFeatures: "10",
geometryName: "Shape"
}),
projection: new OpenLayers.Projection("EPSG:102113"),
visibility: false
})
WFS1.0.0不支持服务端重投影,这边是客户端重投影:
new OpenLayers.Layer.Vector("一类样地",{
strategies: [new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.WFS({
version: "1.0.0",
srsName: "EPSG:4326",
url: "http://lx-server/arcgis/services/Yangdi/MapServer/WFSServer",
featureNS: "",
featureType: "plotpoint_Liaoning_Intersect",
maxFeatures: "10",
geometryName: "Shape"
}),
projection: new OpenLayers.Projection("EPSG:4326"),
visibility: false
})
四. 采用OpenLayers.Layer.WFS调用。该方法为GET方式。
注意:使用该方法必须引入deprecated.js 文件。
new OpenLayers.Layer.WFS(
"一类样地",
"http://lx-server/arcgis/services/Yangdi/MapServer/WFSServer?",
{
request: 'GetFeature',
typename: "plotpoint_Liaoning_Intersect",
maxfeatures: 10,
extractAttributes: false,
version: "1.1.0",
srsName: "EPSG:102113"
},
{
projection: new OpenLayers.Projection("EPSG:900913"),
isBaseLayer: false,
extractAttributes: false,
visibility: false
}
)
五. OpenLayers调用WFS服务跨域问题解决
1) 在IIS中部署Openlayers开发的网站。
2) 安装python。并让IIS支持python脚本。部分操作截图:


3) 将openlayes自带的proxy.cgi扩展名改为proxy.py,并做如下修改。
(1) 打开proxy.py文件,将开头第一行内容
#!/usr/bin/env python (这是linux的路径)
改为windows路径:
#!C:/Python25/python.exe –u
(2) 在allowedHosts数组中添加要访问的跨域网址lx-server。
allowedHosts = ['www.openlayers.org', 'openlayers.org',
'labs.metacarta.com', 'world.freemap.in',
'prototype.openmnnd.org', 'geo.openplans.org',
'sigma.openplans.org', 'demo.opengeo.org',
'www.openstreetmap.org', 'sample.azavea.com',
'v2.suite.opengeo.org', 'v-swe.uni-muenster.de:8080',
'vmap0.tiles.osgeo.org', 'www.openrouteservice.org',
'maps.wien.gv.at','lx-server’]
4) 在网页脚本中加入如下代码:
OpenLayers.ProxyHost = "proxy.py?url=";
六.测试
在浏览器上运行网页:http://localhost/ yangdi/index.html
效果如下:

Wfs服务返回数据格式为:
<wfs:FeatureCollection xmlns:anhuiplot="http://jane/arcgis/services/anhuiplot/MapServer/WFSServer" xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jane/arcgis/services/anhuiplot/MapServer/WFSServer http://localhost/arcgis/services/anhuiplot/MapServer/WFSServer?request=DescribeFeatureType%26version=1.1.0%26typename=anhuiproj http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
<gml:boundedBy>...</gml:boundedBy>
<gml:featureMember>...</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
<gml:featureMember>...</gml:featureMember>
</wfs:FeatureCollection>
---其中featureMember-----------------
<gml:featureMember>
<anhuiplot:anhuiproj gml:id="F3__10">
<anhuiplot:OBJECTID>10</anhuiplot:OBJECTID>
<anhuiplot:Shape>
<gml:Point>
<gml:pos>13058352.4935765 3694896.1439479</gml:pos>
</gml:Point>
</anhuiplot:Shape>
<anhuiplot:PLOT_NO>6975</anhuiplot:PLOT_NO>
</anhuiplot:anhuiproj>
</gml:featureMember>
经测试返回10个要素,数据大小为45K。这是由于字段太多造成。可将wfs服务的数据源不需要的字段删除,留下关键字段。最后留下3个字段,返回数据的大小变为4K。
OpenLayers调用ArcGIS Server发布的WFS服务的更多相关文章
- OpenLayers调用arcgis server发布的地图服务
有两种方式可以调用arcgis server发布的地图服务,一种是rest,一种是wms. 地图的投影为900913,arcgis server为10.0版本,地图服务的空间参考为3857. 与 ...
- ArcGIS API for JavaScript(2)-ArcGIS Server发布要素图层服务
1.前言 上一篇该系列的文章我们主要讲了一下基础Web地图搭建,这篇我们主要讲一下ArcGIS Server发布服务,并且如何调用服务.将自己的数据加载到Web地图当中来,实现Web端浏览数据. 2. ...
- C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE9.3
主要使用了AE中的IAGSServerOject接口及IMapServer接口.Private void GetServerTest_Click(object sender, EventArgs e) ...
- C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE 10
开发环境:vs2010 + AE 10 测试 public Form1() { ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engi ...
- Arcgis api for javascript学习笔记 - 不改变默认端口(6080)情况下,外网访问Arcgis Server 发布的接口
Arcgis Server发布的地图服务地址默认端口号是6080,假设本机上只对80端口做了外网映射,在IIS中部署了一个网站绑定了80端口,那么网站中某个页面通过arcgis api for js ...
- arcgis engine 调用arcgis server服务
首先需要添加两个引用: using ESRI.ArcGIS.GISClient;using ESRI.ArcGIS.DataSourcesRaster; /// <summary> /// ...
- 不同网段无法加载ArcGIS Server发布服务解决方法
问题描述: ArcGIS Server 10发布的服务, (1)在相同网段的Desktop9.3和Engine 9.3程序下可以正常显示, (2)在不同网段Desktop9.3和Engine 9.3程 ...
- ArcGis server发布地图服务
ArcGIS server发布服务: 首先修改地图文档属性中的关联默认数据库 最后使用分享将地图服务发布到server上,是地图服务可以使用: 注意一定要勾选 Feature Access选项 fea ...
- ArcMap 发布 ArcGIS Server OGC(WMSServer,MapServer)服务
完整的从ArcMap部署地图到ArcGIS Server 中作为地图服务的过程. 1. 添加图层数据-- 不能添加地图 baseMap 2. 安装ArcGIS Server ,记住登录Manager ...
随机推荐
- Android核心分析之十九电话系统之GSMCallTacker
GSMCallTracker在本质上是一个Handler.<IGNORE_JS_OP> 1.jpg (1.52 KB, 下载次数: 1) 下载附件 保存到相册 2012-3-22 11: ...
- uploadify IO Error/http error 413
阿里云的服务器 linux 服务器,php 环境,上传附件问题,记录分享一下: 开始测试的时候,都是图片,小附件,没什么问题 系统上线后,发现大的附件上传 有问题,报错 IO Error 开始检查程序 ...
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-007UserTypes的用法(@org.hibernate.annotations.Type、@org.hibernate.annotations.TypeDefs、CompositeUserType、DynamicParameterizedType、、、)
一.结构 二.Hibernate支持的UserTypes接口 UserType —You can transform values by interacting with the plain JD ...
- Gravitational Teleport 是一个先进的 SSH 服务器,基于 Golang SSH 构建,完全兼容 OpenSSH
Gravitational Teleport 是一个先进的 SSH 服务器,可通过 SSH 或者 HTTPS 远程访问 Linux 服务器.其目的是为了替代 sshd.Teleport 可以轻松让团队 ...
- Bootstrap学习笔记之整体架构
之前有粗略地看过一下Bootstrap的内容,不过那只是走马观花式地看下是怎么用的,以及里面有什么控件,所以就没想着记笔记.现在由于要给部门做分享,所以不得不深入地去学习下,不然仅是简单地说下怎么用, ...
- c++ 在客户端的GCC使用
c++ 在客户端的GCC使用 翻译自: GCC是GNU工具箱的一个功能,GNU还包括如下功能: GNU compiler collection (GCC) GNU make GNU Debugger ...
- slot signal机制
有一个比较 经典的实现:http://sigslot.sourceforge.net/很精简的 signal slot的实现,跨平台.webrtc项目在用,我在自己项目里也用了.这个源码有2000多行 ...
- 给 Gradle 配置国内的 Maven 仓库,提高 jar 包下载速度。
最近使用 gradle 跑一些 spring 的示例,在下载一些 jar 的时候速度特别慢,因为是访问的国外的 maven 仓库. 开源中国提供了国内的 maven 库,所以可以在 gradle 里设 ...
- How to write a product backlog step by step
一般来说,制定发布计划是在尝试回答这个问题:“最晚到什么时候为止,我们可以交付这个新系统的1.0版本“ 下面是验收标准规则的一个例子: 1. 所有重要性>=100的条目都必须在1.0版中发布. ...
- centos6.5 中文
之前在网上查了不少资料,很多网友在网上都说,在shell命令下输入: # vi /etc/sysconfig/i18n 然后修改LANG="en_US.UTF-8" ...