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);
文章就写到这里吧,欢迎小伙伴们给我留言…