ArcGIS REST API 初认知

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();

var request:URLRequest = new URLRequest("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/FeatureServer/0/addFeatures");

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了。

时间: 2024-10-29 03:32:43

ArcGIS REST API 初认知的相关文章

[转]ArcGIS JavaScript API本地部署离线开发环境

1 获取ArcGIS JavaScript API API的下载地址http://support.esrichina.com.cn/2011/0223/960.html,在下载页面会看到api和sdk的下载链接,api是我们开发需要的库,sdk是说明文档和例子,点击下载api的最新版3.2. 2 本地部署API 打开API包中的arcgis_js_api/library/install.htm安装说明,本文依据此英文说明而来. 解压后在IIS中建立应用程序,如下图.配置好API应用程序后,其路径

ArcGIS Javascript API 加载高德在线地图扩展

利用ArcGIS JavaScript API加载高德在线地图的扩展 /** * Created by WanderGIS on 2015/7/15. */ define(["dojo/_base/declare", "esri/geometry/Extent", "esri/SpatialReference", "esri/geometry/Point", "esri/layers/TileInfo",

ArcGIS JavaScript API本地部署离线开发环境[转]

原文地址:http://www.cnblogs.com/brawei/archive/2012/12/28/2837660.html 1 获取ArcGIS JavaScript API API的下载地址http://support.esrichina.com.cn/2011/0223/960.html,在下载页面会看到api和sdk的下载链接,api是我们开发需要的库,sdk是说明文档和例子,点击下载api的最新版3.2. 2 本地部署API 打开API包中的arcgis_js_api/libr

geoserver图层属性查询及查询结果转换为arcgis js api能使用的格式

一个项目使用了ArcGIS JS API开发GIS展示层,但GIS服务使用了Geoserver,这时加载Geoserver数据和查询数据就和之前完全不一样了,以下介绍下我使用ArcGIS JS API+Geoserver开发过程中解决Geoserver图层属性查询的一个方案. 以Geoserver中发布的图层 city 为例.我现在要查询city图层中ID=53090000000000的对象,并使用ArcGIS JS API将查询到的结果显示出来. 首先找到查询的实际地址: http://loc

使用ArcGIS JavaScript API 3.18 加载天地图

对于中国开发者在创建GIS应用的时候,往往比较头疼的是底图资源的缺乏.其实国家测绘地信局就提供一个很好的免费资源:天地图.使用ArcGIS API的开发人员可以直接利用该资源作为地图应用的底图. ArcGIS JavaScript API最近新推出了3.18版本.所以下面示例代码将基于该版本. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf

如何正确响应ArcGIS JavaScript API中图形的鼠标事件

在使用ArcGIS JavaScript API编写程序的时候,程序员往往需要完成这样一个功能:点击地图上的图形,自动进行专题GIS数据查询,当在地图非图形区域上点击时,自动进行底图兴趣点查询. 由于专题GIS图形是叠加在底图上的,所以我们在处理地图的鼠标点击事件时,就需要根据实际点击的位置和内容来对不同的数据进行查询. ArcGIS JavaScript API为编程人员分别提供了针对地图对象和图形的两个鼠标点击事件. 下面是示例代码: 1 <!DOCTYPE html> 2 <htm

ArcGIS JavaScript API 3.11本地化安装

1.下载API 美国站点:http://www.esri.com/apps/products/download/index.cfm?fuseaction=download.all#ArcGIS_API_for_JavaScript 中国ESRI网站:http://support.esrichina-bj.cn/support/download/software/ 2.安装 下载完毕后,解压Library:arcgis_js_v311_api.zip和SDK:arcgis_js_v311_sdk.

基于ArcGIS Flex API实现动态标绘(1.1)

动态标绘API 1.1版本号.相较前一版本号1.0(点击进入).该版本号提供标绘符号的编辑功能. 编辑功能包含两种编辑状态:编辑控制点.对标绘符号进行旋转.八方向拉伸.平移. 编辑控制点例如以下图所看到的:   对标绘符号进行旋转.八方向拉伸.平移,例如以下图所看到的:   代码演示样例 private var plotDrawTool:PlotDrawTool; private var plotEditTool:PlotEditTool; private var lineSymbol:Simp

空间数据可视化:ArcGIS JavaScript API 二、三维数据一体化

  ESRI不愧为GIS业界巨头,从本科起就开始接触ArcGIS系列,桌面端从ArcMap 到 ArcPro,服务端从ArcIMS 到 ArcServer,无不体现了这个了不起的公司在与时俱进.不断创新.现在的一些列产品好多我都没有用过,像 portal,pro,webbuilder.........网络GIS 现在好像是只更新JavaScript了,GIS与计算机的关系,都被ESRI公司的产品体现的淋漓尽致.今天来劲,就看了下新的API,果然是集美貌与才华于一身的API-- 先上个官方的案例,