LBS應用之 根據一點的經緯度實現附近點的查詢

2022-08-05 18:36:16 字數 3090 閱讀 4748

這年頭和lbs相關的應用越來越火。從foursquare的熱鬧程度就可見一般(什麼,沒聽過 foursquare…. 哥們,你 out 了)。和 lbs有關的應用一般都包括一些共同的操作,最常見的乙個,就是找附近的東東(餐館, 商店, 妞…)。 所以, 這裡就丟擲了乙個問題, 怎樣才能知道兩個物體離得近呢?

例如:用iphone/android手機定位得到理想國際大廈的經緯度:39.98123848, 116.30683690然後查詢附近的妞根據一點的經緯度實現附近點的查詢" title="在sae上開發lbs應用之 根據一點的經緯度實現附近點的查詢">

<?php

require_once('geohash.class.php');

$geohash = new geohash;

//得到這點的hash值

$hash = $geohash->encode(39.98123848, 116.30683690);

//取字首,字首約長範圍越小

$prefix = substr($hash, 0, 6);

//取出相鄰八個區域

$neighbors = $geohash->neighbors($prefix);

array_push($neighbors, $prefix);

print_r($neighbors);

?>

得到9geohash值:

array

(

[top] => wx4eqx

[bottom] => wx4eqt

[right] => wx4eqy

[left] => wx4eqq

[topleft] => wx4eqr

[topright] => wx4eqz

[bottomright] => wx4eqv

[bottomleft] => wx4eqm

[0] => wx4eqw

)

範圍如圖:

用sql語句查詢:

select*fromxywheregeohashlike'wx4eqw%';

select*fromxywheregeohashlike'wx4eqx%';

select*fromxywheregeohashlike'wx4eqt%';

select*fromxywheregeohashlike'wx4eqy%';

select*fromxywheregeohashlike'wx4eqq%';

select*fromxywheregeohashlike'wx4eqr%';

select*fromxywheregeohashlike'wx4eqz%';

select*fromxywheregeohashlike'wx4eqv%';

select*fromxywheregeohashlike'wx4eqm%';

看一下是否用上索引(一共有50多萬行測試資料):

根據一點的經緯度實現附近點的查詢">

資料:·      geohash演示:  

·      wiki:

·      原理:

已知一點經緯度,方位角,距離,求另一點經緯度

大地座標系資料wgs 84 長半徑a 6378137 短半徑b 6356752.3142 扁率f 1 298.2572236 長半徑a 6378137 公尺 public static double a 6378137 半徑 公里 private static double earth radius...

根據經緯度 角度 距離獲取另乙個點的經緯度

這就需要根據獲取到的經緯度獲取計算半徑內4個點的座標 計算方法 phppublic static function getrandlnglat lng,lat,angle,distance 其實高德地圖提供了方法,使用很簡單 amap.event.addlistener placesearch,ma...

經緯度一點與經緯度兩點之間測最短距離

如果有數學基礎,看到這個圖就應該懂了。首先,拿到兩個經緯度計算x,y軸各自的差值 36.679430 36.633990 xn 116.952210 117.054860 yn 拿到x,y軸各自的差值之後,計算向下移動幾個點位。平均分就可以,xn 4,yn 4 我只取3個中間點,所除以4,如果想要精...