2016-06-30 3 views
0

Это скорее логическая проблема, чем техническая. Поэтому попросите, чтобы вы, ребята, не отметили это.Диапазон и долгота группировки/Bucketing

Я хочу написать метод в python, который принимает два параметра -> широта и долгота. Этот метод должен возвращать группу/ведро. Группировка должна проводиться на основе 0,05 градуса.

def get_bucket(lat,lng): 
    #body 

Например:

get_bucket (1.05,1.05) -> b1 get_bucket (1.05,1.03) -> b1

Так его, как если предположить, что земля разделена на 0,05 градусов квадрата сетки и любое лат/длинное падение в этом квадрате имеет одно и то же ведро.

+0

Первоначальная мысль заключалась бы в том, чтобы просто разделить и полы, но '0.15/0,05', например, не совсем 3. Умножьте на 100 и разделите пол на 5, возможно? –

+0

Поскольку земля не плоская, ваши ведра становятся все более треугольными, когда вы приближаетесь к полюсам. Это означает, что, грубо говоря, ваши самые большие ведра будут там, где больше людей, что может быть очень плохо, если ваша проблемная область находится под влиянием людей.(Конечно, это не имеет значения, если вас интересует только небольшой участок земного шара, особенно если патч находится рядом с экватором.) – rici

+0

Так в чем ваш вопрос? Вы вообще что-то пробовали? Если вы хотите поместить все целые числа от 0 до 1000 в ведра на основе результата деления их на 2, сколько ведер вам понадобится? Если вы можете решить эту проблему, тогда вы можете решить эту проблему. –

ответ

0

Вот одна реализация:

def get_bucket(lat,lng): 
    int(lng/0.05)*(whatever the highest possible lat is)/0.05 + int(lat/0.05) 
+0

что это "независимо от максимально возможного лата" – Juvenik

+0

@Juvenik 90 градусов? Планета является сферической. – Andrey

2

Есть, как правило, 180 градусов широты (-90) до 90 и 360 градусов долготы (-180 до 180).

Таким образом, приращения 18000 сотых градуса широты (т. Е. -90,00, -89,99, ... 89,99, 90,00) и приращения 3600 сотой степени долготы.

Предположим, вы положили это в двумерный массив. Если вы хотите с шагом 0,05 градуса, вам потребуется 3600 (18 000/5) строк для широты и 7 200 столбцов (36 000/5) строк для широты.

Итак, вы хотите преобразовать долготу/широту в два индекса массива. Вот один из способов:

  1. Возьмите свое число широты, которое будет находиться в диапазоне от -90 до 90 и добавит к нему 90 очков. Это дает вам число от 0 до 180.
  2. Умножьте на 100 и округлите вверх. Это дает вам число от 0 до 18 000.
  3. Разделить на 5

Это ваш индекс строки.

Сделайте то же самое с долготой, но добавьте 180, чтобы получить число от 0 до 360. Это дает номер столбца.

Пример:

Расположение Austin, TX является широта: 30,267, LNG: -97,743

30.267 + 90 = 120.267 
120.267 * 1000 = 12027 (rounded up) 
12027/5 = 2405 

-97.743 + 180 = 82.257 
82.257 * 1000 = 8226 (rounded up) 
8226/5 = 1645 

Так Остин, штат Техас будет идти в ведре (2450,1645)

Из Конечно, преобразование индексов обратно в широту и долготу - это просто обратное исходное преобразование. Для широты умножьте на 5, разделите на 1000 и вычтите 90.

Смежные вопросы