#raster #geotrellis
#растр #geotrellis
Вопрос:
введите здесь описание изображенияМы пытаемся преобразовать сжатый растр lzw (tiff) в текстовый формат (имеется в виду извлечение центроида каждого пикселя и значения band1.. Мы видим, что некоторые части растра пропущены при преобразовании.. однако в пропущенных данных есть закономерность (данные поступают в виде неравномерных полос) Пожалуйста, смотрите снимок вверх.. Желтые точки показывают преобразованный центроид, при отсутствии перекрытия с желтым данные пропущены при преобразовании..
мы пробовали использовать размер плитки 128 и 256, но в обоих случаях результат был разным
List<String> tiffExtensions = new ArrayList<>();
tiffExtensions.add(".tif");
tiffExtensions.add(".TIF");
tiffExtensions.add(".tiff");
tiffExtensions.add(".TIFF");
final scala.Option<CRS> crsNone = scala.Option.apply(null);
final scala.Option<Object> objectNone = scala.Option.apply(null);
final scala.Option<Object> numPartitionsObject = scala.Option.apply(new Integer(10));
final scala.Option<Object> tileSize = scala.Option.apply(Integer.parseInt("256"));
final scala.Option<Object> partitionBytes = scala.Option.apply(128l * 1024 * 1024);
HadoopGeoTiffRDD.Options options = new HadoopGeoTiffRDD.Options$().apply(
JavaConverters.asScalaIteratorConverter(tiffExtensions.iterator()).asScala().toSeq(), crsNone,
HadoopGeoTiffRDD.GEOTIFF_TIME_TAG_DEFAULT(), HadoopGeoTiffRDD.GEOTIFF_TIME_FORMAT_DEFAULT(), tileSize,
numPartitionsObject, partitionBytes, objectNone);
RDD<Tuple2<ProjectedExtent, Tile>> rasterImageRdd = HadoopGeoTiffRDD.spatial(new Path(rastedImageDir), options,
javaSparkContext.sc());
JavaRDD<Tuple2<ProjectedExtent, Tile>> rasterImageJavaRdd = rasterImageRdd.toJavaRDD();
JavaRDD<String> pixelRdd = rasterImageJavaRdd
.flatMap(new FlatMapFunction<Tuple2<ProjectedExtent, Tile>, String>() {
private static final long serialVersionUID = -6395159549445351446L;
public Iterator<String> call(Tuple2<ProjectedExtent, Tile> v1) throws Exception {
ArrayList<String> list = new ArrayList<String>();
Tile t = v1._2;
ProjectedExtent projectedExtent = v1._1;
ProjectedRaster<CellGrid> r = new ProjectedRaster<CellGrid>(
new Raster<CellGrid>(t, projectedExtent.extent()), projectedExtent.crs());
GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(), 4283);
WKTWriter wktWriter = new WKTWriter();
for (int i = 0; i < t.rows(); i ) {
for (int j = 0; j < t.cols(); j ) {
StringBuilder sb = new StringBuilder();
if (!Double.isNaN(t.getDouble(j, i))) {
Double elevation = t.getDouble(j, i);
Tuple2<Object, Object> longLatTupel = r.raster().rasterExtent().gridToMap(j, i);
if (longLatTupel._2() != null amp;amp; longLatTupel._1() != null) {
Double latitude = Double.parseDouble(longLatTupel._2() "");
Double longitude = Double.parseDouble(longLatTupel._1() "");
Point point = geometryFactory.createPoint(new Coordinate(longitude, latitude));
sb.append(elevation).append(TAB_SEP);
sb.append(point);
list.add(sb.toString());
}
}
}
}
return list.iterator();
}
});
_
Комментарии:
1. [введите описание изображения здесь] в начале есть изображение, о котором мы говорим
2. Проблема в том, что желтые точки должны полностью перекрываться черными точками (мы просто извлекаем значения широты / длины и высоты из растрового изображения). Часть изображения, где желтые точки не перекрываются, означает, что данные для этих точек не были извлечены. Данные «Нет» не были обработаны в строке «Double. isNaN(т.е.getDouble(j, i)». В памяти ничего нет — Мы все преобразовали обратно на диск и, визуализируя изображение в QGIS, я обновил фрагмент кода комментариями, которые могут помочь вам в дальнейшем понимании. Я ценю, что вы помогаете в этом