Как отсканированную карту использовать в OsmAnd

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
enp
Новоприбывший
Сообщения: 2
Зарегистрирован: 12 фев 2022, 17:29
Репутация: 0
Откуда: Ростов-на-Дону

Как отсканированную карту использовать в OsmAnd

Сообщение enp » 12 фев 2022, 18:24

Здравствуйте!

Есть отсканированная вот такая карта - https://alpindustria.ru/catalog/knigi/karty/132549/ - требуется конвертировать ее в формат, пригодный для использования в https://osmand.net/OsmAnd

До сих пор помимо родных векторных карт OsmAnd я использовал https://mobac.sourceforge.io/ c соотвествующим кастомным слоем (с урлом в духе http://b.tiles.nakarte.me/ggc250/{$z}/{$x}/{$y}). Можно попробовать свести мою задачу к предыдущей - и вроде бы процедура описана в https://kokoalberti.com/articles/georef ... with-gdal/, но я довольно плохо владею предметом, поэтому пройти весь путь, не очень понимая смысл действий, не выходит

Сначала я открыл свою картинку в QGIS, выбрал там Растр -> Привязка растров, выставил 4 контрольных точки с известными координатами по краям карты, но ни "Начать привязку растра", ни "Создать сценарий GDAL" у меня никаких видимых последствий не имели, поэтому я просто сохранил точки в файл и создал GeoTIFF примерно так, как описано в статье выше:

Код: Выделить всё

$ gdal_translate \
    -gcp 124.61312217194500818 164.77828054298771576 42 43.3333333333333357 \
    -gcp 1933.98868778280461811 163.33031674208277195 42.25 43.3333333333333357 \
    -gcp 119.11085972850600001 1817.48416289592887551 42 43.1666666666666643 \
    -gcp 1931.57541478129610368 1815.36048265460181028 42.25 43.1666666666666643 \
    -of GTiff \
    uzunkol.jpg \
    uzunkol-with-gcps.tif
Полученный файл можно добавить в качестве слоя в QGIS, а если в качестве другого слоя добавить файл с GPS-координатами известных точкек, то на карте они отрисуются в нужном месте - т.е. привязка выполнена более-менее верно.

Дальше хуже. Поворачивать сжимать карту я не стал, перепроецировать тоже (потому что я не знаю, какая у меня исходная проекция и какая мне нужна), перешел сразу к изготовлению тайлов, но приведенный в статье скрипт упал с

Код: Выделить всё

Traceback (most recent call last):
  File "mktiles.py", line 33, in <module>
    z_max_default = int(math.floor(math.log(40075016.0, gt[1]) - 8) - 1)
ZeroDivisionError: float division by zero
при попытке вычисления дефолтных зумов, а как именно он их вычисляет, почему именно так и почему на моей карте этот способ не работает - тут моих знаний уже не хватает.

В той же самой статье упомянут mapserver, который якобы умеет делать тайлы на лету (если я правильно понял), поэтому я попытался нагуглить пример минимального map-файла для него и взлететь примерно так:

Код: Выделить всё

$ cat uzunkol.map
MAP
  NAME uzunkol
  STATUS ON
  EXTENT 0 0 4000 3000
  SIZE 400 300
  LAYER
    NAME "uzunkol"
    DATA "uzunkol-with-gcps.tif"
    TYPE RASTER
    STATUS ON
  END
END
$ docker run -v $(pwd):/maps:ro -p 8080:80 --name mapserver --rm geodata/mapserver
 * Starting FastCGI wrapper fcgiwrap
   ...done.
172.17.0.1 - - [12/Feb/2022:15:18:11 +0000] "GET /?map=/maps/uzunkol.map&mode=map HTTP/1.1" 200 1072 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0"
В результате по ссылке http://localhost:8080/?map=/maps/uzunkol.map&mode=map в браузере увидел светлый квадрат на черном фоне и все.

Куда идти дальше не знаю. Подскажите пожалуйста.

Да, у меня нет Windows и я не знаю, честно говоря, откуда его сейчас можно взять - поэтому вариант с SAS.Planet (если он знает про OsmAnd - что совершенно не факт) мне не подходит, наверное. Хотя если есть простой способ запустить его в wine или в qemu/virtualbox (тут уже в комплекте с Windows) - можно было бы и попробовать.

Но хорошо бы по возможности обойтись свободными инструментами - тем же QGIS и gdal ...

enp
Новоприбывший
Сообщения: 2
Зарегистрирован: 12 фев 2022, 17:29
Репутация: 0
Откуда: Ростов-на-Дону

Re: Как отсканированную карту использовать в OsmAnd

Сообщение enp » 13 фев 2022, 10:20

Да, есть подозрение, что с привязкой GeoTIFF что-то не то (хотя почему тогда его можно использовать в качестве полноценного слоя в QGIS?) потому что gdal.Open(file).GetGeoTransform() возвращает (0.0, 1.0, 0.0, 0.0, 0.0, 1.0)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Как отсканированную карту использовать в OsmAnd

Сообщение Максим Дубинин » 13 фев 2022, 10:26

QTiles для QGIS
пристегивайтесь, турбулентность прямо по курсу

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя