Arcgis 对Rest风格web服务的支持

         ArcGIS server 自9.3开始引入了基于Rest 的Web服务架构,并且允许用户创建发布Rest 服务。ArcGIS Server 支持多种类型的Rest 地理信息服务系统,包括地图制图、地理编码、地理数据、几何运算、地理处理、地球模型、图片和网络分析服务。每种类型的服务都具有特定的功能,因此要确定需要创建哪种类型的地理信息系统服务,首先需要了解ArcGIS Server 的服务能实现哪些功能:

                                              ArcGIS Server 支持的服务类型及功能

            服务类型                   功能           所需资源-->制作工具

            

                 

           地图服务

      

        最常用的ArcGIS服务。包括许多功能,提供对地图和图层内容的访问。主要进行制图、地图浏览或图层查询。支持地理处理(需要分析层)及网络分析(需要网络分析层)。



地图文档(.mxd, .pmf)-->ArcMap

         地理编码服务

       主要进行地理编码。地理编码是按照坐标指定位置匹配到描述该位置的属性地址的过程,这些地址属性通常出现在参考材料中。也可以进行反地理编码,虽然现在很多商业的地理编码服务,但一些组织可能找不到适合他们的服务:地址信息不够更新,地址格式不一样或希望人们通过要素的本地名字来发现地址(例如,“大剧场,大体育馆等”)。所有这些情况需要特定的地理编码解决方案,这样就需要花费一定时间来构建适合自己需要的地理编码服务。



地址定位(.loc, .mxs, SDE batch locator)  -->ArcCatlog 

             


           地理数据服务



       使用ArcGIS Server,通过本地网络或互联网可以访问地理数据库。能够执行地理数据库复制操作,使用数据提取进行拷贝,执行地理数据库查询。该服务非常适合远程访问地理数据库。例如,公司可以安装ArcSDE地理数据库来管理洛杉矶和纽约办公室的数据。地理数据服务创建后,每个办公室可以发布其ArcSDE地理数据库到互联网。地理数据库可以被用来创建ArcSDE地理数据库的备份,还可以周期同步的在互联网上改变地理数据库。




数据库连接文件(.sde) 或personal geodatabase或file geodatabase或地图文档参考数据-->ArcCatlog

           几何服务 执行几何计算,例如缓冲区、单一化、计算面积和长度、投影。网络分析(需要网络分析层)。

不需要GIS资源-->N/A

           地理处理服务

       表现为一系列已发布的操作和分析地理信息的工具集。每个工具执行一个或多个操作,例如投影转换,增加属性表的列,创建要素缓冲区。工具接受输入(要素集,表,以及属性值),执行输入数据操作,生成表达在地图或者进一步需要处理的输出。工具可以被同步或异步执行。



带有工具图层的地图文档或工具层(.tbx)-->ArcMap或ArcCatalog 的ArcToolbox和ModelBuilder 


         Globe服务

    给网络用户提供3D地图浏览。

Globe 文档(.3dd, .pmf)-->ArcGlobe 
         图像服务      通过Web服务提供只读访问镶嵌影像或栅格数据集。

