Nano Hash - криптовалюты, майнинг, программирование

Отображение изображений с географической привязкой с помощью OpenLayers 5

Я пытаюсь создать приложение, в котором пользователь может привязать отсканированные карты к местности. Вы можете посмотреть пример здесь: https://codesandbox.io/s/2o99jvrnyy Есть два картинки:

Первое изображение правильно загружено на карту, а изображение с поворотом - нет.

Я не могу найти информацию о том, может ли OpenLayers 5 обрабатывать изображения с параметрами преобразования, хранящимися в файле мира. Наверное, я чего-то упускаю, но не могу понять, что именно.

Вот как работает моя логика:

Параметры преобразования рассчитываются методом аффинного преобразования по 4 точкам. Вы можете увидеть логику в файле Affine.js. По крайней мере, 4 точки взяты из исходного изображения и карты. Затем по этим 4 точкам рассчитываются параметры трансформации. После этого я рассчитываю размер изображения:

width = image.width in pixels
height = image.height in pixels
width *= Math.sqrt(Math.pow(parameters.A, 2) + Math.pow(parameters.D, 2));
height *= Math.sqrt(Math.pow(parameters.B, 2) + Math.pow(parameters.E, 2));

// then the extent in projection units is
extent = [parameters.C, parameters.F - height, parameters.C + width, parameters.F];

Параметры файла мира рассчитываются, как указано здесь.

Вероятно, проблема в том, что изображение с поворотом не поворачивается при загрузке как статическое изображение в OpenLayers 5, но не может найти способ сделать это.

Я попытался загрузить оба изображения в QGIS и ArcMap с рассчитанными параметрами, и оба они загружаются правильно. Вы можете увидеть результат для второй картинки:

введите описание изображения здесь

Здесь вы можете увидеть параметры для каждого изображения:

Image: test.png
Calculated extent: [436296.79726721847, 4666723.973240128, 439864.3389057907, 4669253.416495154]
Calculated parameters (for world file):
3.8359372067274027
-0.03146800786355865
-0.03350636818089405
-3.820764346376064
436296.79726721847
4669253.416495154

Image: test_rotation.png
Calculated extent: [437178.8291026594, 4667129.767589236, 440486.91675884253, 4669768.939256327]
Calculated parameters (for world file):
3.506332904308879
-1.2831186688536016
-1.3644002712982917
-3.7014921022625864
437178.8291026594
4669768.939256327
20.10.2018

Ответы:


1

Я понял, что мой подход был неправильным. Нет необходимости рассчитывать экстент изображения в картографической проекции и устанавливать его в слое. Я могу просто добавить функцию преобразования, отвечающую за преобразование координат между проекцией изображения и проекцией карты. Таким образом, для слоя изображения всегда устанавливается проекция изображения, а размер - размер изображения в пикселях.

Функция трансформации добавляется так:

import { addCoordinateTransforms } from 'ol/proj.js';

addCoordinateTransforms(
  mapProjection,
  imageProjection,
  coords => {
    // forward
    return Affine.transform(coords);
  },
  coords => {
    // inverse
  }
)

Аффинные параметры снова рассчитываются как минимум по 3 точкам:

// mapPoints - coordinates in map projection
// imagePoints - coordinates in image projection
Affine.calculate(mapPoints, imagePoints);

Вы можете увидеть здесь полный пример - https://kw9l85y5po.codesandbox.io/

24.10.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..