安卓智能地图开发与实施二十一:栅格渲染器 - ArcGIS Runtime SDK for Android(Version 100.1.0)

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

栅格渲染器(RasterRenderer)

与矢量渲染类似, RasterRenderer能够对栅格图层( RasterLayer )进行展示和可视化。目前包括以下内容:

  • HillshadeRenderer
  • BlendRenderer
  • ColormapRenderer
  • StretchRenderer
  • RGBRenderer

HillshadeRenderer(山体阴影渲染)

主要针对数字高程模型、单波段栅格数据,通过设置太阳的方位角和高出地平线的高度(角度或坡度),创建一个灰度级的3D高程表面。

这里写图片描述

主要参数解释:

HillshadeRenderer(double altitude, double azimuth, double zFactor)

  • altitude:太阳高度角,默认45°
  • azimuth:太阳方位角,默认315°
  • zFactor:垂直方向的拉伸夸张程度

HillshadeRenderer(double altitude, double azimuth, double zFactor, SlopeType slopeType, double pixelSizeFactor, double pixelSizePower, int outputBitDepth)
SlopeType:坡度类型(单位计算方式)

  • NONE
  • DEGREE
  • PERCENT_RISE
  • SCALED

这里写图片描述

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);
mainRasterLayer = new RasterLayer(mainRasterFile);
mAltitude = 45;
mAzimuth = 315;
mZFactor = 0.000016;
mSlopeType = SlopeType.NONE;
mPixelSizeFactor = 1;
mPixelSizePower = 1;
mOutputBitDepth = 8;
HillshadeRenderer hillshadeRenderer = new HillshadeRenderer(mAltitude, mAzimuth,
        mZFactor, mSlopeType, mPixelSizeFactor, mPixelSizePower, mOutputBitDepth);
mainRasterLayer.setRasterRenderer(hillshadeRenderer);
mainArcGISMap.getOperationalLayers().add(mainRasterLayer);

BlendRenderer(混合渲染)

将一张山体阴影的影像(栅格Raster),混合入要渲染的原始栅格,让原始栅格看起来具备地形阴影效果。

这里写图片描述

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);
String rasterDEMFilePath = getResources().getString(R.string.elevation_file_path);
mainDEMRaster = new Raster(rasterDEMFilePath);
mainRasterLayer = new RasterLayer(mainRasterFile);
mAltitude = 45;
mAzimuth = 315;
mZFactor = 1.5;
mSlopeType = SlopeType.NONE;
//ColorRamp.PresetType不能设置为NONE,不然会报错
mColorRampType = ColorRamp.PresetType.DEM_LIGHT;
mPixelSizeFactor = 1;
mPixelSizePower = 1;
mOutputBitDepth = 8;
ColorRamp colorRamp = new ColorRamp(mColorRampType, 800);
BlendRenderer blendRenderer = new BlendRenderer(
        mainDEMRaster,
        Collections.singletonList(9.0),
        Collections.singletonList(255.0),
        null,
        null,
        null,
        null,
        colorRamp,
        mAltitude,
        mAzimuth,
        mZFactor,
        mSlopeType,
        mPixelSizeFactor,
        mPixelSizePower,
        mOutputBitDepth);
mainRasterLayer.setRasterRenderer(blendRenderer);
mainArcGISMap.getOperationalLayers().add(mainRasterLayer);
mainRasterLayer.loadAsync();
mainRasterLayer.addDoneLoadingListener(new Runnable() {
    @Override
    public void run() {
        mainMapView.setViewpointGeometryAsync(mainRasterLayer.getFullExtent(), 50);
    }
});

ColormapRenderer(色彩映射表渲染)

通过提供栅格像素值的离散映射颜色,所有像素匹配指定的值使用映射呈现颜色。这可以用于土地分类等任务。