影像数据集或引用栅格数据集的图层文件或编译的图像服务定义(.ISCDef) -->ArcCatalog, ArcMap, 或ArcGIS Image Server 


         网络分析服务

     执行网络分析功能,例如最优路径分析、最近设施查找、计算服务面积。 包含网络分析层的地图文档 --> ArcMap 



   确定服务类型之后,接下来就是通过ArcGIS Desktop 创建资源(详见上面表格中的 所需资源-->制作工具)、将资源发布服务、最后就是浏览服务和测试REST 服务。

   1.浏览发布的服务:

  打开一个Web浏览器

          如果不知道网址,按照下面的步骤使用服务目录帮助找到网址   —    http://<服务器名称>/ < 实例名称>/rest/服务      ——这就是如何打开某一特定GIS服务器的服务目录。

     http://sampleserver5.arcgisonline.com/ArcGIS/rest/services

      首先会看到主页,其中列出了所有服务目录以及含有更多服务的的文件夹。除了服务名称,还能看到服务类型。点击服务名称,可以看到更多服务的信息。包括服务的元数据,包含的图层等信息。

   2.ArcGIS 基于REST 风格Web 服务的开发应用实例(以javascript 为例):

           2.1  使用ArcGIS Server JavaScript API 在Web 浏览器中显示瓦片地图:                 

                <html>

                      <head>

                        <meta http-equiv="Content-Type" content="text/html; charset=gbk">

                        <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">

                        <title>Create Map and add a TileMap layer</title>

                        <link rel="stylesheet" href="http://js.arcgis.com/3.12/esri/css/esri.css"/>

                        <style>

                          html, body, #map{

                            padding:0;

                            margin: 0;

                            height: 100%;

                          }

                        </style>

                        <script src="http://js.arcgis.com/3.12/"></script>

                        <script>

                          var map;

                          require([

                            "esri/map",

                            "esri/layers/ArcGISTiledMapServiceLayer"

                          ], function (Map, ArcGISTiledMapServiceLayer){

                            map = new Map("map");

                    var myLayer = new ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer");

                            map.addLayer(myLayer);

                          });

                        </script>

                      </head>

                      <body>

                        <div id="map"></div>

                      </body>

                  </html> 

           2.2  使用ArcGIS Server JavaScript API 在Web 输出查询图层的结果:                   

                  <html>

                      <head>

                        <meta http-equiv="Content-Type" content="text/html; charset=gbk">

                        <!--The viewport meta tag is used to improve the presentation and behavior of the samples 

                          on iOS devices-->

                        <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">

                        <title>Query State Info without Map</title>

                        <script src="http://js.arcgis.com/3.12/"></script>

                        <script>

                          require([

                            "dojo/dom", "dojo/on",

                            "esri/tasks/query", "esri/tasks/QueryTask", "dojo/domReady!"

                          ], function (dom, on, Query, QueryTask) {

                            var queryTask = new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5"); 

                            var query = new Query();

                            query.returnGeometry = false;

                            query.outFields = [

                              "SQMI", "STATE_NAME", "STATE_FIPS", "SUB_REGION", "STATE_ABBR",

                              "POP2000", "POP2007", "POP00_SQMI", "POP07_SQMI", "HOUSEHOLDS",

                              "MALES", "FEMALES", "WHITE", "BLACK", "AMERI_ES", "ASIAN", "OTHER",

                              "HISPANIC", "AGE_UNDER5", "AGE_5_17", "AGE_18_21", "AGE_22_29",

                              "AGE_30_39", "AGE_40_49", "AGE_50_64", "AGE_65_UP"

                            ];

                            on(dom.byId("execute"), "click", execute);

                            function execute () {

                              query.text = dom.byId("stateName").value;

                          query.where = "STATE_NAME like '%" + dom.byId("stateName").value + "'"; 

                              queryTask.execute(query, showResults);

                            }

                            function showResults (results) {

                              var resultItems = [];

                              var resultCount = results.features.length;

                              for (var i = 0; i < resultCount; i++) {

                                var featureAttributes = results.features[i].attributes;

                                for (var attr in featureAttributes) {

                                  resultItems.push("<b>" + attr + ":</b>  " + featureAttributes[attr] + "<br>");

                                }

                                resultItems.push("<br>");

                              }

                              dom.byId("info").innerHTML = resultItems.join("");

                            }

                          });

                        </script>

                      </head>

                      <body>

                         STATE_NAME:

                        <input type="text" id="stateName" value="">

                        <input id="execute" type="button" value="查询">

                        <br />

                        <br />

                        <div id="info" style="padding:5px; margin:5px; background-color:#eee;">

                        </div>

                      </body>

                   </html>

                





  参考书籍: ArcGIS Server 9.3 REST 基础教程


 


你可能感兴趣的:(REST,arcgis)