SatMap (часть 3) - [62] :: Программы :: Компьютерный форум Ru.Board
Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » SatMap (часть 3)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

Открыть новую тему     Написать ответ в эту тему

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Предыдущие части темы

 
SatMap
просмотр, скачивание, кэширование, склейка и привязка спутниковых снимков/гибрида/карт/ландшафта с сервиса Google Maps.

 
FAQ
Настоятельно рекомендуется ознакомиться как опытным пользователям, так и всем новичкам.

 
Текущая версия 2.9.9 (multilingual):
История версий
полный комплект v2.9.9 (3.5 Mb)
v2.9.9 (только exe) (2.19 Mb)
SatMap API
 
* - архивы в формате 7-zip
 


Кэши скачанных районов [?]
 


 
Официальный сайт http://satmap.narod.ru

 
Основные функции и возможности (на данный момент):
1. Импорт данных из кэша GoogleMV (версии 2.7+), SatMap, SASPlanet, Global Mapper
2. Формат кэша: 1 кэш = 1 файл
3. До 100 подключаемых кэшей
4. Экспорт в кэш формата GoogleMV, SatMap, SASPLanet, sqlitedb (RMaps, Locus Map, OruxMaps)
5. Поиск, сохранение и переход по введенным координатам/названию места
6. Импорт/экспорт путевых точек и треков в форматах OziExplorer (*.wpt, *.plt), *.gpx, *.kml
7. Измерение расстояния
8. Склейка/экспорт данных в графические форматы JPG, PNG, TIFF, ECW, JPEG2000, MrSID
9. Геопривязка в форматах Ozi Explorer, MapInfo, world-файл, TomTom overlay
10. Закачивание данных с сервиса Google Maps без бана
11. Показ высоты по данным SRTM
12. API для управления SatMap
13. Навигационный режим работы с GPS-приемником
14. Работа с базой данных географических названий объектов GNS
15. Пользовательские инструменты
16. Закачка тайлов только по треку (выбираемая ширина коридора в метрах или тайлах)
 
Планируется:
1. Работа с форматом kmz
2. Возможность скачивать данные с других сервисов
3. и многое другое......
 
Программа распространяется бесплатно. Используйте ее на свой страх и риск.
 
Помочь проекту
WebMoney:
R185452921094
Z336558313529
Яндекс.Деньги:
4100166097013

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 11:57 02-08-2010 | Исправлено: relictus, 10:40 24-08-2022
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nemo3001
С удивлением обнаружил много текста в топике после выходных
Судя по последнему посту, вопрос исчерпан? Вникать во все тонкости все равно некогда...

Всего записей: 3777 | Зарегистр. 19-04-2005 | Отправлено: 08:31 13-06-2023 | Исправлено: relictus, 09:04 13-06-2023
nemo3001

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
relictus
Да, были у меня вопросы по работе инструмента измерения в SatMap, когда пробовал сделать для SatMap подобие километровой сетки, которая обсуждалась на сайте SAS.Planet.
http://www.sasgis.org/mantis/view.php?id=2194
Но сейчас, вроде бы, все эти вопросы пока разрешились.
 
 
Добавлено:
relictus
zedxxx
Хотел обсудить тему насчет более удобной интеграции программ SatMap и SAS.Planet по работе с кэшами обеих программ, чтобы можно было бы легко использовать в SatMap кэши SAS.Planet и наоборот - в SAS.Planet просматривать кэши SatMap. Вот и karst примерно об этом писал полгода назад.
Они обе очень хорошие и удобные программы, и такие возможности были бы полезны пользователям.
 
Односторонняя интеграция в SatMap есть и сейчас - экспорт/импорт тайлового кэша SAS.Planet. Он сейчас уже не очень удобен из-за громоздкости тайлового кэша, но еще никто не написал конвертера для экспорта/импорта sqlite кэша SAS.Planet в кэш SatMap и наоборот, так что будем пока пользоваться тем, что сейчас уже есть в SatMap.
 
А вот как сделать доступным в SAS.Planet просмотр кэша SatMap без его преобразования, я не мог придумать, пока недавно zed не написал локальный сервер для генерации изображения километровой сетки.
 
Там на своем компьютере пользователь запускает программу сервера grid.exe, который регистрируется на порту 8888 и по запросу из SAS.Planet возвращает информацию для отображения сетки.
Для такого запроса SAS.Planet использует url вида:
http://localhost:8888/gk/2/{z}/{x}/{y}
который пользователь может сам изменять в меню Параметры - Параметры слоя - Слой - Интернет.
 
Интересно, а можно ли написать такой локальный сервер, который регистрировался бы на отдельном порту для каждого кэша SatMap, заданного ему пользователем, и по аналогичному запросу из SAS.Planet отдавал бы туда для просмотра тайлы из кэша SatMap.
 
