如何在给定的lat和500以内的python中找到用户位置

时间:2015-12-14 08:54:13

标签: python geocoding

我想在距离给定的lat和500长度的Python内找到一个用户位置。

鉴于lat& long = 19.114315,72.911174

我想检查新的纬度和长度是否在距给定纬度和长度500米的范围内。

new lat and long = 19.112398,72.912743

我在python中使用这个公式..

math.acos(math.sin(19.114315) * math.sin(19.112398) + math.cos(19.114315) * math.cos(19.112398) * math.cos(72.912743 - (72.911174))) * 6371 <= 0.500 

但它没有给我预期的结果..我错过了什么吗? 请帮忙..

3 个答案:

答案 0 :(得分:1)

您可以使用Haversine公式获得两点之间的大圆距离(沿球体)。关于远距离对待地球这样的问题有一些问题,但是对于500米,你可能很好(假设你并没有试图将医疗包丢弃在船上或其它东西上)

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

def haversine(lat1, long1, lat2, long2, EARTH_RADIUS_KM=6372.8):

    # get distance between the points
    phi_Lat = radians(lat2 - lat1)
    phi_Long = radians(long2 - long1)

    lat1 = radians(lat1)
    lat2 = radians(lat2)

    a = sin(phi_Lat/2)**2 + \
        cos(lat1) * cos(lat2) * \
        sin(phi_Long/2)**2

    c = 2 * asin(sqrt(a))
    return EARTH_RADIUS_KM * c

如果两点之间的距离小于您的阈值,则它在以下范围内:

points_1 = (19.114315,72.911174)
points_2 = (19.112398,72.912743)
threshold_km = 0.5


distance_km = haversine(points_1[0], points_1[1], points_2[0], points_2[1])
if distance_km < threshold_km:
    print('within range')
else:
    print('outside range')

答案 1 :(得分:0)

提示:编写可重复使用的代码,并清理数学。 看起来你有一个错误,就在那个公式的末尾......

math.cos(longRad - (longRad)) == math.cos(0)== 1

我对地理位置不太好,所以我不会纠正它..

import math

def inRangeRad(latRad, longRad):
    sinLatSqrd = math.sin(latRad) * math.sin(latRad)
    cosLatSqrd = math.cos(latRad) * math.cos(latRad)
    inner = sinLatSqrd +  cosLatSqrd * math.cos(longRad - (longRad))
    return math.acos( inner ) * 6371 <= 0.500

def inRangeDeg(latDeg, longDeg):
    latRad = 0.0174532925 * latDeg
    longRad = 0.0174532925 * longDeg
    return inRangeRad(latRad, longRad)

print "test"
print "19.114315, 72.911174"
print inRangeDeg(19.114315, 72.911174)

答案 2 :(得分:0)

要非常小心!您不能仅使用cossin来使用GPS坐标,因为距离不正确!

https://en.wikipedia.org/wiki/Geodesy#Geodetic_problems

  

在平面几何的情况下(适用于地球上的小区域)   表面)这两个问题的解决方案简化为简单的三角学。   在球体上,解决方案明显更复杂,例如,在   方位角在两端之间会有所不同的反问题   连接大圆的点,弧,即测地线。

查看GeoPy这些计算,你真的不想自己实现它。