关于REST SOE
一种扩展ArcGIS for Server并能够很好的让Web API方便使用的方式就是以Web服务的形式编写SOE。
基于REST的服务通过简单的数据类型接收请求参数并返回响应结果,一般是JSON类型。如果你以前没开发过REST,不要被它吓倒。JSON仅仅是一种以标准方式被程序阅读的格式化的文本信息。
为了能够使用REST SOE Web服务,需要获取SOE的URL并且需要向URL后面添加一些其他的参数信息,比如x、y坐标或者是图层名称。然后服务器会完成相应的工作并返回响应信息,这些响应信息有可能是属性数据、矢量点或者是图片。
REST服务示例
下面的代码是一个使用ArcGIS Server REST 服务的示例。第一个示例没有使用SOE,但是它有助于理解如何请求一个REST Web服务。在这个例子中,你要请求震级大于6.0的近期的地震。这是发送到服务器的URL。注意参数是以问好(?)开始。
http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Earthquakes/EarthquakesFromLastSevenDays/MapServer/0/query?where=magnitude>6&f=pjson
以下是被服务器以JSON格式返回的结果,你可以看到它是一种结构化的键值对集合。它们被大括号{}包裹在一起封装成对象。看如下的代码示例:
{ "displayFieldName" : "eqid", "fieldAliases" : { "eqid" : "Earthquake ID" }, "geometryType" : "esriGeometryPoint", "spatialReference" : { "wkid" : 4326 }, "fields" : [ { "name" : "eqid", "type" : "esriFieldTypeString", "alias" : "Earthquake ID", "length" : 50 } ], "features" : [ { "attributes" : { "eqid" : "c0000f0y" }, "geometry" : { "x" : 148.95690000000002, "y" : -6.0207999999999515 } } ] }
客户端应用程序可以阅读和解析JSON格式的响应,并在程序中对它进行处理。比如一个Web浏览器可以通过上面代码中的geometry中的x、y坐标绘制一个点,从而能够显示出地震的位置。
REST SOE 示例
上面的示例仅仅使用了一个固定的ArcGIS Server地图服务,没有使用SOE。现在来看一下REST SOE的调用。下面的URL会根据经纬度去请求高程信息(这个SOE被叫做ElevationsSOE):
http://sampleserver4.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/MapServer/exts/ElevationsSOE/ElevationLayers/1/GetElevationAtLonLat?lon=-123&lat=47&f=pjson下面是该URL各部分的详细解析。注意REST SOE是如何暴露资源和操作的。资源就是服务器上你可以获取信息的东西。操作是服务器去获取信息的方法。在这个例子中,GetElevationAtLogLat就是一种操作。看下面的插图:
通过使用这个操作,服务器以简单JSON对象的形式返回结果。这个值可以被用于表格、标注或者应用程序的其他地方。示例如下:
{ "elevation" : 83.003478588350134 }
当这些REST服务被调用的时候会发生什么呢?最可能的是,服务器会运行一些ArcObjects代码去得到结果。但是客户端程序不需要了解ArcObjects。客户端只需要知道如何发送RUL请求以及获取JSON格式的数据。