Общее представление о GeoTrellis
Общее представление о GeoTrellis

Введение

GeoTrellis — это Scala-библиотека и платформа для обработки растровых данных на основе Apache Spark. 1. Может эффективно читать/записывать и работать с растрами, а также реализовывать операции с картами и инструменты преобразования растров в растры. 2. Растровые данные можно преобразовать в изображения PNG, а метаданные преобразовать в JSON.

GeoTrellis решает три основные проблемы

1. Создание масштабируемых высокопроизводительных веб-сервисов обработки географической информации. 2. Создать распределенные службы обработки географической информации для обработки огромных наборов данных. 3. Выполните параллельные операции обработки географической информации, чтобы воспользоваться преимуществами многоядерной архитектуры.

GeoTrellis может импортировать данные (Tiff) из локального, HDFS, S3 в локальный, HDFS, Accumulo, HBASE, CASSANDRA, S3 и т. д. Существует много вариантов, и они обрабатываются параллельно через кластер Spark, что эквивалентно реализации GeoTrellis. распределенная резка плитки.

GeoTrellis — это платформа для распределенных пространственных вычислений для больших объемов растровых данных. Поэтому, какая бы операция ни выполнялась, большие блоки данных сначала разрезаются на небольшие данные (тайлы) определенного размера. разделяй и властвуй, что также является сутью распределенных вычислений. Первым шагом GeoTrellis является разделение данных (независимо от того, хранятся ли они в памяти или постоянно сохраняются). Однако, какой бы мощной она ни была, в реальной работе трудно удовлетворить следующие требования: Глобальные (крупномасштабные) данные изображений дистанционного зондирования высокого разрешения с объемом данных на уровне ТБ. Обновление локальных данных Объединение данных в разное время

Возможным решением является выполнение операций обновления или пакетной обработки. Платформа GeoTrellis предоставляет интерфейс ETL для данных, но можно выполнять только операции записи, а операции обновления не могут быть выполнены. Операция записи перезапишет существующие данные на этом уровне. краевые данные не могут быть. В силу этого данные отсутствуют, поэтому их можно записывать в разные слои только пакетами.

концепция

Каталог Источник данных TileSetRasterLayer AccumuloAttributeStore / AccumuloValueReader // Чтение данных плитки Accumulo Растровый экстент GeoTiffReader SinglebandGeoTiff // Чтение одного канала MultibandGeoTiff // Чтение нескольких каналов LayerReader // Чтение всего слоя информации о тайле в кластере GeoTiff SpatialKey // Соответствующее значение ключа каждой плитки в Accumulo можно получить через значение ключа. ​ // tileReader.readerSpatialKey, Tile.read(k)

SparkUtils Метаданные слоя плитки HadoopGeoTiffRDD //Чтение класса файла Tiff Перепроектировать: перепроектировать

Ввод данных
  1. сетка Импортируйте растровые данные напрямую, через класс ETL. пирамида, сохранить в Accumulo

Импорт одноканальных данных Tiff: неявное значение sc = SparkUtils.createSparkContext("ETL SinglebandIngest", new SparkConf(true)) Etl.ingest[ProjectedExtent, SpatialKey, Tile](args, ZCurveKeyIndexMethod) sc.stop()

Импорт многоканальных данных Tiff: неявное значение sc = SparkUtils.createSparkContext("ETL MultibandIngest", new SparkConf(true)) Etl.ingest[ProjectedExtent, SpatialKey, MultibandTile](args, ZCurveKeyIndexMethod) sc.stop()

GeoTrellis читает файлы Tiff HadoopGeoTiffRDD

  1. Вектор Чтение векторных файлов -> Векторсеткаизменять -> Следите за процессом установки ShapeFileReader / ShapefileDataStore geotrellis.shapefile.ShapeFileReader.readSimpleFeatures(path)

Геометрия. Rasterizer.rasterizeWithValue(функции, re, 100) Rasterizer.foreachCellByGeometry(feature.geometry, re)

Чтение данных

ссылка: https://www.cnblogs.com/shoufengwei/p/5422844.html

Настройте файл catolog.json в application.conf для записи информации об источнике данных и получения данных с помощью этой информации.

–layoutScheme: tms/floating При плавающем разрезании фрагментов остается только слой 0. Это эквивалентно использованию плавающего типа для обработки исходных данных. Оно разрезает данные только на блоки 256*256, а слой равен 0 (вы этого не делаете). Не нужно беспокоиться о конкретных числах x и y, георешетка будет рассчитана автоматически) tms построит пирамиду. Использование tms вырезает данные из максимального слоя (этот максимальный слой рассчитывается на основе разрешения данных). первый слой при вызове будет вызываться непосредственно в соответствии со слоем.

