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打勾。

部分操作截圖如下:

clip_image002

clip_image004

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腳本。部分操作截圖:

clip_image006

clip_image008

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

效果如下:

clip_image010

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM