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

0
分享 2017-11-16
栅格渲染器(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 若失效,可发邮件给韩源萌(polyline@126.com)索要。
文章来源:http://blog.csdn.net/allenlu2008/article/details/78359791

0 个评论

要回复文章请先登录注册