--pyramid: добавление этого параметра приведет к созданию пирамиды, когда LayoutScheme = tms

-I путь=файл:/…: Если здесь указан путь к файлу, этот файл будет импортирован отдельно. Если это папка, весь путь будет импортирован сразу, и он будет автоматически склеен, и так будет. отсутствие щелей в плитке. Geotrellis может не только резать плитку распределенным образом, но и автоматически склеивать ее.

–layer : Этот параметр используется для различения разных данных. При выборке данных этот параметр используется для различения разных данных. ссылка: https://www.cnblogs.com/shoufengwei/p/5468068.html

LayerReader: Считайте весь слой информации о плитке, а затем получите значение точки на основе смещения.

Язык кода:javascript
копировать
val r = reader.read[SpatialKey, Tile, TileLayerMetadata[SpatialKey]](layerId)
val mapTransform = r.metadata.mapTransform
val key = r.metadata.mapTransform(point)
val dataValues: Seq[Double] = r.asRasters().lookup(key).map(_.getDoubleValueAtPoint(point))
val value = if(dataValues == null || dataValues.length <= 0) 0 else dataValues.head

ValueReader: сначала найдите соответствующий тайл, затем сместите его, чтобы получить эту точку.

Язык кода:javascript
копировать
val key = attributeStore.readMetadata[TileLayerMetadata[SpatialKey]](layerId).mapTransform(point)
val (col, row) = attributeStore.readMetadata[TileLayerMetadata[SpatialKey]](layerId).toRasterExtent().mapToGrid(point)

//Читаем тайлы

Язык кода:javascript
копировать
    val tile: Tile =  tileReader.reader[SpatialKey, Tile](layerId).read(key)
    
    val tileCol = col - key.col * tile.cols
    val tileRow = row - key.row * tile.rows
    println(s"tileCol=${tileCol}   tileRow = ${tileRow}")
    tile.get(tileCol, tileRow)

Многополосное чтение плиток val multiTile = tileReader.reader[SpatialKey, MultibandTile](LayerId(имя, масштаб)).read(ключ)

Получить одну группу из нескольких групп Многополосная плитка multiTile.bands(bandNum)

Непосредственное чтение всего слоя данных readSpatialKey, Tile, TileLayerMetadata[SpatialKey]

Добавьте объект LayerQuery в метод чтения. Reader.read[SpatialKey, Tile, TileLayerMetadata[SpatialKey]](layerId, новый LayerQuery[SpatialKey, TileLayerMetadata[SpatialKey]].where(Intersects(polygon)))

Грамматический суп второго способа reader.querySpatialKey, Tile, TileLayerMetadata[SpatialKey].where(Intersects(polygon)).result

вывод данных

HBase Accumulo

Выпуск данных

ссылка: https://www.cnblogs.com/shoufengwei/p/5422844.html

IO(Http) ! Http.Bind(сервис, хост, порт) Вам необходимо использовать следующий оператор для автоматического запуска служб на хосте и соответствующем порту. Конкретная информация о маршрутизации должна быть определена в классе обслуживания. Класс обслуживания должен наследовать метод Actor и переопределить метод получения родительского класса.

ETL-инструменты

ссылка:https://www.cnblogs.com/shoufengwei/p/5856323.html

geotrellis.spart.etl //Обработка данных ETL Работа ETL заключается в разрезании данных на фрагменты и сохранении зеркального отображения. GeoTrellis поддерживает размещение данных в памяти или в распределенных базах данных, таких как Accumulo и HABSE, или HDFS и обычных файловых системах.

geotrellis.Ingest — это класс, который вызывает внутренний импорт данных Geotrellis, который вызывает класс ETL для автоматической загрузки данных.

EtlConf — это класс конфигурации для импорта данных в GeoTrellis. Вам необходимо создать экземпляр EtlConf, а затем передать его ETL для завершения импорта данных. Он основан на файлах Inputjson, output.json и backend-profiles.json.

Ввод: input.json //Ввод ETL Вывод: output.json //вывод ETL Сохранить: backend.json //Сохранение данных

другой

ТРУБОПРОВОД трубопровод вычислительная мощность резка плитки SHP Конвертировать JSON векторная растеризация векторная плитка создать пирамиду

Рендеринг изображения

На основе плиток: Рендеринг в JPG: renderJpg Рендеринг в PNG: renderPng Цветовая карта: ColorMap Параметры [classBoundaryType noDataColor FallbackColor strict] ColorMap.fromQuantileBreaks

