如何用python编写这个
我在编写代码方面不是很有经验。有人能帮我吗 我正在尝试编写一些简单的python来处理一些GPS坐标。基本上,我想让它检查gps是否是+或-10英尺到我的a点,然后打印,如果它是真的。我想我找到了那部分,但我不确定这部分。在gps=我希望它只打印一次的点之后,我在这里,直到下一次它为真 基本上,在gps坐标周围设置一个10英尺的气泡,如果我只进入一次气泡打印“我在这里”,直到我走出并重新进入气泡。这有意义吗如何用python编写这个,python,gps,Python,Gps,我在编写代码方面不是很有经验。有人能帮我吗 我正在尝试编写一些简单的python来处理一些GPS坐标。基本上,我想让它检查gps是否是+或-10英尺到我的a点,然后打印,如果它是真的。我想我找到了那部分,但我不确定这部分。在gps=我希望它只打印一次的点之后,我在这里,直到下一次它为真 基本上,在gps坐标周围设置一个10英尺的气泡,如果我只进入一次气泡打印“我在这里”,直到我走出并重新进入气泡。这有意义吗 if "point_lat-10feet" <= gps_lat <= "p
if "point_lat-10feet" <= gps_lat <= "point_lat+10" and "point_log-10" <= gps_log <= "point_log+10"
Print "You are at point 1"
if“point_lat-10feet”只需将其包装在if内的条件检查中即可
不是特定语言,而是总体思路
if <in coord condition>
if <not printed condition>
print
set print condition
else
clear print condition
if
如果
打印
设置打印条件
其他的
清晰打印条件
如果你的语法&c被纠正了(那些字符串肯定是错误的),你应该检查的是正方形,而不是圆形
假设point\u lat
,gps\u lat
,&c都是数字(不是字符串),用英尺表示(假设\u log
是\u lon
的一个打字错误,代表“经度”),您需要:
import math
if math.hypot(point_lat - gps_lat, point_lon - gps_lon) < 10:
print("You are at point 1")
导入数学
如果数学海波(点纬度-gps纬度,点纬度-gps纬度)<10:
打印(“您处于第1点”)
math.hypot
应用毕达哥拉斯定理来计算直角三角形与给定的其他两条边的假设——这也恰好是两点之间的距离。“两个点之间的距离小于10英尺”根据需要定义一个圆
如果纬度和经度不是以英尺为单位测量的数字,则需要将其设置为以英尺为单位测量的数字,例如,将字符串转换为浮点值和/或使用适当的比例因子。首先,需要修改检查。如果你想检查你是否在一个10英尺半径的泡泡内,你需要使用毕达哥拉斯,否则你要检查你是否在一个20x20英尺的正方形内。例如,如果您在纬度和经度上距离该点9英尺,这意味着您实际上距离目标点12.73英尺,该点位于10英尺气泡之外,但您的代码将产生假阳性
圆的公式是x^2+y^2=r^2
,其中x
和y
是沿正交轴的三角形,r
是半径(10英尺)
但是,请记住,GPS坐标(我假设我们讨论的是大地坐标,因为您提到了纬度和经度)是以度为单位给出的,因为大地坐标是球形的。因此,您需要将您的位置以及目标位置投影到笛卡尔坐标系中,如UTM。然后您可以按如下方式修改您的支票:
if(x-target_x)**2+(y-target_y)**2一个实用的解决方案是有一个起点并计算各个实例,看看它是否满足条件
为了方便起见,让我们导入pyproj来计算WGS-84大地水准面上的距离
#!/usr/bin/env python
""" banana """
from pyproj import Geod
def do_distance(lat1, lon1, lat2, lon2):
"""Simple, but accurate, distance"""
try:
geoid = Geod(ellps='WGS84')
bearing_to, bearing_fro, distance = geoid.inv(lon1, lat1, lon2, lat2)
distance *= 3.2808399 # because you wanted feet
if distance <= 10:
print('I am here')
else:
print('Still off {0:.0f} feet. Head {1:.0f}° from North'.format(distance, bearing_fro % 360))
except Exception as error:
print("Can't calculate because: ", error)
print(bearing_to % 360, bearing_fro % 360, distance)
lat1 = -15.559752
lon1 = -146.240726
lat2 = -15.561200
lon2 = -146.241407
dd = do_distance(lat1, lon1, lat2, lon2)
#/usr/bin/env python
“香蕉”
从pyproj导入Geod
def do_距离(lat1、lon1、lat2、lon2):
“简单但准确的距离”
尝试:
大地水准面=大地坐标(ellps='WGS84')
方位角到,方位角到,距离=大地水准面inv(lon1,lat1,lon2,lat2)
距离*=3.2808399#因为你想要脚
谢谢大家!这真的帮助了我,让我走上了正确的方向!
# Initialize flag here once
printFlag = False
...
# Check if we're in the target area
if (x - target_x) ** 2 + (y - target_y) ** 2 <= 3.048 ** 2:
if not printFlag :
print "You are at point 1"
printFlag = True
else:
printFlag = False
#!/usr/bin/env python
""" banana """
from pyproj import Geod
def do_distance(lat1, lon1, lat2, lon2):
"""Simple, but accurate, distance"""
try:
geoid = Geod(ellps='WGS84')
bearing_to, bearing_fro, distance = geoid.inv(lon1, lat1, lon2, lat2)
distance *= 3.2808399 # because you wanted feet
if distance <= 10:
print('I am here')
else:
print('Still off {0:.0f} feet. Head {1:.0f}° from North'.format(distance, bearing_fro % 360))
except Exception as error:
print("Can't calculate because: ", error)
print(bearing_to % 360, bearing_fro % 360, distance)
lat1 = -15.559752
lon1 = -146.240726
lat2 = -15.561200
lon2 = -146.241407
dd = do_distance(lat1, lon1, lat2, lon2)