首頁 新聞中心 技術博客

ArcGIS地圖要素圖層(Feature Layer)發布及調用

發布時間:2021-10-08 23:50:26   瀏覽量:3856   作者:GIS前沿

關鍵詞:ArcGIS,ArcGIS Server,SQL, PostgreSQL

動態地圖服務主要用于地圖的展示,其還有一個不足,即它不允許用戶與地圖的子圖層進行交互,不能遍歷得到每個圖層,也不能查詢圖層。這里使用要素圖層(Feature Layer)來代替它。

Feature Layer可以訪問每個空間要素及其屬性,可以將其看成是ArcMap中的要素類(Feature Class),它可以接受用戶的查詢.

1.配置ArcMap、ArcGIS Server和PostgreSQL

由于ArcMap是32位,而PostgreSQL是64位,32位的桌面程序ArcMap無法連接64位的Postgesql數據庫的,因此,需要將PostgreSQL 32位的動態庫文件拷貝到ArcMap的bin目錄下。將tools\postgresql-9.0.5-1-windows-x86-dlls目錄下的5個dll文件(這五個dll 是從32位的postgressql客戶端中抽取出來)拷貝到ArcMap的bin目錄下,
我的機器上是C:\Program Files (x86)\ArcGIS\Desktop10.2\bin


跟上述情況類似,要從 ArcGIS for Server 連接,則需要 64 位文件。將PostgreSQL 64位的動態庫文件拷貝到ArcGIS for Server的bin目錄下。將tools\postgresql-9.0.5-1-windows-x64-dlls目錄下的5個dll文件(這五個dll 是從64位的postgressql客戶端中抽取出來)拷貝到ArcGIS for Server的bin目錄下,我的機器上是C:\Program Files\ArcGIS\Server\bin。

如果已經運行 ArcGIS for Server 正在運行,則請重啟 ArcGIS Server 以便識別放入 bin 目錄的文件。

在 PostgreSQL 中創建地理數據庫依賴于是否存在 ST_Geometry 庫。為了將空間數據存儲在PostgreSQL中,需要利用ST_Geometry 存儲類型存儲空間數據,ST_Geometry 數據類型可通過OGC定義的SQL語言來進行訪問,通過向表示地理要素的對象(點、線及面)提供存儲空間,此存儲類型擴展了數據庫的功能。為了使PostgreSQL支持ST_Geometry 存儲類型,需要將st_geometry.dll動態庫拷貝到PostgreSQL的lib文件夾下。st_geometry.dll可以從ArcGIS桌面安裝目錄下獲得,比如我的在C:\ProgramFiles(x86)\ArcGIS\Desktop10.2\DatabaseSupport\PostgreSQL\Windows64(我的機器是64位),然后拷貝到C:\Program Files\PostgreSQL\9.0\lib 可以根據自己的安裝路徑來設置。

1.2 創建企業級地理數據庫

在Arc Toolbox中打開【創建企業級地理數據庫】工具箱,如下圖所示。

提供以 postgres 超級用戶連接 PostgreSQL 數據庫集群所需的信息,以創建數據庫和 sde 用戶。此外,還必須指向在授權 ArcGIS for Server 實例時生成的密鑰代碼文件?!緦嵗渴荘ostgreSQL運行的主機名,本例中是本機localhost,數據庫管理員密碼是PostgreSQL超級用戶的密碼postgres,地理數據庫管理員密碼設置為sde。點擊【確定】,等待創建成功。


這樣,在 PostgreSQL 中就創建了數據庫、sde 用戶、sde 方案及地理數據庫。

3.連接到已創建的地理數據庫

存儲在地理數據庫中的數據應歸sde 用戶之外的其他用戶所有。要創建用戶,必須先以數據庫管理員(本例采用 postgres 超級用戶)連接地理數據庫。

ArcMap 的目錄樹中,展開【數據庫連接】節點,然后雙擊【添加數據庫連接】。將打開【數據庫連接】對話框。

提供以 postgres 超級用戶連接新建數據庫所需的信息。本例中,以 postgres 用戶連接新建的 sde地理數據庫:

由于將在地理處理工具中使用此連接文件,因此必須選中【保存用戶名和密碼】。運行此工具后,應在連接文件中取消選中此選項,以不同用戶進行連接,或者刪除此連接文件從而防止可以訪問此文件的其他用戶以數據庫管理員登錄地理數據庫。

單擊【確定】創建連接。在目錄樹中的數據庫連接節點下出現新的連接文件。

接下來,可以運行創建數據庫用戶工具。

4.從文件型數據庫遷移到企業級地理數據庫

打開ArcCatalog,瀏覽到Bestaurants.gdb地理數據庫。
右擊Belize_Landbase,選擇復制

瀏覽到kobe.localhost.sde數據庫連接,右擊選擇粘貼。對要素類Food_and_Drinks同樣做此操作,彈出以下對話框。點擊確定,完成數據傳輸。

這樣,企業級數據庫中就包含如下數據,注意在要素類和關系類之前都有數據庫和用戶名(表示方案,每個PostghreSQL用戶都自己的方案schema)前綴。

5.發布要素服務

在ArcMap中,選擇【文件】菜單的【共享為】-【服務】,打開【共享為服務】向導。

選擇【發布服務】,點擊【下一步】,服務名稱填寫BelizeFS,表示Belize要素服務,點擊【下一步】,點擊【繼續】,選擇【功能】中的【Feature Access】來開啟要素服務

點擊【分析】,錯誤如下,要素服務需要一個已注冊的數據庫

右擊該錯誤,選擇【顯示數據存儲注冊頁面】

打開【ArcGIS Server屬性】對話框,點擊加號,選擇【注冊數據庫】。

在【注冊數據庫】對話框中,點擊【導入】,選擇剛建立的數據庫連接(我的是kobe.localhost.sde連接),確保【與發布者數據庫連接相同】選項選上,給注冊數據庫起個名字,點擊【確定】。

完成的數據庫注冊如下。點擊【確定】。

點擊【分析】,應該看不到錯誤,但可能還有警告,如下圖所示。

繼續發布要素服務,可以成功發布。

訪問:http://localhost:6080/arcgis/rest/services/,可以看到發布的服務。

在require函數中加上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: ["
"]
}
);
}


來源:https://blog.csdn.net/qq_43173805/article/details/107839745
18黄无遮挡免费视频