2010-07-25 4 views
0

주소, 도시, 상태 필드가 있고 위도와 경도로 선언되는 & 인 테이블이있는 "jos_ezrealty"테이블이 있습니다. 아래 테이블 (google-http://code.google.com/apis/maps/articles/phpsqlgeocode.html에서 제공)을 사용하여 테이블을 수정해야합니다. 모든 주소 입력란이 채워지고 내 위도의 반이 & 개의 긴 입력란에 채워집니다. 나는내 mySQL 테이블에 코드 적응

감사합니다 (I 만 300 개 특성을 가지고 있고이 코드는 누락 된 사람을 채우고으로, 지오 코딩 요청 제한에 대해 걱정하지 마십시오) 위도 & 긴 누락 된 정보를 입력하기 위해 아래의 코드를 사용하려면 -

<?php 
require("phpsqlgeocode_dbinfo.php"); 

define("MAPS_HOST", "maps.google.com"); 
define("KEY", "abcdefg"); 

// Opens a connection to a MySQL server 
$connection = mysql_connect("localhost", $username, $password); 
if (!$connection) { 
    die("Not connected : " . mysql_error()); 
} 

// Set the active MySQL database 
$db_selected = mysql_select_db($database, $connection); 
if (!$db_selected) { 
    die("Can\'t use db : " . mysql_error()); 
} 

// Select all the rows in the markers table 
$query = "SELECT * FROM markers WHERE 1"; 
$result = mysql_query($query); 
if (!$result) { 
    die("Invalid query: " . mysql_error()); 
} 

// Initialize delay in geocode speed 
$delay = 0; 
$base_url = "http://" . MAPS_HOST . "/maps/geo?output=xml" . "&key=" . KEY; 

// Iterate through the rows, geocoding each address 
while ($row = @mysql_fetch_assoc($result)) { 
    $geocode_pending = true; 

    while ($geocode_pending) { 
    $address = $row["address"]; 
    $id = $row["id"]; 
    $request_url = $base_url . "&q=" . urlencode($address); 
    $xml = simplexml_load_file($request_url) or die("url not loading"); 

    $status = $xml->Response->Status->code; 
    if (strcmp($status, "200") == 0) { 
     // Successful geocode 
     $geocode_pending = false; 
     $coordinates = $xml->Response->Placemark->Point->coordinates; 
     $coordinatesSplit = split(",", $coordinates); 
     // Format: Longitude, Latitude, Altitude 
     $lat = $coordinatesSplit[1]; 
     $lng = $coordinatesSplit[0]; 

     $query = sprintf("UPDATE markers " . 
      " SET lat = '%s', lng = '%s' " . 
      " WHERE id = '%s' LIMIT 1;", 
      mysql_real_escape_string($lat), 
      mysql_real_escape_string($lng), 
      mysql_real_escape_string($id)); 
     $update_result = mysql_query($query); 
     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 " . $address . " failed to geocoded. "; 
     echo "Received status " . $status . " 
\n"; 
    } 
    usleep($delay); 
    } 
} 
?> 
+0

코드를 수정하려면이 항목을 편집 해주세요. – Mike

+0

코드가 들여 쓰기되었습니다. – Charles

답변

0

제대로 이해했다면 데이터베이스 스키마를 google에서 제공하는 코드 예제로 변경해야합니다. 데이터베이스가

CREATE TABLE `markers` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`name` VARCHAR(60) NOT NULL , 
`address` VARCHAR(80) NOT NULL , 
`lat` FLOAT(10, 6) NOT NULL , 
`lng` FLOAT(10, 6) NOT NULL , 
`type` VARCHAR(30) NOT NULL 
) ENGINE = MYISAM ; 

에만 markers에 테이블 이름을 바꾸거나 변경하고 phpsqlgeocode_dbinfo.php에서 $database 값을 변경하거나 선택 쿼리를 변경해야 즉, 구글의 예를 다음과 경우에 그런 경우는 다음의 경우

너의 테이블.

그렇지 않으면 문제를 지정하십시오.

+1

CREATE 문에 MyISAM을 요청하는 특별한 이유가 있습니까? 테이블에 MyISAM (FULLTEXT 인덱스 등이 필요 없음)이 없으므로 대신 InnoDB를 사용해야합니다. – Charles

+0

사실. Google 예제에서 테이블 구조를 복사/붙여 넣기했습니다. – btrandom

+0

오, 이런, 그게 더 무서운거야. – Charles

관련 문제