You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Я пока еще не успел поучаствовать в open-source и не знаю, как это правильно организовывать. Так что я пока просто поскидываю сюда несколько задач, за которые может взяться кто-нибудь желающий.
Так вот. Меня периодически просят добавить всякие карты в нестандартных проекциях. Например вот несколько карт в проекции LKS 1994 (EPSG 3346). http://maps.lt/map https://www.geoportal.lt/map/#
В принципе, можно попробовать написать функцию-конвертер координат для этой проекции. Я когда-то нашел что-то подобное для тайлов Яндекса и адаптировал в свой проект. Можно использовать это в качестве примера. Вот как это выглядело.
На этой страничке в разделе "Круглая или не очень" есть описание принципа работы этого конвертера. Простыми словами и с картинками )) https://anygis.ru/Web/Html/Description_ru
Берем полученные 4 адреса и величину смещения. Отправляем post запрос с этими данными на мой микро сервер для обработки изображений. Получив запрос, он скачает эти 4 тайла и склеит их в один большой. А затем отступит от левого-верхнего угла требуемое количество пикселей и вырежет квадрат размером 256х256. Это и будет тайл с нужным нам смещением. Можно возвращать эту картинку пользователю.
Вот пример curl запроса, который можно отправлять на микросервер. Параметры должны называться urlTL, urlTR, urlBL, urlTL, urlBR, xOffset, xOffset. Здеь urlTL - это Top Left, а urlBR - это Bottom Right. Можно использовать сервер для отладки.
curl -X POST http://68.183.65.138:3000/move
-d 'urlTL=https%3A%2F%2Fvec01.maps.yandex.net%2Ftiles%3Fl%3Dmap%26x%3D619%26y%3D318%26z%3D10%26scale%3D2%26lang%3Dru-RU&urlTR=https%3A%2F%2Fvec04.maps.yandex.net%2Ftiles%3Fl%3Dmap%26x%3D620%26y%3D318%26z%3D10%26scale%3D2%26lang%3Dru-RU&urlBR=https%3A%2F%2Fvec01.maps.yandex.net%2Ftiles%3Fl%3Dmap%26x%3D620%26y%3D319%26z%3D10%26scale%3D2%26lang%3Dru-RU&urlBL=https%3A%2F%2Fvec04.maps.yandex.net%2Ftiles%3Fl%3Dmap%26x%3D619%26y%3D319%26z%3D10%26scale%3D2%26lang%3Dru-RU&xOffset=0&yOffset=232'
А теперь, собственно, что нужно сделать?
Нужно найти подходящую формулу для перевода координат. И написать функцию как в пункте 2. Но для проекции LKS 1994 (EPSG 3346). То есть функцию, которая принимает координаты левого-верхнего угла OSM тайла. (latitude: Double, longitude: Double, zoom: Int).
А возвращать она должна номер LKS1994 тайла, на котором лежит точка левого-верхнего угла OSM тайла. То есть что-то такое (x: Int, y: Int, z: Int, offsetX: Int, offsetY: Int)
Вот. Если вы пишите на Swift, дописывайте свою функцию в файл по ссылке из пункта 2. И присылайте пул реквест.
Ну а если (что более вероятно) вы не знаете, что это вообще за язык такой, то можете просто написать эту функцию на любом удобном для вас языке. И присылать ее сюда. Прямо текстом. А я ее потом уже переведу. Думаю, это будет не сложно. Все равно большая часть работы здесь - это поиск и адаптация формул.
Примерно так. Ну, и если будет желание, то можно потом попробовать поставить это все на поток и написать еще несколько онлайн-конверторов для разных проекций. Чтобы можно было смотреть прямо из навигатора все эти локальные онлайн-карты.
The text was updated successfully, but these errors were encountered:
Я пока еще не успел поучаствовать в open-source и не знаю, как это правильно организовывать. Так что я пока просто поскидываю сюда несколько задач, за которые может взяться кто-нибудь желающий.
Так вот. Меня периодически просят добавить всякие карты в нестандартных проекциях. Например вот несколько карт в проекции LKS 1994 (EPSG 3346).
http://maps.lt/map
https://www.geoportal.lt/map/#
В принципе, можно попробовать написать функцию-конвертер координат для этой проекции. Я когда-то нашел что-то подобное для тайлов Яндекса и адаптировал в свой проект. Можно использовать это в качестве примера. Вот как это выглядело.
На этой страничке в разделе "Круглая или не очень" есть описание принципа работы этого конвертера. Простыми словами и с картинками ))
https://anygis.ru/Web/Html/Description_ru
А вот и код. Работает он в четыре этапа.
Берем номер тайла в стандартной проекции. Получаем координаты его левого-верхнего угла. (Формула взята из osm wiki)
https://www.jdoodle.com/a/1ECy
https://github.com/nnngrach/AnyGIS_server/blob/671ef7071332e05741f8b2896492b7124f371ec2/Sources/App/ModelsOfLogic/Coordinate%20Tools/CoordinateTransformer.swift#L48
Берем координаты этой точки. Получаем номер тайла Яндекса, на котором она будет лежать. И количество пикселей, на которые эта точка смещена от его левого-верхнего угла.
https://www.jdoodle.com/a/1ECz
https://github.com/nnngrach/AnyGIS_server/blob/671ef7071332e05741f8b2896492b7124f371ec2/Sources/App/ModelsOfLogic/Coordinate%20Tools/CoordinateTransformer.swift#L62
Берем номер тайла Яндекса и шаблон его url адреса. Подставляем цифры на место заглушек типа {x},{y},{z}. Получаем 4 готовых url-адреса для скачивания этого и соседних тайлов.
https://github.com/nnngrach/AnyGIS_server/blob/671ef7071332e05741f8b2896492b7124f371ec2/Sources/App/ModelsOfLogic/Coordinate%20Tools/URLPatchCreator.swift#L39
Берем полученные 4 адреса и величину смещения. Отправляем post запрос с этими данными на мой микро сервер для обработки изображений. Получив запрос, он скачает эти 4 тайла и склеит их в один большой. А затем отступит от левого-верхнего угла требуемое количество пикселей и вырежет квадрат размером 256х256. Это и будет тайл с нужным нам смещением. Можно возвращать эту картинку пользователю.
Вот пример curl запроса, который можно отправлять на микросервер. Параметры должны называться urlTL, urlTR, urlBL, urlTL, urlBR, xOffset, xOffset. Здеь urlTL - это Top Left, а urlBR - это Bottom Right. Можно использовать сервер для отладки.
curl -X POST
http://68.183.65.138:3000/move
-d 'urlTL=https%3A%2F%2Fvec01.maps.yandex.net%2Ftiles%3Fl%3Dmap%26x%3D619%26y%3D318%26z%3D10%26scale%3D2%26lang%3Dru-RU&urlTR=https%3A%2F%2Fvec04.maps.yandex.net%2Ftiles%3Fl%3Dmap%26x%3D620%26y%3D318%26z%3D10%26scale%3D2%26lang%3Dru-RU&urlBR=https%3A%2F%2Fvec01.maps.yandex.net%2Ftiles%3Fl%3Dmap%26x%3D620%26y%3D319%26z%3D10%26scale%3D2%26lang%3Dru-RU&urlBL=https%3A%2F%2Fvec04.maps.yandex.net%2Ftiles%3Fl%3Dmap%26x%3D619%26y%3D319%26z%3D10%26scale%3D2%26lang%3Dru-RU&xOffset=0&yOffset=232'
А теперь, собственно, что нужно сделать?
Нужно найти подходящую формулу для перевода координат. И написать функцию как в пункте 2. Но для проекции LKS 1994 (EPSG 3346). То есть функцию, которая принимает координаты левого-верхнего угла OSM тайла. (latitude: Double, longitude: Double, zoom: Int).
А возвращать она должна номер LKS1994 тайла, на котором лежит точка левого-верхнего угла OSM тайла. То есть что-то такое (x: Int, y: Int, z: Int, offsetX: Int, offsetY: Int)
Вот. Если вы пишите на Swift, дописывайте свою функцию в файл по ссылке из пункта 2. И присылайте пул реквест.
Ну а если (что более вероятно) вы не знаете, что это вообще за язык такой, то можете просто написать эту функцию на любом удобном для вас языке. И присылать ее сюда. Прямо текстом. А я ее потом уже переведу. Думаю, это будет не сложно. Все равно большая часть работы здесь - это поиск и адаптация формул.
Примерно так. Ну, и если будет желание, то можно потом попробовать поставить это все на поток и написать еще несколько онлайн-конверторов для разных проекций. Чтобы можно было смотреть прямо из навигатора все эти локальные онлайн-карты.
The text was updated successfully, but these errors were encountered: