私は自分の最初のウェブページをデザインしています。これは、一部のユーザーがオープンハウス情報を追加し、他のユーザーが情報を引き出すことができる不動産ページです。データベースと Web のコードは非常に優れており (2 か月後...)、データの挿入と取得は快適です... 今度は Google マップです。私は trulia のようなものや、非常にオリジナルな Housingmaps.com を作ろうとしています(彼らがマッシュアップを始めたようですよね?)。また、crimereports.com も非常に優れています。
目標: データベースから住所を取得し、ジオコードから経度と緯度を取得し、テーブルに挿入して、Google マップに表示します。さらに、人々がマップをパンすると、新しい情報がマップに表示されます。
これは、住所、地理コードを取得し、緯度と経度をデータベースに追加するためのコードです。
<?php
//require("phpsqlajax_dbinfo.php");
// Opens a connection to a MySQL server
$username = "abc"; //personal info changed to abc
$password = "abc";
$hostname = "abc";
$database = "abc";
$connection = mysqli_connect($hostname, $username, $password);
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
//if (!$connection) {
//die("Not connected : " . mysql_error());
//}
define("MAPS_HOST", "maps.google.com");
define("KEY", "my .............key........code");
// Set the active MySQL database
$db_selected = mysqli_select_db($connection, $database);
if (!$db_selected) {
die("Can\'t use db : " . mysql_error());
}
// Select all the rows in the markers table
$query = "SELECT * FROM brokerstour.property WHERE 1";
$result = mysqli_query($connection, $query);
if (!$result) {
die("Invalid query: " . mysql_error());
}
// Initialize delay in geocode speed
$delay = 0;
$base_url = "http://maps.googleapis.com/maps/api/geocode/output?parameters";
// Iterate through the rows, geocoding each address
while ($row = @mysqli_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 property " .
" 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);
}
}
?>
Google チュートリアル (元のコード) に変更した内容は次のとおりです。 1) エラーを回避するために php: mysqli を更新しました。これ以上phpエラーが発生しません。2) URL を "http://" から変更しました。MAPS_HOST . "/maps/geo?output=xml" . "&key=" . 鍵; TO " http://maps.googleapis.com/maps/api/geocode/output?parameters " コードを API v3 に更新しようとしています。
古い URL を使用すると、エラー 610 が発生します。新しい URL を使用すると、次のようになります。
( ! ) SCREAM: エラー抑制は無視されました ( ! ) 警告: simplexml_load_file(): I/O 警告: 外部エンティティ "maps.googleapis.com/maps/api/geocode/output?parameters&q=4200+Park+Blvd+ の読み込みに失敗しました" in C:.... 57 行目 .....
URLがロードされていません
完全な開示:私は非常に新しいので、上記は意味をなさないかもしれません。しかし、私はこの問題に1週間立ち往生しています。(ちなみに、Google マップを初めて使用する場合は、Beginning Google API 3 という本が必読です。ただし、データベースは扱っていませんが、Google マップ API について非常によく説明しています)。
誰かヒント、本、チュートリアルを教えてください。どんな助けも大きな助けです。お時間をいただきありがとうございます。
57 行目は $xml = simplexml_load_file($request_url) or die("url not loading"); です。