jquery mobile和geolocation am i at address

时间:2013-08-09 04:24:07

标签: jquery-mobile geolocation

有没有人有任何演示网站可以告诉我如何判断我是否在某个地址?

所以我想要一个地址列表,当我接近一个地址时,我希望应用程序引发一个我可以响应的事件。

修改

拉特/长距离警报实际上会更好

1 个答案:

答案 0 :(得分:1)

此代码是php而不是javascript,但您应该能够了解正在发生的事情。

这是我用来检查地址是否在另一个地址附近的公式。 (这基本上就是你想做的事)

由于地球曲率等原因导致的实际公式非常复杂,因此使用近似技术,并根据distance_km计算边界框。

然后,您只需要检查您的地址坐标是否在该边界框内。

我使用google maps api来确定每个地址的纬度/经度。

function approx_boundingbox($lat, $lon, $distance_km) {

        $lat_km_per_degs  = array(
            0  => 110.574,
            15 => 110.649,
            30 => 110.852, 
            45 => 111.132,
            60 => 111.412,
            75 => 111.618,
            90 => 111.694);

        $lon_km_per_degs  = array(
            0   => 111.320,
            15  => 107.551,
            30  => 96.486, 
            45  => 78.847,
            60  => 55.800,
            75  => 28.902,
            90  => 0,
            105 => 28.902,
            120 => 55.800,          
            135 => 78.847,      
            150 => 96.486, 
            165 => 107.551,
            180 => 111.320
            );      

        // determine km per deg approxmation for lat
        foreach ($lat_km_per_degs as $deg => $km) {
            if ($lat < $deg) {
                $lat_km_per_deg = $km;
            }
        }   

        // determine km per deg approxmation for lon
        foreach ($lon_km_per_degs as $deg => $km) {
            if ($lon < $deg) {
                $lon_km_per_deg = $km;
            }
        }           

        // radius in deg
        $lat_delta = ($distance_km / $lat_km_per_deg);
        $lon_delta = ($distance_km / $lon_km_per_deg);

        // calculate approximate box
        $min_lat = $lat - $lat_delta;
        $max_lat = $lat + $lat_delta;
        $min_lon = $lon - $lon_delta;
        $max_lon = $lon + $lon_delta;

        return array($min_lat, $min_lon, $max_lat, $max_lon);
    }