天天看點

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

該 DEMO 的界面如下圖:

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

授權伺服器

ArcGISRuntime.SetLicense("輸入相應的許可資訊");

ArcGISRuntime.Initialize()

啟動ArcGIS Runtime本地伺服器

LocalServer是一個靜态類,包含了對伺服器的授權,啟動等資訊。而從這個詞的字面意思也暗示我們Runtime其實就是一個本地伺服器。通過我們的了解,我們可以這樣認為許可号其實就是控制這個本地伺服器的。

LocalServer.InitializeAsync(() =>

{

if (LocalServer.Status == LocalServerStatus.NotInitialized) {

MessageBox.Show("伺服器沒有初始化!"); return;

}

}

);

ArcGIS Runtime伺服器初始化成功之後會在VS的輸出視窗中出現這樣的位址:

這個就是我們熟悉的Rest,在浏覽器中輸入這個位址就可以看到如下頁面:

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

這個很容易解釋,因為我們現在還沒有服務。根據在ArcGIS Server下的習慣我們可以輸入以下位址:

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

當我們點選Start a new Service,我們會看到如下界面:

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

從這個頁面很容易了解,這個是讓我們建立服務,輸入的參數有服務的類型,名稱以及相應的資料源等。可以看出ArcGIS Runtime支援地圖服務,地理編碼服務,地處理服務和幾何服務。

定義服務

我們将地圖服務解除安裝XAML檔案中,如下圖:

Background="#FFE3E3E3">

我們以異步的方式建立一個緩沖區的GP服務如下:

//擷取本地GP服務

LocalGeoprocessingService.GetServiceAsync(@"SimpleBuffer.gpk", GPServiceType.Execute, (gpService) =>

{

if (gpService.Error != null)

{

MessageBox.Show(gpService.Error.Message);

}

//建立Geoprocessor pGPTask = new Geoprocessor(gpService.UrlGeoprocessingService + "/" + "SimpleBuffer");

MyMap.MouseClick += MyMap\_MouseClick;

});

建立服務(服務是在伺服器的狀态為Runing的時候建立)

既然說了一切都是服務,而且是和REST相關的,那麼要和這個緩沖區這個服務打交道,就要有一個URL位址,當我們的GP服務擷取成功之後就可以看到這個 UrlGeoprocessingService位址,如下:

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

我們用異步的執行方式擷取這個服務,當然對于GP來說也有同步的方式。當服務啟動後,緊接着回調了一個匿名函數,在這個回調函數中我們可以做相關的操作,比如說服務是否有錯誤等,當服務沒有問題的話,我們可以在這個回調函數中建立Geoprocessor,在這個時候就需要用到我們GP服務的位址,代碼如下:

//擷取本地GP服務

LocalGeoprocessingService.GetServiceAsync(@"SimpleBuffer.gpk", GPServiceType.Execute, (gpService) =>

{

if (gpService.Error != null)

{

MessageBox.Show(gpService.Error.Message);

}

//建立Geoprocessor pGPTask = new Geoprocessor(gpService.UrlGeoprocessingService + "/" + "SimpleBuffer");

MyMap.MouseClick += MyMap\_MouseClick;

});

截取這個位址,在浏覽器中可以看到GP服務,如下圖:

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

輕按兩下這個服務,可以看到更詳細的資訊,比如GP服務的輸入,輸出參數,如下所示:

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

我們再回去看我們的admin位址中,看到下面的:

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

在這裡,我們可以對這個服務進行删除操作等。

執行分析

當這些服務都有了,我們在地圖上單擊,就會出現緩沖區分析的結果如下圖:

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

代碼如下:

private void MyMap_MouseClick(object sender, ESRI.ArcGIS.Client.Map.MouseEventArgs e)

{

pGPTask.CancelAsync();

GraphicsLayer pGraphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;

pGraphicsLayer.ClearGraphics();

e.MapPoint.SpatialReference = MyMap.SpatialReference;

Graphic graphic = new ESRI.ArcGIS.Client.Graphic()

{

Geometry = e.MapPoint,

Symbol = LayoutRoot.Resources["DefaultClickSymbol"] as

ESRI.ArcGIS.Client.Symbols.Symbol

};

graphic.SetZIndex(1);

pGraphicsLayer.Graphics.Add(graphic);

//構造GP的參數,2個,一個表示FeatureSet,一個表示緩沖距離

List pGParams = new List();

double pDist = System.Convert.ToDouble(txtBoxDist.Text);

Graphic pGraphic = new Graphic { Geometry = e.MapPoint };

FeatureSet pFeatureSet = new FeatureSet(new List { pGraphic });

pGParams.Add(new GPFeatureRecordSetLayer("InputFeatures", pFeatureSet));

pGParams.Add(new GPLinearUnit("Distance", esriUnits.esriKilometers, pDist));

pGPTask.ExecuteCompleted += (s, e1) =>

{

GPExecuteResults results = e1.Results;

GPFeatureRecordSetLayer rs = results.OutParameters[0] as

GPFeatureRecordSetLayer;

Graphic graphicBuff = new ESRI.ArcGIS.Client.Graphic()

{

Geometry = rs.FeatureSet.Features[0].Geometry,

Symbol = LayoutRoot.Resources["ResultsFillSymbol"] as

ESRI.ArcGIS.Client.Symbols.Symbol

};

pGraphicsLayer.Graphics.Add(graphicBuff);

};

pGPTask.Failed += (s2, e2) =>

{

MessageBox.Show(e2.Error.Message);

};

pGPTask.ExecuteAsync(pGParams);

}

關閉服務

使用LocalServer.Shutdown()就可以關閉我們的服務,這時候我們可以在VS界面中看到下面的URL位址:http://127.0.0.1:50000/BQqGPY/arcgis/rest/admin/shutdown

小結

通過這些分析,我們可以将ArcGIS Runtime 稱之為一個本地Server,而 ArcGISRuntime 也隻不過是将本地資源,通過内部嵌入的WEB伺服器,釋出一個供自己使用的rest服務,這個rest隻能通過自身的API使用,而不能向ArcGIS Server一樣釋出服務,當停止Runtime之後,這個URL将不能使用。我們也看到了ArcGIS Runtime 對這些操作的實作也是通過産生和ArcGIS Server向類似結構的REST,是以說這些ArcGIS Runtime的API 實質是通過調用自己的rest對服務進行操作,比如當關閉的時候,它調用 http://127.0.0.1:50000/BQqGPY/arcgis/rest/admin/shutdown

一個問題:ArcGIS Runtime在運作時候産生的服務或者說釋出的服務能否被外界使用? 答案是可以的,下面的是我捕捉到的一個位址,在javascript中調用,結果如下:

Bqq伺服器的緩存檔案放什麼目錄,ArcGIS Runtime 入門(5-2)ArcGIS Runtime運作剖析-緩沖區分析為例...

但是這個位址隻能本地使用,而不能在其他機器上上用,這點必須清楚,因為50000這端口是私有的。

手冊目錄