码迷,mamicode.com
首页 > Windows程序 > 详细

ArcGIS REST API 初认知

时间:2015-04-01 19:22:00      阅读:720      评论:0      收藏:0      [点我收藏+]

标签:

REST

REST,资源表现形式的转变。

REST是一种软件架构风格。REST模式相比复杂的SOAP和XML-RPC对比来看,前者更加简洁,越来越多的WEB服务开始采用REST架构风格。

REST架构风格把网络上分布的各种数据看做是资源,分布在各处的资源由URI来标识,而客户端应用通过URI来获取资源的表现形式。

REST是一种设计风格而不是一种标准。

REST架构的应用通常基于HTTP、URI、XML以及HTML这些现有的协议和标准搭建,资源由URI来指定。对资源的操作包括创建、获取、修改和删除,正好对应于HTTP协议的GET、POST、PUT和DELETE方法。

REST通过操作资源的表现形式来操作资源。

 

REST API

暂且就把REST API理解为访问资源的URI。

 

ArcGIS REST API

自9.3版本,ArcGIS Server开始提供REST API,客户端通过REST API访问服务器上发布的GIS服务。

比如:

查看服务器目录:http://192.168.71.182/ArcGIS/rest/services

        http://192.168.71.182/ArcGIS/rest/services?f=html

        http://192.168.71.182/ArcGIS/rest/services?f=pjson

这三个URI可以理解为获得GIS服务目录的API,第一和第二个返回Html页面,第三个则返回json信息:

技术分享技术分享

技术分享

这是通过HTTP的GET方法获得资源,资源分别以html和json格式返回。

生成管理员令牌API:http://<IP>/ArcGIS/rest/admin/generateToken?f=html

这个操作只支持POST方法,因为存在密码的操作。

技术分享

技术分享

POST方法,下面是返回结构(json)

{
  "token" : "VmPxYEpYzr47euTWGlRbgA2GiturXTUZo8PiQFD3w3RBNHMV_3vSz7QbrirEOX1b5RkHlANh7glFbbJfVeilCA..", 
  "expires" : 1427878211494
}

清楚缓存API(利用上面生成的Token):http://192.168.71.182/ArcGIS/rest/admin/cache/clear?token=VmPxYEpYzr47euTWGlRbgA2GiturXTUZo8PiQFD3w3RBNHMV_3vSz7QbrirEOX1b5RkHlANh7glFbbJfVeilCA..&f=json

返回结果:

{"success":"true"}

ArcGIS Server提供很多REST API,如下:

Map Service APIhttp://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer

瓦片地图的REST API:http://services.arcgisonline.com/arcgis/rest/services/ESRI_Imagery_World_2D/MapServer/tile/0/0/1

获得图层和表:http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/layers?f=pjson

查询API:http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/dynamicLayer/query?layer={"id":101,"definitionExpression":"\"sub_region\" like ‘Pacific‘","source":{"type":"mapLayer","mapLayerId":3}}&text=California&returnGeometry=true&f=html

查询所需的参数:http://resources.arcgis.com/en/help/arcgis-rest-api/index.html#/Query_Map_Service_Dynamic_Layer/02r3000000z6000000/

Geometry Services REST API:http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/Geometry/GeometryServer

其中的Buffer 的API:http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/Geometry/GeometryServer/buffer?geometries=-117%2C34&inSR=4326&outSR=4326&bufferSR=3857&distances=1000&unit=&unionResults=true&geodesic=false&f=pjson

Feature Service的REST API:http://sampleserver6.arcgisonline.com/arcgis/rest/services/Wildfire/FeatureServer/0

技术分享

可以看到,支持添加、修改、删除等操作。其实在客户端对图层进行增删改的操作同样是使用REST API。

 

ArcGIS 客户端 API(for Flex&JavaScript&SilverLight)

客户端API其实质是对ArcGIS Server REST API的再包装,其本质是通过HTTP Service访问REST API,然后处理返回结果,以地图和数据的形式显示处理。

比如:

浏览地图就是不停的根据范围去获取服务器上的切片REST API:http://services.arcgisonline.com/arcgis/rest/services/ESRI_Imagery_World_2D/MapServer/tile/0/0/1

然后将切片拼接在一块儿形成我们看到的地图,而使用客户端则简化为通过map控件或类,将map service的REST API设定为http://services.arcgisonline.com/arcgis/rest/services/ESRI_Imagery_World_2D/MapServer。

同样,地图的查询、GP服务、几何服务、网络服务都是对相应的REST API的封装。

如:添加要素

技术分享

这是REST API的Post方式。

技术分享

返回下面结果:

{
  "addResults" : [
    {
      "objectId" : 7, 
      "globalId" : null, 
      "success" : true
    }
  ]}

我们完全可以使用任何一种能够进行HTTP 访问的语言来访问ArcGIS REST API实现相应功能。

以下转载至:http://www.cnblogs.com/esrichina/archive/2012/11/05/2754580.html

在Flex中需要三步来完成上述操作,首先构造一个JSON格式字符串;其次调用对应的Rest接口;最后对返回结果进行处理。

 

var feature:Object = new Object();
//设置几何信息
feature.geometry = new Object();
feature.geometry.x = x;
feature.geometry.y = y;
//设置属性信息
feature.attributes = new Object(); 
feature.attributes["description"] = "addPoint";
feature.attributes["type"] = type;
                 
//把对象转成JSON,备注:此处使用的是Flash Builder的JSON类,需要SDK4.5及其以上版本的支持。
//当然也可以使用ArcGIS Flex API带的JSON类,在3.0版本中JSON类该层了JSONUtil。               
var arr:Array = new Array();
arr.push(feature);
var features:String = JSON.stringify(arr);

在Flex中调用ArcGIS Server REST API,通过URLRequest调用一个URL地址就可以了,同时需要将JSON赋值给URLRequest的data属性,设置format为json。至于是选择POST还是GET,这个取决于REST接口支持哪种方式。

//调用FeatureServer支持的addFeature操作,添加元素;
var loader:URLLoader = new URLLoader();
request.method = URLRequestMethod.POST;
var data:URLVariables = new URLVariables();
data.f = "json";
data.features = features;
request.data = data;

最后需要对返回的结果进行处理,这里尤其要强调的是,执行后有正确和错误两种返回结果。需要对返回的内容进行判断,才能最终确定是否能正确执行。

loader.addEventListener(Event.COMPLETE, function(event:Event):void{
//对结果进行处理,分成功和失败两种
});            
loader.addEventListener(IOErrorEvent.IO_ERROR,function(event:Event):void{
//执行失败
});            
loader.load(request);

更新和删除点:

和新增点相差无几,就是调用的REST接口和返回结果有所不同而已,当然需要构造对应的JSON字符串。

 

感想

我们完全可以为其他语言制作一套客户端API。比如使用C#调用ArcGIS REST API,并将其按照一定的设计模式封装,完成ArcGIS功能的开发,不过这就搞不清楚这是桌面GIS还是WEBGIS了。

 

ArcGIS REST API 初认知

标签:

原文地址:http://www.cnblogs.com/The-SEA/p/4384415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!