0

私が持っているもの:

  • 緯度・経度
  • キロメートル単位の最小距離 (例: 0.3)
  • 最大距離 (km) 例: 1.5

指定された場所から少なくとも 0.3 km、最大で 1.5 km 離れた新しい場所をランダムに選択する必要があります。つまり、私が選択しなければならないこの新しい場所は、指定された場所から任意の方向に 0.3 km から 1.5 km 離れた場所にすることができます。

注:これをElixir(プログラミング)言語で実装する必要がありますが、数式または擬似コードで問題ありません

4

1 に答える 1

0

別の答えは、任意の方向に一様に場所をランダムに生成するのに役立ちました。以下は手順です

  • dx = [0.3..0.7] x cos([0..2] x pi)
  • dy = [0.3..0.7] x sin([0..2] x pi)
  • この回答からのいくつかの助け
  • r_earth = 6378

そして、あなたはすることができます

new_latitude  = latitude  + (dy / r_earth) * (180 / pi);
new_longitude = longitude + (dx / r_earth) * (180 / pi) / cos(latitude * pi/180);

これがElixir言語での実装です

def random_location_in_given_range(latitude, longitude, min_distance_in_km, max_distance_in_km) do
    random_distance =
    Enum.random(round(min_distance_in_km * 1000)..round(max_distance_in_km * 1000)) / 1000

    random_radian = Enum.random(0..200) / 100
    # dx = [0.3..0.7] x cos([0..2] x pi)
    dx = random_distance * :math.cos(random_radian * :math.pi())
    # dy = [0.3..0.7] x sin([0..2] x pi)
    dy = random_distance * :math.sin(random_radian * :math.pi())
    # radius of the earth in kilometer
    r_earth = 6378.137

    new_latitude = latitude + dy / r_earth * (180 / :math.pi())

    new_longitude =
    longitude + dx / r_earth * (180 / :math.pi()) / :math.cos(latitude * :math.pi() / 180)

    {new_latitude, new_longitude}
end
于 2020-08-21T07:54:17.530 に答える