这里写图片描述

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);
mainRasterLayer = new RasterLayer(mainRasterFile);
List<Integer> colors = new ArrayList<>();
for (int i = 0; i <= 250; i++) {
    if (i < 150) {
        colors.add(i, Color.RED);
    } else {
        colors.add(i, Color.YELLOW);
    }
}
ColormapRenderer colormapRenderer = new ColormapRenderer(colors);
mainRasterLayer.setRasterRenderer(colormapRenderer);
mainArcGISMap.getOperationalLayers().add(mainRasterLayer);
mainRasterLayer.loadAsync();
mainRasterLayer.addDoneLoadingListener(new Runnable() {
    @Override
    public void run() {
        mainMapView.setViewpointGeometryAsync(mainRasterLayer.getFullExtent(), 50);
    }
});

StretchRenderer(拉伸渲染)

用于以平滑渐变的颜色显示连续的栅格像元值。使用“拉伸”渲染器来绘制单波段的连续数据。该方法非常适合于诸如影像、航空像片或高程模型等要显示的像元值位于较大范围的栅格数据。

拉伸参数(com.esri.arcgisruntime.raster.StretchParameters):

HistogramEqualizationStretchParameters:直方图均衡化
MinMaxStretchParameters:最小值-最大值
PercentClipStretchParameters:裁剪百分比
StandardDeviationStretchParameters:标准差

主要参数解释:

StretchRenderer (StretchParameters stretchParameters, List gammas, boolean estimateStatistics, ColorRamp colorRamp)
stretchParameters:拉伸参数
gammas:栅格数据集中等灰度值之间的对比度
estimateStatistics:预估统计

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);
mainRasterLayer = new RasterLayer(mainRasterFile);
mMin = 0;
mMax = 255;
mPercentClipMin = 0;
mPercentClipMax = 99;
mStdDevFactor = 1;
MinMaxStretchParameters stretchParameters = new MinMaxStretchParameters(
        Collections.singletonList((double) mMin),
        Collections.singletonList((double) mMax));
PercentClipStretchParameters stretcPChParameters = new PercentClipStretchParameters(mPercentClipMin, mPercentClipMax);
StretchRenderer stretchRenderer = new StretchRenderer(stretchParameters, Collections.singletonList((double) 1.5), true, null);
mainRasterLayer.setRasterRenderer(stretchRenderer);
mainArcGISMap.getOperationalLayers().add(mainRasterLayer);
mainRasterLayer.loadAsync();
mainRasterLayer.addDoneLoadingListener(new Runnable() {
    @Override
    public void run() {
        mainMapView.setViewpointGeometryAsync(mainRasterLayer.getFullExtent(), 50);
    }
});

RGBRenderer(RGB 渲染)

RGB 渲染与拉伸渲染使用相同的方法,但前者允许以“红、绿、蓝”合成方式组合多个波段。在使用多波段栅格数据集(如卫星或航空影像)时,可以使用RGB 渲染来显示不同的波段组合。

主要参数解释:

RGBRenderer(StretchParameters stretchParameters, List bandIndexes, List gammas, boolean estimateStatistics)
stretchParameters:拉伸参数
bandIndexes:波多索引
gammas:栅格数据集中等灰度值之间的对比度
estimateStatistics:预估统计

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);
mainRasterLayer = new RasterLayer(mainRasterFile);
mMinR = 0;
mMaxR = 255;
mMinG = 0;
mMaxG = 255;
mMinB = 0;
mMaxB = 255;
mPercentClipMin = 0;
mPercentClipMax = 99;
mStdDevFactor = 1;
MinMaxStretchParameters stretchParameters = new MinMaxStretchParameters(
        Arrays.asList((double) mMinR, (double) mMinG, (double) mMinB),
        Arrays.asList((double) mMaxR, (double) mMaxG, (double) mMaxB));
RGBRenderer rgbRenderer = new RGBRenderer(stretchParameters, Arrays.asList(0, 1, 2), null, true);
mainRasterLayer.setRasterRenderer(rgbRenderer);
mainArcGISMap.getOperationalLayers().add(mainRasterLayer);
mainRasterLayer.loadAsync();
mainRasterLayer.addDoneLoadingListener(new Runnable() {
    @Override
    public void run() {
        mainMapView.setViewpointGeometryAsync(mainRasterLayer.getFullExtent(), 50);
    }
});

结尾

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

猜你喜欢

转载自blog.csdn.net/allenlu2008/article/details/78359791