我遇到了一个问题,可以在某个项目中退缩一段时间。

我基本上希望使用X,Y点绘制的X绘制的Y点来捕获多边形。 LAT1,LON1是多边形的中心GPS绳,我正在寻找其周围的多边形。

这是我在Python中代码的一部分:

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

我的输入是这样的:LAT1,LON1-以十进制程度给出。 -dr是通过将距离(= 3958.82)在0-360度之间划分的角度来计算的。

但是,对于输入getCorsDS1(42.189275,-76.85823,0.5/3958.82,30)我得到[-1.3485899508698462,-76.857666627568

至于角度距离,我只需将英里(= 3958.82)的英里划分为英里来计算它即可。

有人吗?

有帮助吗?

解决方案

你为什么不使用 不错的图书馆?

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,DISTMILE,轴承= 42.189275,-76.85823,0.5,30返回42.1955489,-76.853359。

其他提示

罪和COS的功能期望他们的论点 弧度, ,不是学位。 ASIN和ATAN2函数产生结果 弧度, ,不是学位。通常,需要将输入角度(LAT1,LON1和轴承)从学位转换为弧度 math.radians() 并使用输出角度(LAT2和LON2)从弧度转换为度 math.degrees().

请注意,您的代码还有其他两个问题:

(1)它不允许穿越经度的180度子午线;您需要限制答案,以便-180 <= lackitude_degrees <= +180。

(2)如果您要广泛使用此功能,则可能要删除冗余计算:SIN(LAT1),COS(DR),COS(LAT1)和SIN(DR)分别计算两次。

较新版本的Geopy(+公里代替英里)

from geopy import Point
from geopy.distance import vincenty

distKm = 1
lat1 = 35.68096477080332 
lon1 = 139.76720809936523

print 'center', lat1, lon1
print 'north', vincenty(kilometers=distKm).destination(Point(lat1, lon1), 0).format_decimal()
print 'east', vincenty(kilometers=distKm).destination(Point(lat1, lon1), 90).format_decimal()
print 'south', vincenty(kilometers=distKm).destination(Point(lat1, lon1), 180).format_decimal()
print 'west', vincenty(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

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top