關(guān)鍵詞:ArcGIS,ArcGIS Server,SQL, PostgreSQL
動(dòng)態(tài)地圖服務(wù)主要用于地圖的展示,其還有一個(gè)不足,即它不允許用戶與地圖的子圖層進(jìn)行交互,不能遍歷得到每個(gè)圖層,也不能查詢圖層。這里使用要素圖層(Feature Layer)來(lái)代替它。
Feature Layer可以訪問(wèn)每個(gè)空間要素及其屬性,可以將其看成是ArcMap中的要素類(lèi)(Feature Class),它可以接受用戶的查詢.
1.配置ArcMap、ArcGIS Server和PostgreSQL
由于ArcMap是32位,而PostgreSQL是64位,32位的桌面程序ArcMap無(wú)法連接64位的Postgesql數(shù)據(jù)庫(kù)的,因此,需要將PostgreSQL 32位的動(dòng)態(tài)庫(kù)文件拷貝到ArcMap的bin目錄下。將tools\postgresql-9.0.5-1-windows-x86-dlls目錄下的5個(gè)dll文件(這五個(gè)dll 是從32位的postgressql客戶端中抽取出來(lái))拷貝到ArcMap的bin目錄下,
我的機(jī)器上是C:\Program Files (x86)\ArcGIS\Desktop10.2\bin
跟上述情況類(lèi)似,要從 ArcGIS for Server 連接,則需要 64 位文件。將PostgreSQL 64位的動(dòng)態(tài)庫(kù)文件拷貝到ArcGIS for Server的bin目錄下。將tools\postgresql-9.0.5-1-windows-x64-dlls目錄下的5個(gè)dll文件(這五個(gè)dll 是從64位的postgressql客戶端中抽取出來(lái))拷貝到ArcGIS for Server的bin目錄下,我的機(jī)器上是C:\Program Files\ArcGIS\Server\bin。
如果已經(jīng)運(yùn)行 ArcGIS for Server 正在運(yùn)行,則請(qǐng)重啟 ArcGIS Server 以便識(shí)別放入 bin 目錄的文件。
在 PostgreSQL 中創(chuàng)建地理數(shù)據(jù)庫(kù)依賴于是否存在 ST_Geometry 庫(kù)。為了將空間數(shù)據(jù)存儲(chǔ)在PostgreSQL中,需要利用ST_Geometry 存儲(chǔ)類(lèi)型存儲(chǔ)空間數(shù)據(jù),ST_Geometry 數(shù)據(jù)類(lèi)型可通過(guò)OGC定義的SQL語(yǔ)言來(lái)進(jìn)行訪問(wèn),通過(guò)向表示地理要素的對(duì)象(點(diǎn)、線及面)提供存儲(chǔ)空間,此存儲(chǔ)類(lèi)型擴(kuò)展了數(shù)據(jù)庫(kù)的功能。為了使PostgreSQL支持ST_Geometry 存儲(chǔ)類(lèi)型,需要將st_geometry.dll動(dòng)態(tài)庫(kù)拷貝到PostgreSQL的lib文件夾下。st_geometry.dll可以從ArcGIS桌面安裝目錄下獲得,比如我的在C:\ProgramFiles(x86)\ArcGIS\Desktop10.2\DatabaseSupport\PostgreSQL\Windows64(我的機(jī)器是64位),然后拷貝到C:\Program Files\PostgreSQL\9.0\lib 可以根據(jù)自己的安裝路徑來(lái)設(shè)置。
1.2 創(chuàng)建企業(yè)級(jí)地理數(shù)據(jù)庫(kù)
在Arc Toolbox中打開(kāi)【創(chuàng)建企業(yè)級(jí)地理數(shù)據(jù)庫(kù)】工具箱,如下圖所示。
提供以 postgres 超級(jí)用戶連接 PostgreSQL 數(shù)據(jù)庫(kù)集群所需的信息,以創(chuàng)建數(shù)據(jù)庫(kù)和 sde 用戶。此外,還必須指向在授權(quán) ArcGIS for Server 實(shí)例時(shí)生成的密鑰代碼文件。【實(shí)例】是PostgreSQL運(yùn)行的主機(jī)名,本例中是本機(jī)localhost,數(shù)據(jù)庫(kù)管理員密碼是PostgreSQL超級(jí)用戶的密碼postgres,地理數(shù)據(jù)庫(kù)管理員密碼設(shè)置為sde。點(diǎn)擊【確定】,等待創(chuàng)建成功。
這樣,在 PostgreSQL 中就創(chuàng)建了數(shù)據(jù)庫(kù)、sde 用戶、sde 方案及地理數(shù)據(jù)庫(kù)。
3.連接到已創(chuàng)建的地理數(shù)據(jù)庫(kù)
存儲(chǔ)在地理數(shù)據(jù)庫(kù)中的數(shù)據(jù)應(yīng)歸sde 用戶之外的其他用戶所有。要?jiǎng)?chuàng)建用戶,必須先以數(shù)據(jù)庫(kù)管理員(本例采用 postgres 超級(jí)用戶)連接地理數(shù)據(jù)庫(kù)。
ArcMap 的目錄樹(shù)中,展開(kāi)【數(shù)據(jù)庫(kù)連接】節(jié)點(diǎn),然后雙擊【添加數(shù)據(jù)庫(kù)連接】。將打開(kāi)【數(shù)據(jù)庫(kù)連接】對(duì)話框。
提供以 postgres 超級(jí)用戶連接新建數(shù)據(jù)庫(kù)所需的信息。本例中,以 postgres 用戶連接新建的 sde地理數(shù)據(jù)庫(kù):
由于將在地理處理工具中使用此連接文件,因此必須選中【保存用戶名和密碼】。運(yùn)行此工具后,應(yīng)在連接文件中取消選中此選項(xiàng),以不同用戶進(jìn)行連接,或者刪除此連接文件從而防止可以訪問(wèn)此文件的其他用戶以數(shù)據(jù)庫(kù)管理員登錄地理數(shù)據(jù)庫(kù)。
單擊【確定】創(chuàng)建連接。在目錄樹(shù)中的數(shù)據(jù)庫(kù)連接節(jié)點(diǎn)下出現(xiàn)新的連接文件。
接下來(lái),可以運(yùn)行創(chuàng)建數(shù)據(jù)庫(kù)用戶工具。
4.從文件型數(shù)據(jù)庫(kù)遷移到企業(yè)級(jí)地理數(shù)據(jù)庫(kù)
打開(kāi)ArcCatalog,瀏覽到Bestaurants.gdb地理數(shù)據(jù)庫(kù)。
右擊Belize_Landbase,選擇復(fù)制
瀏覽到kobe.localhost.sde數(shù)據(jù)庫(kù)連接,右擊選擇粘貼。對(duì)要素類(lèi)Food_and_Drinks同樣做此操作,彈出以下對(duì)話框。點(diǎn)擊確定,完成數(shù)據(jù)傳輸。
這樣,企業(yè)級(jí)數(shù)據(jù)庫(kù)中就包含如下數(shù)據(jù),注意在要素類(lèi)和關(guān)系類(lèi)之前都有數(shù)據(jù)庫(kù)和用戶名(表示方案,每個(gè)PostghreSQL用戶都自己的方案schema)前綴。
5.發(fā)布要素服務(wù)
在ArcMap中,選擇【文件】菜單的【共享為】-【服務(wù)】,打開(kāi)【共享為服務(wù)】向?qū)А?/p>
選擇【發(fā)布服務(wù)】,點(diǎn)擊【下一步】,服務(wù)名稱(chēng)填寫(xiě)B(tài)elizeFS,表示Belize要素服務(wù),點(diǎn)擊【下一步】,點(diǎn)擊【繼續(xù)】,選擇【功能】中的【Feature Access】來(lái)開(kāi)啟要素服務(wù)
點(diǎn)擊【分析】,錯(cuò)誤如下,要素服務(wù)需要一個(gè)已注冊(cè)的數(shù)據(jù)庫(kù)
右擊該錯(cuò)誤,選擇【顯示數(shù)據(jù)存儲(chǔ)注冊(cè)頁(yè)面】
打開(kāi)【ArcGIS Server屬性】對(duì)話框,點(diǎn)擊加號(hào),選擇【注冊(cè)數(shù)據(jù)庫(kù)】。
在【注冊(cè)數(shù)據(jù)庫(kù)】對(duì)話框中,點(diǎn)擊【導(dǎo)入】,選擇剛建立的數(shù)據(jù)庫(kù)連接(我的是kobe.localhost.sde連接),確保【與發(fā)布者數(shù)據(jù)庫(kù)連接相同】選項(xiàng)選上,給注冊(cè)數(shù)據(jù)庫(kù)起個(gè)名字,點(diǎn)擊【確定】。
完成的數(shù)據(jù)庫(kù)注冊(cè)如下。點(diǎn)擊【確定】。
點(diǎn)擊【分析】,應(yīng)該看不到錯(cuò)誤,但可能還有警告,如下圖所示。
繼續(xù)發(fā)布要素服務(wù),可以成功發(fā)布。
訪問(wèn):http://localhost:6080/arcgis/rest/services/,可以看到發(fā)布的服務(wù)。
在require函數(shù)中加上FeatureLayer:
require([“esri/map”,“esri/layers/featurelayer”, “esri/dijit/Legend”],
function(Map, FeatureLayer, Legend) {
//load the layer into an object
var lyr_foodanddrinks = new esri.layers.FeatureLayer
(“http://localhost:6080/arcgis/rest/services/Belize/MapServer/0”,
{
outFields: [""]
}
);
//load another layer into an object
var lyr_landbase = new esri.layers.FeatureLayer
(“http://localhost:6080/arcgis/rest/services/Belize/MapServer/1”,
{
outFields: [""]
}
);
}
本文鏈接:http://m.aiquka.com/blog/166.html
本文標(biāo)簽:ArcGIS