ArcGIS Runtime 100.2中如何加載Raster和Mobile Mosaic Dataset
衆所周知,ArcGIS中可以將數據分爲矢量數據和柵格數據,矢量數據簡單來說就是點、線、面,以座標形式進行存儲;而柵格則是按行和列(或格網)組織的像元(或像素)矩陣,其中每個像元都包含一個信息值(例如溫度、高程等)。柵格可以是數字航空像片、衛星影像、數字圖片、掃描的地圖,可以用作底圖、表面地圖等,在數據分析以及製圖過程中發揮着舉足輕重的作用。既然柵格數據這麼重要,ArcGIS Runtime也必然要對其進行支持,其中ArcGIS Runtime 100.0版本中增加了對本地柵格數據以及移動鑲嵌數據集的支持,下面就看一下最新版ArcGIS Runtime 100.2中可以加載哪幾種類型的柵格數據以及如何加載。
1,本地Raster files
ArcGiS Runtime 100及以後版本可以直接加載本地的柵格數據,支持常用的如GeoTIFF、IMG、JPEG、PNG等格式,使用絕對路徑方式即可:
Raster myRaster = new Raster(pathToRaster);
await myRaster.LoadAsync();
// create a RasterLayer using the Raster
RasterLayer RasterLayer = new RasterLayer(myRaster);
2,加載GeoPackage中的Raster
GeoPackage是一個開放的、基於標準的、平臺獨立的、便攜的、自描述的以及緊湊的存儲空間信息的格式。其遵循OGC標準,本質是一個SQLite數據庫,可以同時包含矢量和柵格數據。GeoPackage是Runtime 100.2新支持的格式,首先看一下如何創建GeoPackage,並導入數據:
(1)ArcMap中找到Create SQLite Database工具,參數Spatial Type選擇GEOPACKAGE,如下圖:
(2)創建成功後使用Add Raster to GeoPackage工具將Raster導入到該.gpkg中:
然後可以使用下面代碼加載.gpkg中的Raster了,當然一般.gpkg可能是別的軟件生成的。
// Open a local GeoPackage (.gpkg)
GeoPackage myGeoPackage = await GeoPackage.OpenAsync(geoPackageFilePath);
// Get the collection of rasters in the package
IReadOnlyList<GeoPackageRaster> packageRasters = myGeoPackage.GeoPackageRasters;
// Get the first raster in the collection
GeoPackageRaster firstRaster = packageRasters[0];
// Create a RasterLayer using the GeoPackageRaster (which inherits from Raster)
RasterLayer newRasterLayer = new RasterLayer(firstRaster);
結果如圖:
3,加載Mobile Mosaic Dataset
Runtime中加載鑲嵌數據集有兩種方式:一種是ArcGIS Pro中使用Mosaic Dataset To Mobile Mosaic Dataset工具將本地的鑲嵌數據集轉爲Mobile Mosaic Dataset,然後加載;另一種是Runtime中新建Mobile Mosaic Dataset,然後添加Raster,下面分別對兩種情況說明一下。
(1)打開Mosaic Dataset To Mobile Mosaic Dataset工具,輸入本地鑲嵌數據集路徑,指定SQLite數據庫位置以及Mobile Mosaic Dataset的名稱,如下圖所示:
執行成功後,可以使用下面代碼加載:
var mosaicDatasetRaster = new MosaicDatasetRaster(@"D:\ArcGIS_Runtime_Test\Demo\Data\mobileMosaicDataset\mobileMosaic.sqlite", "test");
await mosaicDatasetRaster.LoadAsync();
if (mosaicDatasetRaster.LoadStatus == LoadStatus.Loaded)
{
RasterLayer RL = new RasterLayer(mosaicDatasetRaster);
}
結果如圖:
tips:這裏有一點需要注意:本地的鑲嵌數據集需要構建概視圖,不然轉爲mobile mosaic dataset後加載會是一片黑色。
(2)Runtime中直接新建Mobile Mosaic Dataset,然後添加Raster。測試代碼如下:
SpatialReference SR = SpatialReference.Create(26915);
MosaicDatasetRaster rasterMosaic = MosaicDatasetRaster.Create(@"D:\ArcGIS_Runtime_Test\Demo\Data\mobileMosaicDataset\mosaic4.sqlite", "zxy", SR);
AddRastersParameters parameters = new AddRastersParameters();
parameters.InputDirectory = @"D:\ArcGIS_Runtime_Test\Demo\Data\mobileMosaicDataset\sourceRaster";
await rasterMosaic.AddRastersAsync(parameters);
await rasterMosaic.LoadAsync();
if(rasterMosaic.LoadStatus == LoadStatus.Loaded)
{
RasterLayer rasterLayer = new RasterLayer(rasterMosaic);
}
效果圖:
Tips:由於沒有構建概視圖,所以只能縮放到很大比例才能顯示出該mobile mosaic dataset。
4,加載影像服務
通過ArcGIS Server,我們可以把柵格數據和鑲嵌數據集發佈爲影像服務,Runtime中可以通過ImageServiceRaster直接加載在線影像服務。
ImageServiceRaster myRaster = new ImageServiceRaster(new Uri("http://sampleserver6.arcgisonline.com/arcgis/rest/services/CharlotteLAS/ImageServer"));
await myRaster.LoadAsync();
// create a RasterLayer using the Raster
RasterLayer RasterLayer = new RasterLayer(myRaster);
文章就寫到這裏吧,歡迎小夥伴們給我留言…