作者vivi50218 (vivi)
看板PHP
標題[請益] php+mysql 地理地址編碼
時間Mon Sep 10 11:11:28 2012
小弟目前在寫 地址轉經緯度的程式
是利用GOOGLE MAP API V2 的範例去修改的
利用php從資料庫讀入地址後 轉成經緯度在寫入資料庫
但是解碼出來的經緯度跟實際位置差很多
我把資料庫的地址複製貼上GOOGLE MAP 轉出來的事正確的
以下是程式碼 讀資料庫的部分就沒列出來了 有爬文看過的方法都試過了
還是一樣...請幫幫忙 困擾好久..
// Initialize delay in geocode speed
$delay = 0;
$base_url = "
http://" . MAPS_HOST . "/maps/geo?output=csv&key=" . KEY;
// Iterate through the rows, geocoding each address
while ($row = @mysql_fetch_assoc($result)) {
$geocode_pending = true;
while ($geocode_pending) {
$address = $row["ADDR2"];
$id = $row["CUST_NO"];
$request_url = $base_url . "&q=" . urlencode($address);
$csv = file_get_contents($request_url) or die("url not loading");
echo $id.",".iconv("utf-8","big5",$address)."\r\n";
$csvSplit = explode(",", $csv);
$status = $csvSplit[0];
$lat = $csvSplit[2];
$lng = $csvSplit[3];
if (strcmp($status, "200") == 0) {
// successful geocode
$geocode_pending = false;
$lat = $csvSplit[2];
$lng = $csvSplit[3];
$query = sprintf("UPDATE cys_customer " .
" SET lat = '%s', lng = '%s' " .
" WHERE CUST_NO = %s LIMIT 1;",
mysql_real_escape_string($lat),
mysql_real_escape_string($lng),
mysql_real_escape_string($id));
$update_result = mysql_query($query);
echo $query."\r\n";
if (!$update_result) {
die("Invalid query: " . mysql_error());
}
} else if (strcmp($status, "620") == 0) {
// sent geocodes too fast
$delay += 100000;
} else {
// failure to geocode
$geocode_pending = false;
echo "Address " . iconv("utf-8","big5",$address) . " failed to geocoded. ";
echo "Received status " . $status . "\n";
}
usleep($delay);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.92.115
1F:→ olctw:api 拿到的資料會比 google map 的舊,所以是正常的 09/10 11:40
2F:→ olctw:或改 v3 試試吧 09/10 11:40
3F:→ vivi50218:但是我手動輸入裡面的資料 出來的結果是正確的.. 09/10 12:15
已解決
※ 編輯: vivi50218 來自: 220.130.92.115 (09/10 13:10)
4F:推 herman602:要不要講一下是什麼問題 跟 如何解決的@@ 09/13 17:21
5F:→ vivi50218:是編碼的問題 讀資料庫的時候把編碼改為utf-8就好 09/14 14:12
6F:推 flora556:我是初學者,想請教是否可以讀取yahoo or google上的股價? 10/04 19:57