1. 程式人生 > >基於ArcGIS API for WPF路徑分析原始碼例項

基於ArcGIS API for WPF路徑分析原始碼例項

說明 本例項主要演示網路分析資料集製作,服務釋出,最後基於ArcGIS API for WPF做路徑分析。 本例項參考ArcGIS官方文件,想了解GIS網路分析可查閱官方文件。 本例項資料為西藏道路資料,若無資料可新建簡單的線要素。 本例項使用軟體及版本:ArcGIS10.2,ArcGIS APIfor WPF24,VS2010。 最後為了增加效果疊加區域性離線衛星地圖,需要安裝水經注萬能地圖下載器(相當方便的衛星地圖下載器),如果沒有安裝本軟體,可以百度“水經注軟體”到官方網站下載。
一、  準備網路分析資料 新建一個“Test”資料庫,用於儲存永久的服務資料,一般我們將地理要素及要素集存放在地裡資料庫中。這裡我們新建了一個名叫“NetworkFeatureDataSet”的要素集,這是因為存放於地理資料庫中的線要素如果用於構建網路資料集,則必須放在要素集中。



新建各種要素(表示設施的點要素,以及表示道路的線要素),並新增相關的屬性。
新建線要素屬性如下圖所示


新建點要素(其實可以省略)。 編輯要素,構建地圖。此處直接匯入西藏道路資料,如下圖所示


注意:道路資料是聯通的,需要把相交的線要素進行打斷處理。這裡使用高階編輯工具(在10.2之前的版本應該是拓撲工具條裡),如下圖


完成以上內容之後,就開始構建網路資料集(構建網路資料集的線要素必須位於要素資料集中) 右鍵要素集,選擇“新建”“網路資料集”


點選將如下圖所示


設定網路資料集的名稱,點選下一步。


選擇參與網路資料集的資料類,點選下一步


構建拐彎模型,選是,下一步



設定連通性,這裡有節點和端點兩種,預設情況下為端點,這裡我們選擇預設即可,然後點選下一步。


設定高程欄位,當涉及到高程時,在此設定,本案例沒有涉及,所以選擇無。然後點選下一步。


設定網路資料集的屬性,我們指定了如上所示的屬性。具體的新增過程: 點選新增,然後設定名稱,用法和單位,然後點選賦值器,可以指定該屬性是欄位,函式,常量以及VB指令碼。 這裡我們設定“長度”屬性為欄位,對應線要素的“Shape_Length”屬性


以上屬性設定好以後,點選下一步,設定網路方向屬性。


這裡我們設定長度屬性為Distance,如上圖所示,在街道名稱中設定名稱為NAME欄位。
點選完成,如果過程沒有錯誤,就完成了自己的網路資料集。這是要素集的內容如下


接下來驗證生產的網路資料集。 點選自定義調出網路分析工具條:


選擇停靠點,並求解,如下圖所示


生成的方向指南

至此,資料準備完畢,接下來發佈網絡分析服務。
二、  釋出網路分析服務 新建MXD文件。文件必須包含用於最短路徑分析圖層、網路資料集“Network_ND”。地圖文件可以增加其它要素,來增加顯示效果。 建立最短路徑分析圖層,可以通過ArcToolBox新建,如下圖

此例項只有兩個圖層(不需要的兩個圖層),如下圖


所需圖層準備好之後,儲存MXD文件,然後釋出。 我們可以直接在ArcMap中釋出也可在ArcCatalog中釋出。右鍵MXD地圖文件——釋出到ArcGIS Server。











釋出成功之後,可以在本地的瀏覽器中開啟該網路分析服務的地址.即可檢視該網路分析服務的引數和相關功能。


括號為NAServer就表示該服務為網路分析服務。開啟可以檢視該服務的具體資訊。


到此網路分析服務的釋出工作已經完成。
三、  準備衛星地圖資料及釋出影像服務 啟動水經注萬能地圖下載器,在查詢定位中輸入“拉薩”,再雙擊搜尋出的行政邊框內的區域,彈出對話方塊,設定相應屬性。




