2010-07-25 3 views
0

У меня есть таблица «jos_ezrealty», которая имеет адреса, города, поля состояния и declat & declong для широты и долготы. Мне нужно адаптировать приведенный ниже код (предоставляемый google - http://code.google.com/apis/maps/articles/phpsqlgeocode.html) для работы с моей таблицей. Все поля моего адреса заполнены, и заполняются полты моих длинных полей lat &. Я хочу использовать этот код, чтобы заполнить недостающие широчайшие & длинной информации (не беспокоиться о геокодируют пределы запроса, так как у меня есть только 300 свойства и этот код только заполняет недостающие из них)Адаптировать код к моим таблицам mySQL

Благодарности -

<?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.

Если это так, то, если база данных следует примеру 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 или изменить и изменить значение $database на phpsqlgeocode_dbinfo.php или изменить запросы, чтобы выбрать ваш стол.

В противном случае, пожалуйста, укажите вашу проблему.

+1

Есть ли особая причина, по которой вы запрашиваете MyISAM в своем заявлении CREATE? В таблице нет ничего, что требовало бы MyISAM (без индексов FULLTEXT и т. Д.), Поэтому вместо этого следует использовать InnoDB. – Charles

+0

Действительно. Я просто копировал/вставлял структуру таблицы из примеров Google. – btrandom

+0

О, мой, это еще страшнее. – Charles

Смежные вопросы