zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    SDNU 1311.Binomial Coeffcients
    SDNU 1306.兑数
    SDNU 1272.SL的秘密
    SDNU 1270.超超的难题
    XCode 自动化打包总结
    Xrun 将 app 转化为 IPA
    mac终端下运行shell脚本
    ios 检测应用程序升级问题
    在iis6.0公布asp.net mvc3网站
    IOS 中 NSArray
  • 原文地址:https://www.cnblogs.com/janehlp/p/3269692.html
Copyright © 2011-2022 走看看