在級別列表中,你可以選擇任何級別,但一般來講城區選擇19級,郊區選擇16級比理想,但選擇級別之前,最好在線上地圖瀏覽中先檢視所想要下載的級別是否有資料,這裡我們以18級為例。選擇好級別後,點選確定開始下載。
下載完成後會彈出對話方塊詢問是否要立即匯出,選擇“是”,然後顯示“匯出圖片資料”對話方塊,如下圖所示。



在該對話方塊中,不需要作任何設定,點選“輸出”按鈕以預設引數匯出資料即可。預設匯出路徑為“D:\SGDownload\未命名_拼接[預設]\L18”。 在ArcMap中匯入影像資料顯示如圖



注意:投影座標系需要保持一致,才能進行疊加顯示。 檢視剛剛下載影像的座標系為“WGS_1984_Web_Mercator”,與之前釋出的網路服務座標系“WGS_1984_World_Mercator”不一致,因此我們需要先轉換投影座標系,再發布影像服務。


投影座標一致後,我們可以在ArcMap中看到影像和網路資料疊加在一起了。



接下來就是釋出影像服務。


此處與網路資料釋出步驟一致,就不在此累述了。釋出成功後可以在manager中看到剛剛釋出的影像服務。


影像釋出完成。
四、  基於ArcGISAPI for WPF最短路徑分析 最終效果圖如下



