Подключите нашего Telegram-бота для уведомлений о новых проектах

Написать функцию преобразования географических координат в их хэш

a
Заказчик
Отзывы фрилансеров: + 0 - 0
Зарегистрирован на сайте 1 год и 1 месяц
Бюджет: 200 — 500 ₽/час
Срок: До недели
Исполнитель определен: Алексей Пьянков  
Необходимо реализовать алгоритм преобразования, который принимает долготу и широту и преобразовывает их в одну строку – их хэш. При этом должно выполняться условие, что чем ближе друг к другу на карте находятся географические точки, тем ближе друг к другу по алфавиту будут находиться их хэши. Иными словами, если у меня будет список точек и я отсортирую их по их хэшам, то используя поиск хэша нужной точки (и, возможно, нескольких соседних) в этом массиве, я смогу найти все точки, находящиеся рядом с ней, за логарифмическое время. Такое хэширование предполает разбивку сферы на множество равносторонних треугольников разного размера, каждый из которых соответсвует своему хэшу. Чем длиннее хэш – тем меньше треугольник и тем точнее указана координата.

Нужно реализовать три функции на питоне:
1) создание хэша из координат (принимает x, y, radius) и возвращает хэш треугольника в котором находится точка (x,y), такого что сторона треугольника L удовлетворяет условию L <= radius < 2L. Радиус указывается в метрах.

2) создание координат из хэша (принимает hash) и возвращает x,y центра треугольника с таким хэшем и его длину стороны.

3) поиск. Принимает координату x,y и сторону треугольника. Возвращает массив из хэшей, среди которых первый – хэш этой координаты (функция 1), а ещё 12 – хэши всех соседних с ним треугольников (по стороне или вершине).

Алгоритм разбивки на треугольники следующий:
Вся поверхность сферы разбивается на треугольники. Сперва на 12 больших (по 6 в каждом полушарии, линиями из полюсов к экватору). Затем рекурсивно каждый треугольник разбивается на 4 меньших (по медианам). Хэш формируется следующим образом: первый символ полушарие + северное, – южное. Затем число от 0 до 5 – соответствуют треугольникам 0-60 грабусов долготы, 60-120 градусов и.т.д. Затем для каждого из подтреугольников добавляется один из символов <^>* где <> – левый или правый меньший трегольник, ^ – верхний или нижний, а * – центральный. Таким образом адрес треугольника выглядит примерно так +1<<>**^*>^. Каждый раз размер треугольника уменьшается вдвое и что бы достичь точности в 1 км нужно 15 символов. Для точности в 1 метр 25 символов и.т.д. Так же нужно написать функции для сжатия/расшифровки этих хэшей. При сжатии они укорачиваются с использованием base64 (каждые три символа превращаются в один, лишние остаются без изменений), при расшифровке – возвращается как было.
Разделы:
Опубликован:
14.11.2023 | 09:03 [поднят: 14.11.2023 | 09:03]

Теги: написать программу, создать программу, разработать программу, разработчики программ, прикладной программист

Наши партнеры
Сведения об ООО «Ваан» внесены в реестр аккредитованных организаций, осуществляющих деятельность в области информационных технологий. ООО «Ваан» осуществляет деятельность, связанную с использованием информационных технологий, по разработке компьютерного программного обеспечения, предоставлению доступа к программе для ЭВМ и является правообладателем программы для ЭВМ «Платформа FL.ru (версия 2.0)».