Есть отсканированная вот такая карта - 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
Дальше хуже. Поворачивать сжимать карту я не стал, перепроецировать тоже (потому что я не знаю, какая у меня исходная проекция и какая мне нужна), перешел сразу к изготовлению тайлов, но приведенный в статье скрипт упал с
Код: Выделить всё
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"
Куда идти дальше не знаю. Подскажите пожалуйста.
Да, у меня нет Windows и я не знаю, честно говоря, откуда его сейчас можно взять - поэтому вариант с SAS.Planet (если он знает про OsmAnd - что совершенно не факт) мне не подходит, наверное. Хотя если есть простой способ запустить его в wine или в qemu/virtualbox (тут уже в комплекте с Windows) - можно было бы и попробовать.
Но хорошо бы по возможности обойтись свободными инструментами - тем же QGIS и gdal ...