Для этого можно было бы в SAS.Planet использовать какой-нибудь запрос, вида
http://localhost:32167/satmap/0/{z}/{x}/{y}
ну, или в общем виде
http://localhost:port/satmap/layer/{z}/{x}/{y}
где параметр layer = 0|1|2|3 запрашивал бы в кэше SatMap тайл формата jpg или png со слоя Спутник|Гибрид|Карта|Ландшафт с координатами x,y и уровнем z.
 
Конечно, и сама программа SatMap могла бы после изменения в ней стать таким локальным сервером и регистрировать для каждого открытого в ней кэша отдельный порт, возвращая на tcp запросы тайлы из этих кэшей для SAS.Planet.
 
Но, если даже не изменять программу SatMap, то может быть можно написать такую внешнюю программу - локальный сервер для просмотра кэшей SatMap в SAS.Planet. Для которого, конечно, придется в SAS.Planet написать какой-нибудь satmap.zmp, если это вообще там возможно.
 
Может быть, для этого на каком-то этапе удастся использовать API SatMap, где есть функции выборки тайла из кэша по заданным параметрам.
 
В общем, я просто хотел узнать ваше мнение, как специалистов в этих программах - возможна вообще такая интеграция этих программ для просмотра кэшей SatMap в SAS.Planet без их конвертации с помощью локального сервера для извлечения и передачи тайлов.
И каким может быть путь для реализации этой возможности.

Всего записей: 240 | Зарегистр. 06-05-2010 | Отправлено: 09:43 30-06-2023 | Исправлено: nemo3001, 11:15 30-06-2023
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nemo3001
Конечно это возможно. Если не заморачиваться с мультипоточностью и производительностью, то простенький скрипт на питоне легко решит проблему.  
 
Добавлено:
Держите: https://gist.github.com/zedxxx/0f699e84e8b22b15fc84a6300a0228ee

Всего записей: 1581 | Зарегистр. 14-07-2008 | Отправлено: 17:05 30-06-2023
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подправил скрипт, чтобы он мог отдавать тайлы сразу из нескольких кэшей. Плюс, в zmp увеличил размер RAM кэша и его время жизни.

Всего записей: 1581 | Зарегистр. 14-07-2008 | Отправлено: 12:27 01-07-2023
nemo3001

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zedxxx
Искреннее спасибо за быстрый и конструктивный ответ и за скрипт.
 
Можно будет приспособить его и настроить с его помощью быстрый и удобный просмотр разных кэшей SatMap в SAS.Planet без особых затрат времени, усилий и дополнительных действий для пользователя, чтобы можно было выбрать кэш SatMap и сразу смотреть его в SAS.Planet.

Всего записей: 240 | Зарегистр. 06-05-2010 | Отправлено: 13:15 02-07-2023 | Исправлено: nemo3001, 09:50 15-07-2023
nemo3001

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сравнил для интереса, насколько изменилось бы измерение расстояния в SatMap, если применять значение среднего радиуса Земли в 6371 км, а не ее экваториального радиуса в 6378.137 км, которое сейчас используется в SatMap по умолчанию.
 
Оказалось, что на каждый километр расстояния SatMap увеличивает его примерно на 1 метр. Что добавляет к расстоянию от Москвы до Петербурга примерно 700 м, а до Владивостока примерно 7 км.
 
В общем, для практического применения такая разница, видимо, не очень значительна, но для себя пользователи могут это иметь в виду.
А желающим более точно измерять расстояния на Земле можно использовать формулы для измерения расстояний не по поверхности шара, а по поверхности эллипсоида.
Подробнее... [?]

Всего записей: 240 | Зарегистр. 06-05-2010 | Отправлено: 00:06 16-07-2023 | Исправлено: nemo3001, 02:40 04-08-2024
nemo3001

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
relictus
Для работы с SatMap мне понадобились координаты текущего пикселя под указателем мыши.
У нас есть возможность нажатием Ctrl+Z копировать в буфер обмена текущие координаты под указателем мыши. Можно нажатием Ctrl+Alt+C скопировать координаты текущего тайла.
А вот скопировать координаты текущего пикселя сейчас нельзя.
 
Программа при завершении работы умеет сохранять текущее положение центра карты в пикселях в формате
    <Level>18</Level>
    <CX>20283707</CX>
    <CY>10489520</CY>
Было бы удобно иметь возможность нажатием предположим Ctrl+Alt+Z скопировать такие же координаты для текущего пикселя под указателем мыши. С номером текущего уровня, или без него. В  формате копирования географических координат (просто два числа через пробел, например 20283707 10489520) - так было бы проще, или так, как копируются координаты текущего тайла (x=n y=n).
 
