安卓智能地图开发与实施二十:栅格图层展示 - ArcGIS Runtime SDK for Android(Version 100.1.0)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/allenlu2008/article/details/78347497

栅格图层(RasterLayer)

用以加载展示移动端本地文件、移动镶嵌数据集、影像服务。
这里写图片描述

栅格文件(Raster)

这里写图片描述

mainMapView =(MapView) findViewById(R.id.mapView);
ArcGISMap mainArcGISMap = new ArcGISMap(new Basemap());
mainMapView.setMap(mainArcGISMap);
String rasterFilePath = getResources().getString(R.string.raster_file_path);
Raster mainRasterFile = new Raster(rasterFilePath);
mainRasterLayer = new RasterLayer(mainRasterFile);
mainArcGISMap.getOperationalLayers().add(mainRasterLayer);
mainRasterLayer.loadAsync();
mainRasterLayer.addDoneLoadingListener(new Runnable() {
@Override
public void run() {
mainMapView.setViewpointGeometryAsync(mainRasterLayer.getFullExtent(), 50);
}
});

支持的格式:

  • ASRP/USRP
  • CIB1, 5, 10
  • CRF
  • DTED0, 1, 2
  • GeoTIFF
  • HFA
  • HRE
  • IMG
  • JPEG
  • JPEG 2000
  • NITF
  • PNG
  • RPF
  • SRTM1, 2
  • Mobile mosaic datasets

移动镶嵌数据集(MosaicDatasetRaster)

String rasterFilePath = "/path/to/mosaic.sqlite";
mainMapView = (MapView) findViewById(R.id.mainMapView);
 ArcGISMap mainArcGISMap = new ArcGISMap(Basemap.createTopographic());
mainMapView.setMap(mainArcGISMap);
List<String> mainMosaicDatasetRasterNames = MosaicDatasetRaster.getNames(rasterFilePath);
                for (String name: mainMosaicDatasetRasterNames
                     ) {
                    MosaicDatasetRaster mainMosaicDatasetRaster = new MosaicDatasetRaster(urlOrPath,name);
                    RasterLayer mainMDRasterLayer = new RasterLayer(mainMosaicDatasetRaster);
                    mainArcGISMap.getOperationalLayers().add(mainMDRasterLayer);
                }

创建移动镶嵌数据集工具使用参考:

http://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/mosaic-dataset-to-mobile-mosaic-dataset.htm

影像服务(ImageServiceRaster)

mainMapView = (MapView) findViewById(R.id.mainMapView);
 ArcGISMap mainArcGISMap = new ArcGISMap(Basemap.createTopographic());
mainMapView.setMap(mainArcGISMap);
ImageServiceRaster mainImageServiceRaster = new ImageServiceRaster(image_service_url);
RasterLayer mainImageServiceRasterLayer = new RasterLayer(mainImageServiceRaster);
 ArcGISMap mainArcGISMap =
new ArcGISMap(Basemap.createTopographic());
mainMapView.setMap(mainArcGISMap);
mainArcGISMap.getOperationalLayers().add(mainImageServiceRasterLayer);

Rendering rules(渲染规则)

用以定义如何对请求的影像进行渲染和处理。
ImageServiceRaster支持服务器端定义也支持客户端定义。

final ImageServiceRaster serviceRaster = new ImageServiceRaster(url);
serviceRaster.loadAsync();
serviceRaster.addDoneLoadingListener(new Runnable() {
@Override
public void run() {
if (serviceRaster.getLoadStatus() == LoadStatus.LOADED) {
ArcGISImageServiceInfo serviceInfo = serviceRaster.getServiceInfo();
List<RenderingRuleInfo> renderingRuleInfos = serviceInfo.getRenderingRuleInfos();
}
}});

通过ImageServiceRaster,获取RenderingRuleInfo,进一步得到Rendering Rule。
当服务端设置多个RenderingRuleInfo,可以选择不同的渲染规则显示栅格图层。

List<RenderingRuleInfo> ruleInfos = serviceRaster.getServiceInfo().getRenderingRuleInfos();
if (ruleInfos.size() > 1) {
RenderingRule renderingRule = new RenderingRule(ruleInfos[1]);
renderingRule.getRenderingRuleInfo().getName();
serviceRaster.setRenderingRule(renderingRule);
RasterLayer layer = new RasterLayer(serviceRaster);
}

通过Json设置渲染规则

// create rendering rule
RenderingRule renderingRule = new RenderingRule("{\"rasterFunction\" : \"Hillshade\",\"rasterFunctionArguments\" : {\"Azimuth\" : 215.0,\"Altitude\" : 75.0,\"ZFactor\" 未完
// get a property of rendering rule
renderingRule.getRenderingRuleJson();
// set on image service raster
serviceRaster.setRenderingRule(renderingRule);
// create a raster layer
RasterLayer layer = new RasterLayer(serviceRaster);

RasterFunction定义加载

RasterFunction是针对Raster结合展现的方法进而呈现不同渲染的影像,本质上不改变源数据。
这里写图片描述

通过RasterFunction定义山体阴影,得到新的RasterLayer

mainMapView =(MapView) findViewById(R.id.mapView);
mainMapView.setAttributionTextVisible(false);
ArcGISMap mainArcGISMap = new ArcGISMap(new Basemap());
mainMapView.setMap(mainArcGISMap);
String rasterFilePath = getResources().getString(R.string.raster_file_path);
Raster mainRasterFile = new Raster(rasterFilePath);
RasterFunction mainRasterFunction =
        RasterFunction.fromJson(getResources().getString(R.string.hillshade_simplified));
RasterFunctionArguments mainRasterFunctionArguments = mainRasterFunction.getArguments();
List<String> mainRasterFunctionNames = mainRasterFunctionArguments.getRasterNames();
mainRasterFunctionArguments.setRaster(mainRasterFunctionNames.get(0),mainRasterFile);
Raster rasterHill = new Raster(mainRasterFunction);
mainRasterLayer = new RasterLayer(rasterHill);
mainArcGISMap.getOperationalLayers().add(mainRasterLayer);
mainRasterLayer.loadAsync();
mainRasterLayer.addDoneLoadingListener(new Runnable() {
    @Override
    public void run() {
        mainMapView.setViewpointGeometryAsync(mainRasterLayer.getFullExtent(), 50);
    }
});

使用RasterFunction(山体阴影)前后对比

这里写图片描述

RasterFunction(山体阴影)

{
\”raster_function_arguments\”:
{
\”z_factor\”:{\”double\”:25.0,\”type\”:\”Raster_function_variable\”},
\”slope_type\”:{\”raster_slope_type\”:\”none\”,\”type\”:\”Raster_function_variable\”},
\”azimuth\”:{\”double\”:315,\”type\”:\”Raster_function_variable\”},
\”altitude\”:{\”double\”:45,\”type\”:\”Raster_function_variable\”},
\”type\”:\”Raster_function_arguments\”,
\”raster\”:{\”name\”:\”raster\”,\”is_raster\”:true,\”type\”:\”Raster_function_variable\”},
\”nbits\”:{\”int\”:8,\”type\”:\”Raster_function_variable\”}
},
\”raster_function\”:{\”type\”:\”Hillshade_function\”},
\”type\”:\”Raster_function_template\”
}

结尾

源程序(包含栅格数据示例)请自行下载:
链接:http://pan.baidu.com/s/1jIswUwA 密码:3ngy
若失效,可发邮件给韩源萌([email protected])索要。

猜你喜欢

转载自blog.csdn.net/allenlu2008/article/details/78347497
今日推荐