3

緯度/経度のポイントが、地球上のポイントを表す頂点によって定義されたポリゴン内に含まれているかどうかを把握しようとしています(緯度/経度も時計回りに)。これは、2D 緯度/経度空間にマッピングできるポリゴンの場合は簡単です。

これがますます困難になるのは、地球の半分をカバーする極から極へと移動する可能性のある円 (現在は 3D に戻る) です。緯度/経度への変換は正弦波のように見えます。ポリゴン テストの 2D ポイントは、このケースには適用されなくなりました。この問題を解決するアルゴリズムはありますか?

================== 以下のコメントの説明: =================== 多角形は (lon, lat) 度のペア、つまり (60, 90)、(60, 110)、(-30, 110)、(-30, 90)。

レイ キャスティング アルゴリズムを実装するコードがあり、それが機能します。ただし、地表の特定のポリゴンは、2D 空間の閉じたポリゴンに変換されません。

4

3 に答える 3

1

denniston.t で述べられているように、円のみに関心があり、半径がある場合は、中心点と点の間の大円距離が半径よりも小さいかどうかを簡単に確認できます。大圏距離を求めるには、通常、Haversine Formulaを使用します。以下は、Pythonでの私の実装です。

from math import radians, sin, cos, asin, sqrt

def haversine(point1, point2):
    """Gives the distance between two points on earth.

    The haversine formula, given two sets of latitude and longitude,
    returns the distance along the surface of the earth in miles,
    ignoring potential changes in elevation. The points must be in
    decimal degrees.
    """
    earth_radius_miles = 3956
    lat1, lon1 = (radians(coord) for coord in point1)
    lat2, lon2 = (radians(coord) for coord in point2)
    dlat, dlon = (lat2 - lat1, lon2 - lon1)
    a = sin(dlat/2.0)**2 + cos(lat1) * cos(lat2) * sin(dlon/2.0)**2
    great_circle_distance = 2 * asin(min(1,sqrt(a)))
    d = earth_radius_miles * great_circle_distance
    return d
于 2011-11-18T21:02:00.493 に答える
0

球の表面に円の中心点と半径を描画している場合は、中心点とターゲット点の間の大円距離を計算します。円の半径よりも小さい場合、ターゲットポイントは円内にあります。

これは、球に描かれた任意のポリゴンに一般化されることはありませんが、あなたは円についてのみ質問したので、それがあなたにとって重要かどうかはわかりません。

于 2011-11-18T19:59:08.690 に答える
-1
containsLocation(point:LatLng, polygon:Polygon)
于 2012-07-13T04:21:01.903 に答える