如何用python编写这个

如何用python编写这个,python,gps,Python,Gps,我在编写代码方面不是很有经验。有人能帮我吗 我正在尝试编写一些简单的python来处理一些GPS坐标。基本上,我想让它检查gps是否是+或-10英尺到我的a点,然后打印,如果它是真的。我想我找到了那部分,但我不确定这部分。在gps=我希望它只打印一次的点之后,我在这里,直到下一次它为真 基本上,在gps坐标周围设置一个10英尺的气泡,如果我只进入一次气泡打印“我在这里”,直到我走出并重新进入气泡。这有意义吗 if "point_lat-10feet" <= gps_lat <= "p

我在编写代码方面不是很有经验。有人能帮我吗

我正在尝试编写一些简单的python来处理一些GPS坐标。基本上,我想让它检查gps是否是+或-10英尺到我的a点,然后打印,如果它是真的。我想我找到了那部分,但我不确定这部分。在gps=我希望它只打印一次的点之后,我在这里,直到下一次它为真

基本上,在gps坐标周围设置一个10英尺的气泡,如果我只进入一次气泡打印“我在这里”,直到我走出并重新进入气泡。这有意义吗

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)