路徑分析服務可以為WPFWEBGIS提供最佳路徑的選擇功能,使用者指定兩個點便可以查詢出兩點之間的最佳路徑,同時使用者還可以考慮不同的因素來找到最佳的路徑,例如設定障礙點,阻抗等。使用路徑分析功能時需要使用ArcGIS Api for Wpf中的TouteTask類。同時還需提供網路分析服務中路徑分析圖層的地址(即上一篇博文中我們釋出的網路分析服務中路徑服務的地址。其地址的一般格式是: http://<GIS伺服器地址>/ArcGIS/rest/services/<網路分析服務名稱>/NAServer/Route
實現過程(參考官方教程): /******************C#*************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using ESRI.ArcGIS.Client; using ESRI.ArcGIS.Client.Tasks; namespace demo_RoutingBarriers {     public partial class RoutingBarriers : UserControl     {         RouteTask_routeTask;         List<Graphic> _stops = newList<Graphic>();         List<Graphic> _barriers = newList<Graphic>();         RouteParameters_routeParams = new RouteParameters();         GraphicsLayerstopsLayer = null;         GraphicsLayerbarriersLayer = null;         publicRoutingBarriers()         {             InitializeComponent();             _routeTask = new RouteTask("http://localhost:6080/arcgis/rest/services/XZNetworkMap/NAServer/RouteLayer1");             _routeTask.SolveCompleted +=routeTask_SolveCompleted;             _routeTask.Failed +=routeTask_Failed;             _routeParams.Stops = _stops;             _routeParams.Barriers = _barriers;             _routeParams.UseTimeWindows = false;             _routeParams.OutSpatialReference =MyMap.SpatialReference;             _routeParams.UseHierarchy = false;             barriersLayer = MyMap.Layers["MyBarriersGraphicsLayer"] as GraphicsLayer;             stopsLayer = MyMap.Layers["MyStopsGraphicsLayer"] as GraphicsLayer;         }         privatevoid MyMap_MouseClick(objectsender, ESRI.ArcGIS.Client.Map.MouseEventArgs e)         {             if(StopsRadioButton.IsChecked.Value)             {                 Graphicstop = new Graphic(){ Geometry = e.MapPoint, Symbol = LayoutRoot.Resources["StopSymbol"]as ESRI.ArcGIS.Client.Symbols.Symbol };                 //stop.Attributes.Add("StopNumber",stopsLayer.Graphics.Count + 1);                 stopsLayer.Graphics.Add(stop);                 _stops.Add(stop);             }             elseif (BarriersRadioButton.IsChecked.Value)             {                 Graphicbarrier = new Graphic(){ Geometry = e.MapPoint, Symbol = LayoutRoot.Resources["BarrierSymbol"]as ESRI.ArcGIS.Client.Symbols.Symbol };                barriersLayer.Graphics.Add(barrier);                 _barriers.Add(barrier);             }             if(_stops.Count > 1)             {                 if(_routeTask.IsBusy)                     _routeTask.CancelAsync();                _routeTask.SolveAsync(_routeParams);//*********************錯ä¨a誤¨®             }         }         privatevoid routeTask_Failed(objectsender, TaskFailedEventArgs e)         {            string errorMessage = "Routing error: ";             errorMessage += e.Error.Message;             foreach(string detail in(e.Error as ServiceException).Details)                 errorMessage += "," + detail;             MessageBox.Show(errorMessage);             if((_stops.Count) > 10)             {                stopsLayer.Graphics.RemoveAt(stopsLayer.Graphics.Count - 1);                 _stops.RemoveAt(_stops.Count -1);             }         }         privatevoid routeTask_SolveCompleted(object sender, RouteEventArgse)         {             GraphicsLayerrouteLayer = MyMap.Layers["MyRouteGraphicsLayer"]as GraphicsLayer;             RouteResultrouteResult = e.RouteResults[0];             routeResult.Route.Symbol =LayoutRoot.Resources["RouteSymbol"]as ESRI.ArcGIS.Client.Symbols.Symbol;             routeLayer.Graphics.Clear();             GraphiclastRoute = routeResult.Route;             routeLayer.Graphics.Add(lastRoute);         }         privatevoid Button_Click(objectsender, RoutedEventArgs e)         {             _stops.Clear();             _barriers.Clear();             foreach(Layer layer inMyMap.Layers)                 if(layer is GraphicsLayer)                     (layer as GraphicsLayer).ClearGraphics();         }     } } //***********xaml****************// <UserControl x:Class="demo_RoutingBarriers.RoutingBarriers"              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"              mc:Ignorable="d"              designHeight="300" designWidth="300"              xmlns:esri="http://schemas.esri.com/arcgis/client/2009">     <Grid x:Name="LayoutRoot" Background="White">         <Grid.Resources>             <ControlTemplate x:Key="CompositeSymbol">                 <Grid>                     <Ellipse Fill="{Binding Symbol.Color}" Width="{Binding Symbol.Size}" Height="{Binding Symbol.Size}" Stroke="Black"StrokeThickness="1" />                     <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"                   Text="{Binding Path=Attributes[StopNumber]}"                   FontSize="9" Margin="0" FontWeight="Bold" Foreground="Black"/>

相關推薦

基於ArcGIS API for WPF路徑分析原始碼例項

說明: 本例項主要演示網路分析資料集製作,服務釋出,最後基於ArcGIS API for WPF做路徑分析。 本例項參考ArcGIS官方文件,想了解GIS網路分析可查閱官方文件。 本例項資料為

Arcgis api for JavaScript疊加分析geometryEngine.contains

疊加分析geometryEngine.contains://建立FeatureLayer要素圖層 var targetLayer = mapManager.createFeatureLayer($("#targetLayer").combobox("getValue")

ArcGIS API For JavaScript(五)呼叫GP服務--簡單網路路徑分析

ArcGIS API For JavaScript(五)呼叫GP服務--簡單網路路徑分析 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <

ArcGIS API for Javascript4.8 路徑網路分析、最短路徑查詢

程式碼是在官方demo上修改來的,官方的demo是需要裝置代理伺服器,才能顯示效果的,這裡我直接設定了ArcGIS Server允許跨域,所以不需要設定代理。 <!DOCTYPE html> <html> <head>

arcgis api for js入門開發系列十三地圖最短路徑分析

上一篇實現了demo的地圖列印,本篇新增地圖最短路徑分析,截圖如下: 具體實現的思路如下: 1.點選地圖獲取地名,呼叫了arcgis的地理編碼服務,關於地理編碼服務製作以及釋出章節,感興趣的請檢視這裡 點選地圖獲取地名的核心js程式碼: DCI.Route

arcgis api for js之echarts開源js庫實現地圖統計圖分析

不能 rgba data ron 創建 apc att load reat 前面寫過一篇關於arcgis api for js實現地圖統計圖的,具體見:http://www.cnblogs.com/giserhome/p/6727593.html 那是基於dojo組件來實

ArcGIS API For JavaScript(四)呼叫GP服務--簡單緩衝區分析

ArcGIS API For JavaScript(四)呼叫GP服務--簡單緩衝區分析   <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&g

arcgis api for js 3.26之Draw工具分析講解

1.僅僅對官網中Draw工具的一個例子進行分析 以上是實現的東西 2.全部程式碼 <!DOCTYPE html> <html>   <head>     <meta http-equiv="Content-Type" con

(十三)ArcGIS API For Javascript之網路分析

require(["esri/map", "dojo/on", "dojo/dom", "esri/layers/ArcGISDynamicMapServiceLayer", "esri/tas

ArcGIS API For JS之網路分析(臨近設施分析

ArcGIS 提供兩種網路分析,即基於Geometric Network的有向網路或者設施網路和基於Network Dataset的無向網路,在這裡網路的分析指後者,ArcGIS api支援網路分析中的最短路徑分析、服務區分析、臨近設施分析。本文主要講的是臨近設施分析,關於釋

Arcgis api for JavaScript 4.6 點聚合分析

建立物件:var clusterLayer = new ClusterLayer({ "view":mapManager.view, "map":mapManager.map, "data": photoInfo.data,

ArcGIS API For JavaScript4.7本地部署(在專案中使用Eclispe/Myeclipse+Tomcat, 用相對路徑部署API

部署本地環境在tomcat主要分為以下幾個步驟: 1. 下載ArcGIS For JavaScript  API、Tomcat軟體 和Eclispe/Myeclipse+Tomcat軟體(開發工具建議使用Eclipse,因為免費,不用破解,而且新版Eclispe功能已經很強大

擴充套件ArcGIS API for Silverlight/WPF 中的TextSymbol支援角度標註

在ArcGIS API for Silverlight/WPF中原版的TextSymbol只能支援文字正向顯示。在很多實際專案中,往往需要文字標註有一些角度甚至是沿線標註,下面我們來看一下原裝的TextSymbol和擴充套件後的TextSymbol的比較和實現思路。 要實

arcgis api for js入門開發系列五地圖態勢標繪(含原始碼)

上一篇實現了demo的地圖查詢功能,本篇新增地圖態勢標繪模組,截圖如下: require(["esri/toolbars/draw"], function(Draw) { /* code goes here */ }); 建構函式: new Draw(map,

天津政府應急系統之GIS一張圖(arcgis api for flex)解說(三)顯示地圖坐標系模塊

image blur rda plain 讀取 else important baseline pat config.xml文件的配置例如以下: 1 2 <widget left="3" bottom="3" config="widg

使用Arcgis Api for Javascript 調用 本地Portal發布的WebMap

pla basemap 步驟 reat 地址 dap toc cli 配置 步驟: 安裝Arcgis Portal 10.4,Server 10.4,DataStore ,WebAdaptor for IIS,搭建arcgis api for javascript 4

ArcGIS API for JavaScript學習(1):第一個地圖

樣式表 參數 資源 charset 底層 arcgis 順序 api navi 1.簡介 ArcGIS API for JavaScript跟隨ArcGIS 9.3同時發布,是ESRI根據JavaScript技術實現的調用ArcGIS Server REST API接口的一

ArcGIS API for JavaScript 4.4學習筆記[新] AJS4.4和AJS3.21新特性

ack 讀取 port 不同 ide evel arc ges wfs ESRI官網悄無聲息突然更新4.4和3.21,公眾號也沒有什麽消息。照例,給大家看看這次更新有什麽新特性吧。 1. AJS 4.4 官方更新日誌:點我,比較詳細。我在這裏抽一些主幹作為說明。 1.1

ArcGIS API for JavaScript3.x 學習筆記[3] 加載底圖(一)【天地圖(經緯度版)】

矢量地圖 說明 tiled spa 過程 相同 服務器列表 text 服務 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5

ArcGIS API for JavaScript3.x 學習筆記[4] 加載底圖(三)【Open Street Map開放街道地圖】

asc 裏的 指定 訪問 utf-8 gis sca utf 同方 Open Street Map OpenStreetMap(簡稱OSM,中文是開放街道地圖)是一個網上地圖協作計劃,目標是創造一個內容自由且能讓所有人編輯的世界地圖。 OSM是一款由網絡大眾共同打造的免費開