То есть, нажал Ctrl+Z - получил географические координаты под курсором мыши, нажал Ctrl+Alt+Z - получил координаты в пикселях этой же точки.
 
Если делать изменения к этой программе сейчас уже не очень захочется, то может быть ты сможешь дать тут просто тексты двух функций: перевод географических координаты в пиксели на заданном уровне, и наоборот: перевод координат в пикселях на заданном уровне в географические координаты, которые используются в SatMap?
 
Я попросил ИИ написать такие функции на VBA Excel, но он пишет, что использовал приближенные алгоритмы для функции GeoToPixels(). А хотелось бы иметь эту функцию на любом языке программирования для точного перевода географических координат в пиксельные, как это используется в SatMap.
GeoToPixels()
https://www.perplexity.ai/search/napisat-tekst-funktsii-na-iazy-ofuXZSxeRXO0zNg5k5eHPg
PixelToGeo()
https://www.perplexity.ai/search/napisat-tekst-funktsii-na-iazy-yO8ZolF.SwCk_ibH7tF.gQ

Всего записей: 240 | Зарегистр. 06-05-2010 | Отправлено: 03:41 05-03-2025 | Исправлено: nemo3001, 07:19 05-03-2025
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nemo3001
 
ChatGPT:

Код:
 
Function LatLngToPixels(lat As Double, lng As Double, zoom As Integer) As Variant
    ' Константа размера тайла
    Const TILE_SIZE As Double = 256
     
    ' Вычисление масштаба карты
    Dim scale As Double
    scale = 2 ^ zoom
     
    ' Нормализация долготы (x-координата)
    Dim x As Double
    x = (lng + 180) / 360 * TILE_SIZE * scale
     
    ' Преобразование широты в меркаторскую проекцию
    Dim sinLat As Double
    sinLat = Sin(lat * WorksheetFunction.Pi() / 180)
     
    Dim y As Double
    y = (0.5 - Log((1 + sinLat) / (1 - sinLat)) / (4 * WorksheetFunction.Pi())) * TILE_SIZE * scale
     
    ' Возвращаем результат как массив (x, y)
    LatLngToPixels = Array(Int(x), Int(y))
End Function
 
' Пример использования в ячейках Excel
' Вызов функции: =LatLngToPixels(37.7749, -122.4194, 10)
 


Код:
 
Function PixelsToLatLng(x As Double, y As Double, zoom As Integer) As Variant
    ' Константа размера тайла
    Const TILE_SIZE As Double = 256
     
    ' Вычисление масштаба карты
    Dim scale As Double
    scale = 2 ^ zoom
     
    ' Вычисление долготы (lng)
    Dim lng As Double
    lng = (x / (TILE_SIZE * scale)) * 360 - 180
     
    ' Вычисление широты (lat)
    Dim n As Double
    n = WorksheetFunction.Pi() - 2 * WorksheetFunction.Pi() * (y / (TILE_SIZE * scale))
    Dim lat As Double
    lat = 180 / WorksheetFunction.Pi() * Atn(0.5 * (Exp(n) - Exp(-n)))
     
    ' Возвращаем результат как массив (lat, lng)
    PixelsToLatLng = Array(lat, lng)
End Function
 

Всего записей: 1581 | Зарегистр. 14-07-2008 | Отправлено: 22:39 05-03-2025 | Исправлено: zedxxx, 22:51 05-03-2025
nemo3001

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zedxxx
Спасибо за код от ChatGPT. Обязательно сейчас проверю его.
 
С виду похожий код выдал https://giga.chat/
на вопрос: "Написать текст функции на языке VBA Excel для перевода географических координат в пиксели на заданном уровне увеличения спутникового снимка"
Подробнее... [?]
 
Но вот результаты в пикселях эта функция выдала совсем другие, не совпадающие с пиксельными координатами в SatMap.
 
Пока предполагаю, что тут результат делается для синусоидальной проекции Меркатора, а не для WGS 84.
И тут еще нужно преобразовать результат в эту проекцию.
Но это все пока предположения. Небольшой я специалист в геодезических проекциях. Мне бы функцию, чтобы по географическим координатам в SatMap получить точные координаты в пикселях на изображении спутниковой карты.
 
И, конечно, сравню результаты для функции от ChatGPT, на что тут будет похоже.
Может быть тут уже и есть это решение.
 
Добавлено:
zedxxx
Обе функции от ChatGPT выдают правильные результаты, совпадающие с координатами в SatMap.
Спасибо за решение проблемы )
 
Интересно, конечно, какой текст запроса был для ChatGPT, в ответ на который он сделал эти две функции.  
Может быть и другие ИИ смогли бы написать правильные функции, и просто это я давал им неверный запрос.

