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

0
分享 2017-11-16
栅格图层(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);
}

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



<a href="http://pro.arcgis.com/zh-cn/pr ... t.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 若失效,可发邮件给韩源萌(polyline@126.com)索要。
文章来源:http://blog.csdn.net/allenlu2008/article/details/78347497

0 个评论

要回复文章请先登录注册