2011-08-15 70 views
0

我有兩個表格:在MySQL中的映射位置

1)一個是從android手機保存的位置表,由用戶名,緯度,經度,日期,時間組成。

2)另一個是保存國家,地區,省,郵政編碼,城市,經緯度的表格。

我希望在插入數據庫之前使用表2)映射表1的位置(lat,lng))。 這看起來很簡單,但問題是表2的位置)只是一個穩定點,否則表1)的位置是遍歷每個城市的點。 因此,表1)的位置與表2的位置不相似)。

任何人有這個問題的想法?任何公式或技術? 感謝您的幫助。

編輯:我想這個語句INSERT語句

$city = mysql_query("SELECT p.city 
    FROM place AS p 
    ORDER BY ACOS(SIN(p.lng)*SIN('".$lng."')+COS(p.lng)*COS('".$lng."')*COS(p.lat-'".$lat."'))",$con); 

之前,但其結果是在該領域Resource id #3,其他領域也是這個樣子。 ç

+1

對於表1中的每個點,按照緯度/經度對之間的最小距離進行排序,找到表2中最近的位置。您可以查看如何計算您喜歡的幾何文本書籍或搜索引擎中的球形距離。只需將公式插入到查詢中即可。 –

+0

此公式:d = acos(sin(x1)* sin(x2)+ cos(x1)* cos(x2)* cos(y2-y1))* r,right?我會盡力,謝謝。 – Yoo

+1

http://www.movable-type.co.uk/scripts/latlong-db.html –

回答

1

這樣的財產以後這樣的:

SELECT regions.* 
FROM users, regions 
WHERE users.user_id = $user_id 
ORDER BY 
    ACOS ( 
    SIN(users.long) * SIN(regions.long) + 
    COS(users.long) * COS(regions.long) * COS(regions.lat - users.lat) 
) 
LIMIT 1 

新增2011-08-15

或在PHP喜歡你爲例

$query = "SELECT city 
      FROM place 
      ORDER BY 
      ACOS(
       SIN(lng) * SIN({$lng}) + 
       COS(lng) * COS({$lng}) * COS(lat - {$lat}) 
      )"; 
$resource = mysql_query($query); 
$result = mysql_fetch_assoc($resource); 
$city = $result['city']; 
+0

@Puggen Se :我嘗試過,但結果與我預期的不一樣。請參閱我上面編輯的內容。 – Yoo

0

謝謝你的每一個幫助。

$qc = mysql_query("SELECT * 
    FROM place AS p 
    ORDER BY MIN(ACOS(SIN(p.lng)*SIN({$lng})+COS(p.lng)*COS({$lng})*COS(p.lat-{$lat})))", $con); 

while ($row = mysql_fetch_assoc($qc)) { 
    $city = $row['city']; 
    $district = $row['district']; 
    $province = $row['province']; 
    $region = $row['region']; 
    $country = $row['country']; 

    mysql_query("INSERT INTO " . $username . "_logs_" . $type . "(username,date, 
       time,lat,lng,city,district,province,region,country,note,color) 
       VALUES('".$username."','".$date."','".$time."', 
       '".$lat."','".$lng."','".$city."','".$district."' 
       ,'".$province."','".$region."','".$country."','unknown','unknown')", $con) 
      or die("Cannot Insert to Table"); 
    mysql_close(); 
} 

這是我的最終答案。我想分享像我這樣的查詢弱的人:))