Всего записей: 240 | Зарегистр. 06-05-2010 | Отправлено: 09:46 06-03-2025 | Исправлено: nemo3001, 14:39 06-03-2025
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Запрос был: "Напиши функцию перевода географических координат в пиксельные для google maps"
 
Он сразу на питоне код написал, попросил его переписать на VBA, а потом ещё и написать обратную функцию.

Всего записей: 1581 | Зарегистр. 14-07-2008 | Отправлено: 11:01 06-03-2025
nemo3001

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zedxxx
Точно. Не указал я, что перевод координат должен быть для google maps. Так он сразу понял насчет WGS 84.
 
Проверил сейчас это на другом ИИ, и он тоже написал правильную функцию.
Вопрос: "Напиши функцию перевода географических координат в пиксельные для google maps на VBA Excel"
Ответ: https://www.perplexity.ai/search/napishi-funktsiiu-perevoda-geo-fw9T_gTHQF6gh8pYq0fyzQ
Подробнее... [?]

Всего записей: 240 | Зарегистр. 06-05-2010 | Отправлено: 14:23 06-03-2025 | Исправлено: nemo3001, 19:48 08-03-2025
nemo3001

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробовал на конкретной работе функции перевода географических координат в пиксельные LatLngToPixels() от ChatGPT и GeoToPixel() от perplexity.ai из моего предыдущего поста.
 
Обе эти функции выдавали одинаковые результаты на пробных географических координатах в произвольном месте карты (52,104, уровень 20), которые совпадали с результатами от SatMap в файле satmap.xml
 
Но вот когда стал использовать эти функции в левом верхнем углу карты, где я размещаю в кэше SatMap различные изображения для обработки, то оказалось, что функция LatLngToPixels() от ChatGPT выдает неверные пиксельные координаты, отличающиеся от координат программы SatMap, которые она записывает в файле satmap.xml.
А вот функция GeoToPixel() от perplexity.ai возвратила пиксельные координаты, совпадающие с SatMap.
Подробнее... [?]
Причины этого отличия в работе функций я пока не смотрел детально. Возможно, что эти функции используют все-таки немного разные алгоритмы расчета, которые дают различные результаты в пиксельных координатах на краю изображения спутниковой карты
 
Но вот из-за того, что в левом верхнем углу изображения карты пиксельные координаты небольшие по значению (для географических координат 85.05111449  -179.9993283 пиксельные координаты x=4007 y=988 на 24 уровне), то эти значения пиксельных координат можно было уже дополнительно проверить во внешней программе (я использовал Photoshop).  
 
Для этого я просто открыл в фотошопе это же изображение, что было в кэше SatMap, и в окне Инфо посмотрел пиксельные координаты для выбранной точки.  
Там фотошоп тоже показал x=4007 и y=988, как GeoToPixel() и SatMap.
 
Эта задача перевода географических координат в пиксельные, конечно, довольно специфическая.
Но если у кого-нибудь из пользователей программы SatMap она все же возникнет, то стоит иметь в виду, что для такой работы можно использовать функцию  GeoToPixel() от perplexity.ai.
Подробнее... [?]

Всего записей: 240 | Зарегистр. 06-05-2010 | Отправлено: 10:06 09-03-2025 | Исправлено: nemo3001, 10:09 09-03-2025
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Причины этого отличия в работе функций я пока не смотрел детально.

Первая функция делает Int, а вторая Round для результата, вот и отличия. Откуда у вас получилось y=932 я не знаю, у меня такого нет и близко.
 
Если считать без округления до целого, то результат такой: 4006,8465; 988,12 и в зависимости от ваших нужд, тут возможно вообще Ceil требуется применять.

Всего записей: 1581 | Зарегистр. 14-07-2008 | Отправлено: 12:23 09-03-2025
nemo3001

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zedxxx

Цитата:
Откуда у вас получилось y=932 я не знаю, у меня такого нет и близко.  

Да, обе функции работают правильно. исправил ошибку у себя. Спасибо.
Подробнее... [?]

Всего записей: 240 | Зарегистр. 06-05-2010 | Отправлено: 14:44 09-03-2025 | Исправлено: nemo3001, 15:52 09-03-2025
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nemo3001
Извиняюсь за поздний ответ, был долго далеко от цивилизации) Вижу уже все разрешилось, благодаря помощи zedxxx. Если еще что-то от меня требуется, дай знать.

Всего записей: 3777 | Зарегистр. 19-04-2005 | Отправлено: 17:11 29-03-2025
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

Компьютерный форум Ru.Board » Компьютеры » Программы » SatMap (часть 3)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru