5

しばらくの間、あるプロジェクトに引き戻される問題があります。

私は基本的に、私が書いたスクリプトによって描かれたx、yポイントを使用してポリゴンをトラップしようとしています。lat、lonはポリゴンの中央のGPSコードであり、周囲のポリゴンを探しています。

これがPythonの私のコードの一部です:

def getcords(lat, lon, dr, bearing):
    lat2=asin(sin(lat)*cos(dr)+cos(lat)*sin(dr)*cos(bearing))
    lon2=lon+atan2(sin(bearing)*sin(dr)*cos(lat),cos(dr)-sin(lat)*sin(lat2))
    return [lat2,lon2]

私の入力は次のようになります:

  • lat、lon-は10進数で指定されます。
  • dr-は、マイル単位の距離を地球の半径(= 3958.82)で割って計算された角度です。
  • 方位-0〜360度。

ただし、入力の場合:

getcorsds1(42.189275, -76.85823, 0.5/3958.82, 30)

私は出力を受け取ります: [-1.3485899508698462, -76.8576637627568]しかし[42.2516666666667, -76.8097222222222]、それは正しい答えです。

角距離については、マイル単位の距離を地球の半径(= 3958.82)で割って計算します。

誰か?

4

4 に答える 4

5

geopy v2.0.0の場合(マイルではなく+キロメートル)

from geopy import Point                                                                                                                                                                       
from geopy.distance import geodesic                                                                                                                                                           
                                                                                                                                                                                              
distKm = 1                                                                                                                                                                                    
lat1 = 35.68096477080332                                                                                                                                                                      
lon1 = 139.76720809936523                                                                                                                                                                     
                                                                                                                                                                                              
print('center', lat1, lon1)                                                                                                                                                                   
print('north', geodesic(kilometers=distKm).destination(Point(lat1, lon1), 0).format_decimal())                                                                                                
print('east', geodesic(kilometers=distKm).destination(Point(lat1, lon1), 90).format_decimal())                                                                                                
print('south', geodesic(kilometers=distKm).destination(Point(lat1, lon1), 180).format_decimal())                                                                                              
print('west', geodesic(kilometers=distKm).destination(Point(lat1, lon1), 270).format_decimal()) 

結果は

center 35.6809647708 139.767208099
north 35.6899775841, 139.767208099
east 35.680964264, 139.778254714
south 35.6719519439, 139.767208099
west 35.680964264, 139.756161485
于 2016-11-17T01:43:35.747 に答える
4

素敵なライブラリを使ってみませんか?

from geopy import Point
from geopy.distance import distance, VincentyDistance

# given: lat1, lon1, bearing, distMiles
lat2, lon2 = VincentyDistance(miles=distMiles).destination(Point(lat1, lon1), bearing)

lat1、lon1、distMiles、bearing = 42.189275、-76.85823、0.5、30の場合、42.1955489、-76.853359を返します。

于 2010-12-25T18:41:58.023 に答える
3

sin関数とcos関数は、度ではなくラジアンで引数を期待します。asin関数とatan2関数は、度ではなくラジアンで結果を生成します。一般に、を使用して入力角度(lat1、lon1、および方位)を度からラジアンmath.radians()に変換し、を使用して出力角度(lat2およびlon2)をラジアンから度に変換する必要がありmath.degrees()ます。

コードには他に2つの問題があることに注意してください。

(1)経度の180度の子午線を横切ることはできません。-180 <=longitude_degrees<=+180となるように回答を制限する必要があります。

(2)この関数を広範囲に使用する場合は、冗長な計算を削除することをお勧めします。sin(lat1)、cos(dr)、cos(lat1)、およびsin(dr)はそれぞれ2回計算されます。

于 2010-12-25T18:45:00.383 に答える
-2

eumiroあなたのコード
結果はこれをToo many values to unpack
どのように修正するかです

from geopy import Point
from geopy.distance import distance, VincentyDistance

# given: lat1, lon1, bearing, distMiles
lat2, lon2 = VincentyDistance(miles=9.32057).destination(Point(52.20444, 0.3605$
print lat2, lon2
于 2014-05-17T10:59:30.403 に答える