ArcGIS客户端开发学习笔记(五)——ArcGIS REST API基础
REST:表述性狀態(tài)轉(zhuǎn)移(REpresentational State Transfer)的簡稱,它定義了應(yīng)該如何正確地使用Web標(biāo)準(zhǔn)。
目前我的水平還沒到能夠深入理解REST的地步,就連略懂皮毛都沒達(dá)到。只是看過《深入淺出REST》,也談不上看懂,下面把這文章里面總結(jié)的REST的五個關(guān)鍵原則列出來。
1、為所有“事物”定義ID:使用URI標(biāo)識所有值得標(biāo)識的事物,特別是應(yīng)用中提供的所有“高級”資源,無論這些資源代表單一數(shù)據(jù)項、數(shù)據(jù)項集合、虛擬亦或?qū)嶋H的對象還是計算結(jié)果等。
2、將所有事物鏈接在一起:任何可能的情況下,使用鏈接指引可以被標(biāo)識的事物(資源)。也正是超鏈接造就了現(xiàn)在的Web。
3、使用標(biāo)準(zhǔn)方法:為使客戶端程序能與你的資源相互協(xié)作,資源應(yīng)該正確地實現(xiàn)默認(rèn)的應(yīng)用協(xié)議(HTTP),也就是使用標(biāo)準(zhǔn)的GET、PUT、POST和DELETE方法。
4、資源多重表述:針對不同的需求提供資源多重表述。
5、無狀態(tài)通信。
我自己的理解是:REST是一個Web架構(gòu)。
?
一、ArcGIS REST API簡介
ArcGIS REST API提供了簡單、開放的接口來訪問和使用ArcGIS Server發(fā)布的服務(wù)。使用ArcGIS REST API通過URL,可以獲取和操作每一個服務(wù)中的所有資源和操作。上面這句話很重要,指明了,使用REST API(就是ArcGIS REST API,下面都泛指ArcGIS REST API)其實就是通過URL來向GIS服務(wù)器獲取資源的操作(這是我目前的理解,歡迎指出理解不當(dāng)?shù)牡胤?#xff09;。比如,要通過REST API來訪問一個GIS Server,可以使用下面格式的URL:
1、java:
http:<host>:8399/arcgis/rest
2、.NET:
http://<host>/arcgis/rest
例如,要訪問我自己的電腦:http://localhost/arcgis/rest/services。在瀏覽器地址欄輸入這個地址后,可以看到下面這樣的網(wǎng)頁:
上面那個地址,也叫做基本地址。通過地址,可以訪問這個服務(wù)所提供的所有與之關(guān)聯(lián)的資源和操作。
Rest API是無狀態(tài)的,這意味著Rest沒有保存兩個請求之間的信息,所以每個請求必須包含能進行成功處理的信息。
?
?
二、服務(wù)端點(Server End Point)
每一個ArcGISServer都會提供一個Services Directory。ServicesDirectory是ArcGISServer Rest API的HTML格式的視圖。通過這個視圖可以瀏覽ArcGIS Server的內(nèi)容和獲取信息,比如服務(wù)的元數(shù)據(jù)和在開發(fā)應(yīng)用程序時支持的操作。每個ArcGIS Server實例在它的初始化時就創(chuàng)建好了這個Services Directory。
整個ServiceDirectory是基于REST框架的。在使用ServicesDirectory時,你通過一系列的鏈接(一般就是URL)進行導(dǎo)向。每當(dāng)點擊或者使用一個鏈接時,你可以看到一個包含更多有關(guān)這個服務(wù)器上什么是可用的信息的新頁面。這些信息就是使用URL通過REST框架得到的。
使用REST API時,首先需要明確端點(Endpoint),這通常代表著服務(wù)器的目錄。對于ArcGIS服務(wù)器,默認(rèn)的端點是:
http://<host>/<instance>/services/<folder>
說明:
- http://<host>是ArcGIS服務(wù)器的主機名。
- /<instance>是實例名,也就是建立的ArcGIS服務(wù)器的實例名,默認(rèn)為:“/arcgis/rest”。
- /services這指出了這是REST服務(wù)終端。你在根目錄下你可以看到這個ArcGIS服務(wù)器的所有服務(wù)。
- /<folder>如果這個URL中包括folder,你可以看到在這個目錄下的所有服務(wù)。
?
三、ArcGIS REST API框架
ArcGIS REST是一個層次分明的框架體系。其中的一些資源是直接反應(yīng)了服務(wù)本身的(Resources),比如目錄、地圖和圖層等等;而另外一些則是一些操作的結(jié)果(Operations),比如從一個地圖資源中導(dǎo)出一幅地圖圖片,或者得到一個圖層的查詢結(jié)果的集合。所以客戶端從服務(wù)器端總是能得到一個資源的表現(xiàn),在此一般分為兩種類型的資源:
- Resources(資源,直接反應(yīng)了服務(wù)本身的信息)
- Operations(操作,根據(jù)服務(wù)本身的資源進行某些處理后得到的結(jié)果)
下面是整個ArcGISREST API的框架圖
?
可以看到,Catalog是整個REST APIURL分層等級的根。根下面就是這個Server所發(fā)布的服務(wù),一共有8種類型的服務(wù):Map Service、Geocode Service、GP Service、Geometry Service、Image Service、Network Service、GeoData Service和Globe Service。每一種Service下面都有不同的操作和資源,而執(zhí)行這些操作和獲取這些資源都是通過URL的。
?
?
四、ArcGIS REST API的使用
1、使用步驟
從根本上說,RESTAPI就是由網(wǎng)址組成的。使用REST API的過程基本分為四個步驟:
1)構(gòu)建請求網(wǎng)址
A、確定端點:每個GIS服務(wù)都有一個端點。例如,ArcGIS Server上Demographics文件夾下名為ESRI_Census_USA的一個地圖服務(wù)sampleserver1.arcgisonline.com的端點為:http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer.
B、確定操作:不同地理信息系統(tǒng)服務(wù)支持不同的操作。不同的操作會返回不同的結(jié)果。地圖服務(wù)可以地圖輸出,點擊查看,查找和生成KML。輸出地圖可以生成地圖,同時可以點擊產(chǎn)看是否給出地圖服務(wù)圖層的屬性表。
C、確定參數(shù):不同的操作需要不同的參數(shù)。例如,如果請求地圖圖片,需要提供地圖范圍的四周角點坐標(biāo)參數(shù),也就是地圖覆蓋范圍。
D、確定輸出格式:REST API支持很多輸出格式,例如JSON,KMZ,圖片和HTML。確定輸出格式的重要參數(shù)是f。在URL請求的查詢字符串后面加上”f=<你的格式>”來確定輸出格式。例如:f=html返回的數(shù)據(jù)格式為html;f=json返回的數(shù)據(jù)格式為json;f=image返回的格式為image等等。
我們就以上面的4個步驟來構(gòu)建自己需要的URL。一般來說,格式如下:
http://{ArcGIS Server name}/ArcGIS/rest/services/{foldername}/{service name}/{service type}/{operation}?{{parameter1}={somevalues}&{parameter2}={some values}&…&{parameter}={some values}}
可以看到,整個URL請求分為兩個部分,第一部分是服務(wù)的端點和操作類型,也就是“?”前面的部分;第二部分是查詢字符串,即請求參數(shù),“?”后面的部分。
2)發(fā)送請求到ArcGIS Server
提交URL請求到ArcGIS Server Sending,可以不通過編程發(fā)送URL請求。例如,只需在網(wǎng)頁瀏覽器的地址欄輸入網(wǎng)址,如IE或Firefox。每種編程語言都用不同的提出請求方式。
3)接受服務(wù)器的響應(yīng)
接受ArcGISServer的響應(yīng),ArcGIS Server處理請求并返回響應(yīng)到客戶端。對于一個同步的工作,客戶端一直等待收到服務(wù)器的響應(yīng)。對于一部工作,服務(wù)器發(fā)送一份工作編號來定期跟蹤客戶端的工作狀態(tài)。
4)解析服務(wù)器響應(yīng)
ArcGIS Server REST Web服務(wù)的響應(yīng)可以是多種格式,例如JSON,KML,圖片和HTML。客戶端可判斷響應(yīng)時成功還是失敗。如果失敗了,客戶端可以判斷錯誤信息。如果響應(yīng)是成功的,客戶端可以解析響應(yīng)所需的信息,并恰當(dāng)?shù)乩眠@些信息。
?
2、使用方式
1)不編程使用
可以使用Web瀏覽器、ArcGISServer JavaSccript地圖瀏覽器(f=jsapi)、ArcGIS Explorer(f=nmf)、ArcMap(f=lyr&v=9.3)、微軟虛擬地球(f=ve)、谷歌地圖(f=gmaps)、谷歌地球來使用ArcGIS REST API。
用不同的工具使用RESTAPI的關(guān)鍵就是設(shè)置不同的f參數(shù)。下面是一個利用Web瀏覽器使用REST API的Demo。我是用的是我自己電腦上發(fā)布的世界地圖服務(wù)World,在瀏覽器上輸出我國范圍的地圖圖片,需要指定下列參數(shù):
- 操作:輸出圖片f=image。
- 地圖邊界框(取值格式:西、南、東、北):bbox=72,3,135.5,53,5。
- 輸出圖像尺寸:size=600,400
- 輸出格式:f=image
根據(jù)上述信息,構(gòu)建的URL如下:
http://localhost/ArcGIS/rest/services/World/MapServer/export?bbox=72,3,135.5,53,5&size=600,400&f=image
在瀏覽器地址欄輸出上面URL后得到的結(jié)果如下:
2)編程使用
這里我用客戶端語言JavaScript借助Ajax技術(shù)使用REST API。通過REST API讀取World服務(wù)的第一個圖層的名字并顯示在彈出對話框上。
代碼 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
3 ?<html xmlns="http://www.w3.org/1999/xhtml">
4 ?<head>
5 <title>REST API DEMO</title>
6 <script type="text/javascript" language="javascript">
7 var request=null;
8 //根據(jù)不同瀏覽器創(chuàng)建請求對象
9 ? function createRequest()
10 {
11 try{
12 request=new XMLHttpRequest();
13 }
14 catch(trymicrosoft)
15 {
16 try{
17 request = new ActiveXObject("Msxm12.XMLHTTP");
18 }
19 catch(othermicrosoft)
20 {
21 try{
22 request = new ActiveXObject("Microsoft.XMLHTTP");
23 }
24 catch(faild)
25 {
26 request=null;
27 }
28 }
29 }
30 if(request==null)
31 alert("創(chuàng)建request對象失敗");
32 }
33 function sendRESTrequest()
34 {
35 createRequest();
36 var restURL="http://localhost/ArcGIS/rest/services/World/MapServer/0?f=json";//構(gòu)建的REST URL
37 ? request.open("GET",restURL,true);//請求對象初始化連接
38 ? request.onreadystatechange=processResponse;//設(shè)置服務(wù)器響應(yīng)請求后的回調(diào)函數(shù)
39 ? request.send(null);//向服務(wù)器發(fā)送請求
40 ? }
41 function processResponse()
42 {
43 if(request.readyState==4)//就緒狀態(tài)(ready state)有4個值“1:連接剛被初始化;
44 ? { //2:正在處理請求;3:服務(wù)器快要完成請求;4:請求完成,瀏覽器得到響應(yīng)”
45 ? var response=eval('('+request.responseText+')');//返回的是一個文本,需要用eval函數(shù)轉(zhuǎn)成json對象
46 ? alert("圖層ID:"+response.id+"\n"+
47 "圖層名:"+response.name+"\n"+
48 "圖層的顯示字段:"+response.displayField);
49 }
50 }
51 </script>
52 </head>
53 <body onload="sendRESTrequest()">
54
55 </body>
56 </html>
57
上面就是利用Ajax技術(shù)使用ArcGIS RESTAPI。關(guān)鍵就是url的構(gòu)建。這里需要注意的是,這樣的請求一般是跨域請求,隨著安全性的增加,這樣的請求將慢慢被禁止,所以在實際使用時最好使用本地代理程序進行請求。
?
總結(jié)
REST是一個Web應(yīng)用程序框架。ArcGIS REST API簡單易懂且高效。使用ArcGIS REST API的關(guān)鍵兩點:熟悉它的框架、構(gòu)建正確的符合自己需要的URL請求。
?
參考資料:
《ArcGIS Server REST API Help》
《ArcGISServer 9.3 REST基礎(chǔ)教程》
《深入淺出REST》:www.infoq.com/cn/articles/rest-introduction
《深入淺出Javascript API 第一講淺析 AGS REST API》:http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=31969
轉(zhuǎn)載于:https://www.cnblogs.com/carlbiao/archive/2010/09/09/1822419.html
總結(jié)
以上是生活随笔為你收集整理的ArcGIS客户端开发学习笔记(五)——ArcGIS REST API基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最常用的javascript自定义函数大
- 下一篇: Ubuntu9.10安装常用软件