Получить плитки/объединить плитки

ссылка:https://www.cnblogs.com/shoufengwei/p/5753753.html

Получите плитку, соответствующую многоугольнику: val Masked = Raster.mask(polygon)

Объединить плитки: val стежок = Masked.stitch val tile = стежок.тайл

Передискретизация/проекция/типы данных

ссылка:https://www.cnblogs.com/shoufengwei/p/5753753.html

Язык кода:javascript
копировать
val rep = tile.reproject(extent, srcCRS, dstCRS, method).tile val res = rep.convert(cellType) 

Резка плитки tile.crop(startcol, startrow, endcol, endrow)

Растровые срезы COG ФайлCOGLayerWriter COGLayer COGLayerМетаданные FileCOGValueReader

Обработка данных временных рядов

Импортируйте файлы данных, вам нужно добавить заголовок времени. Добавить заголовок времени через gdal gdal_edit -mo TIFFTAG_DATETIME = «время» yourtiff.tif

Добавьте информацию заголовка времени через GeoTrellis

Язык кода:javascript
копировать
val tiff = SinglebandGeoTiff(path) tiff.tags.headTags + (Tags.TIFFTAG_DATETIME -> time) val newtiff = new SinglebandGeoTiff(tiff.tile, tiff.extent, tiff.crs, Tags(map, tiff.tags.bandTags), tiff.options) newtiff.write(newTiffPath) 

Изменить параметры импорта При импорте обычных данных TIFF используйте класс ETL: Etl.ingestProjectedExtent, SpatialKey, Tile

При импорте данных временных рядов: Etl.ingestTemporalProjectedExtent, SpaceTimeKey, Tile В основном добавляется поддержка времени, ProjectedExtent становится TemporalProjectExtent, SpatialKey становится SpaceTimeKey, если он многоканальный, Tile необходимо заменить на MultibandTile.

Изменить параметры импорта Чтобы изменить input.json, вам нужно всего лишь изменить формат с geotiff на temporal-geotiff в файле output.json, вам нужно изменить содержимое keyIndexMethod на следующее:

Язык кода:javascript
копировать
"keyIndexMethod":{   
"type":"zorder", 
"temporalResolution": 86400000, 
"timeTag":"TIFFTAG_DATETIME", 
"timeFormat":"yyyy:MM:dd HH:mm:ss" 
} 

TemporalResolution представляет точность времени. Теоретически установка этого значения означает, что при запросе на основе времени должна быть возможность запрашивать данные в этом диапазоне точности. На этом этапе данные временных рядов были импортированы в аккумулятор.

Получите соответствующие плитки временных рядов Служба регистрации передает время запроса, а также значения x, y и z плиток на задний план, а также запросы на основе этих четырех параметров. По сравнению с обычными запросами добавляются дополнительные временные условия.

Язык кода:javascript
копировать
val dt = DateTimeFormat.forPattern("yyyy:MM:dd HH:mm:ss").parseDateTime(time)
val key = SpaceTimeKey(x, y, dt)
val layerId = LayerId(name, zoom)
respondWithMediaType(MediaTypes.`image/png`) {
val result = {
  val tile = tileReader.reader[SpaceTimeKey, Tile](layerId).read(key)
  tile.renderPng.bytes
}
complete(result)
}

name указывает имя, в котором хранятся импортированные данные, а tileReader — это экземпляр AccumuloValueReader.

Таким образом, время, запрошенное пользователем, а также данные плиток x, y и z могут быть отображены и отправлены на стойку регистрации. Здесь необходимо подчеркнуть, что для обработки времени в Geotrellis используется платформа с открытым исходным кодом joda.

Аналитические навыки

анализ данных Наклон: Наклон Чтобы прочитать тайлы, вызовите tile.slope склон Буфер: Buffer Растрированная геометрия:

Язык кода:javascript
копировать
Rasterizer.foreachCellByGeometry(geom, rasterExtent)(f)  
ArrayTile(array, rasterExtent.cols, rasterExtent.rows) 

Статистический анализ Информация о высоте: tile.histogram.

Язык кода:javascript
копировать
tile.histogram.foreach { (key, value) => { map(key.toDouble) = map(key.toDouble) + value } 

ссылка

weishoufeng: https://blog.csdn.net/luoye4321/article/category/9294349 https://blog.csdn.net/qq_32432081?t=1 https://www.cnblogs.com/shoufengwei/p/5619419.html

Перепечатка

https://www.it610.com/article/1304061019752009728.htm

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose