Как создать случайные гео-точки на расстоянии d от другой гео-точки? - PullRequest
3 голосов
/ 29 марта 2012

Как получить случайные гео-точки [широта / долгота в десятичном формате], расположенные в любом месте внутри круга радиусом 100 метров? Центр круга является еще одной ссылкой GeoPoint. Есть ли какая-нибудь функция / формула, которая реализует это?

В основном, я читаю вход GPS моего устройства Android и мне нужно генерировать случайные географические точки вокруг устройства [В радиусе 100 метров с центром в моем устройстве].

Обратите внимание: в базе данных нет предварительно сохраненных географических точек. Мне нужно создавать все гео-точки на лету, как упомянуто выше.

Ответы [ 3 ]

5 голосов
/ 26 марта 2013

Я только что написал метод Ruby, который расширяет Random, чтобы обеспечить это.

Предостережение : Все точки лежат в рамке, а не в круге.

class Random
  def location(lat, lng, max_dist_meters)

Это называется с Random.new.location(mid_lat, mid_lng, dist).Он вернет точку, которая вероятно в пределах max_dist_meters от средней точки.

    max_radius = Math.sqrt((max_dist_meters ** 2) / 2.0)

Без корректировки на max_radius мы получили бы точки внутри квадрата за пределами круга(то есть в углах), где расстояние будет больше, чем max_dist_meters.Это ограничивает нас квадратом внутри круга, который, вероятно, больше того, что вы хотите.

    lat_offset = rand(10 ** (Math.log10(max_radius / 1.11)-5))
    lng_offset = rand(10 ** (Math.log10(max_radius / 1.11)-5))

1.11 и 5 взяты из здесь .

    lat += [1,-1].sample * lat_offset
    lng += [1,-1].sample * lng_offset
    lat = [[-90, lat].max, 90].min
    lng = [[-180, lng].max, 180].min

Мы, вероятно, должны обернуться здесь вместо того, чтобы просто фиксировать значение, исправления приветствуются.

    [lat, lng]
  end
end

Комментарии / очистка приветствуются!

Пример вывода здесь , которыйВы можете хорошо видеть, если вы вставите широту / ширину здесь .

1 голос
/ 29 марта 2012

Выберите случайные точки на квадрате (то есть пары одинаковых случайных чисел), затем отбросьте все, которые не лежат внутри круга, вписанного в этот квадрат.Для заданных (x, y) пар точка находится внутри вашего круга, если:

(x - c_x)^2 + (y - c_y)^2 < r,

, где (c_x, c_y) - центр вашего круга, а r - его радиус.

0 голосов
/ 29 марта 2012

Начните здесь: Создайте случайную точку внутри круга (равномерно) . Затем выясните, как отцентрировать этот круг на контрольной широте / долготе. Затем выясните, как сопоставить случайно сгенерированные точки со значениями широты и долготы. Подсказка: вы хотите добавить отдельные компоненты (скажем, x и y на вашем круге) к центру круга.

...