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服务的更多相关文章

  1. OpenLayers调用arcgis server发布的地图服务

    有两种方式可以调用arcgis server发布的地图服务,一种是rest,一种是wms.  地图的投影为900913,arcgis server为10.0版本,地图服务的空间参考为3857.   与 ...

  2. ArcGIS API for JavaScript(2)-ArcGIS Server发布要素图层服务

    1.前言 上一篇该系列的文章我们主要讲了一下基础Web地图搭建,这篇我们主要讲一下ArcGIS Server发布服务,并且如何调用服务.将自己的数据加载到Web地图当中来,实现Web端浏览数据. 2. ...

  3. C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE9.3

    主要使用了AE中的IAGSServerOject接口及IMapServer接口.Private void GetServerTest_Click(object sender, EventArgs e) ...

  4. C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE 10

    开发环境:vs2010 + AE 10 测试 public Form1() { ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engi ...

  5. Arcgis api for javascript学习笔记 - 不改变默认端口(6080)情况下,外网访问Arcgis Server 发布的接口

    Arcgis Server发布的地图服务地址默认端口号是6080,假设本机上只对80端口做了外网映射,在IIS中部署了一个网站绑定了80端口,那么网站中某个页面通过arcgis api for js ...

  6. arcgis engine 调用arcgis server服务

    首先需要添加两个引用: using ESRI.ArcGIS.GISClient;using ESRI.ArcGIS.DataSourcesRaster; /// <summary> /// ...

  7. 不同网段无法加载ArcGIS Server发布服务解决方法

    问题描述: ArcGIS Server 10发布的服务, (1)在相同网段的Desktop9.3和Engine 9.3程序下可以正常显示, (2)在不同网段Desktop9.3和Engine 9.3程 ...

  8. ArcGis server发布地图服务

    ArcGIS server发布服务: 首先修改地图文档属性中的关联默认数据库 最后使用分享将地图服务发布到server上,是地图服务可以使用: 注意一定要勾选 Feature Access选项 fea ...

  9. ArcMap 发布 ArcGIS Server OGC(WMSServer,MapServer)服务

    完整的从ArcMap部署地图到ArcGIS Server 中作为地图服务的过程. 1. 添加图层数据-- 不能添加地图 baseMap 2. 安装ArcGIS Server ,记住登录Manager ...

随机推荐

  1. MongoDB (二) MongoDB 优点

    任何关系型数据库,具有典型的架构设计,显示表和这些表之间的关系.虽然在 MongoDB中,没有什么关系的概念. MongoDB比RDBMS的优势 架构:MongoDB是文档型数据库,其中一个集合保存不 ...

  2. 李洪强经典iOS面试题11

        #import 跟#include 又什么区别,@class呢, #import<> 跟 #import””又什么区别? #import是Objective-C导入头文件的关键字, ...

  3. web.xml中servlet初始化参数的设置

    <context-param><param-name>param1</param-name><param-value>value1</param- ...

  4. hadoop 1.2.1 eclipse 插件编译

    hadoop-1.2.1 eclipse插件编译       在ubuntu上进行hadoop相关的开发,需要在eclipse上安装hadoop开发插件.最新释放出的hadoop包含源码的包,以had ...

  5. Linux 下Git的安装和配置

    Git是分布式的版本控制系统,实际上是不需要固定的服务器的,Git与svn的最大区别是,它的使用流程不需要联机,可以先将对代码的修改,评论,保存在本机.等上网之后,再实时推送过去.同时它创建分支与合并 ...

  6. [android警告] AndroidManifest.xml警告 Should explicitly set android:allowBackup to true or false

    http://www.cnblogs.com/javadu/p/3812528.html Android中AndroidManifest.xml警告 Should explicitly set and ...

  7. POJ 1743 Musical Theme(后缀数组)

    题意:有n个数值,算出相邻两个值的差值,此时有n-1个值的序列,把这序列当做字符串的话,求最长重复子串,且这两个子串不能重叠. 分析:后缀数组解决.先二分答案,把题目变成判定性问题:判断是否存在两个长 ...

  8. SeaJS 学习

    什么是系统 在生活和工作中,我们会接触到大量系统:自然界生态系统.计算机操作系统.软件办公系统,还有教育系统.金融系统.网络系统.理论系统等等.究竟什么是系统呢? 来看下维基百科的解释: 系统泛指由一 ...

  9. supersocket中quickstart文件夹下的MultipleCommandAssembly的配置文件分析

    首先确认下配置文件中的内容 第一部分configSections[需要注意的是name=superSocket] <configSections> <section name=&qu ...

  10. poj 动态规划题目列表及总结

    此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...