安卓智能地图开发与实施二十:栅格图层展示

来源:互联网 发布:excel数据分析功能 编辑:程序博客网 时间:2024/05/17 23:24

栅格图层(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() {@Overridepublic 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() {@Overridepublic 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 ruleRenderingRule renderingRule = new RenderingRule("{\"rasterFunction\" : \"Hillshade\",\"rasterFunctionArguments\" : {\"Azimuth\" : 215.0,\"Altitude\" : 75.0,\"ZFactor\" 未完// get a property of rendering rulerenderingRule.getRenderingRuleJson();// set on image service rasterserviceRaster.setRenderingRule(renderingRule);// create a raster layerRasterLayer 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)索要。

阅读全文
0 0