我正在设计我自己的第一个网页。这是一个房地产页面,一些用户将添加开放房屋信息,而其他用户可以提取信息。数据库和网络的代码非常好(两个月后......)并且插入和获取数据很甜蜜......现在谷歌地图。我正在尝试拥有像 trulia 甚至是非常原始的Housingmaps.com之类的东西(似乎他们开始了混搭,对吧?)。crimereports.com 也非常好。
目标:从数据库中提取地址,从地理编码中获取经纬度,将其插入表中,在谷歌地图中显示。另外:当人们平移地图时,新信息会弹出到地图中。
这是检索地址、地理代码以及将 lat 和 lng 添加回数据库的代码。
<?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);
}
}
?>
这是我对谷歌教程(原始代码)所做的更改: 1)更新了 php: mysqli 以避免错误。没有得到更多的php错误。2) 将 url 从 "http://" 更改。MAPS_HOST 。“/maps/geo?output=xml”。“&键=”。钥匙; TO“ http://maps.googleapis.com/maps/api/geocode/output?parameters ”试图将代码更新到 API v3。
如果我使用旧网址,我会收到错误 610。使用新网址,我会得到:
(!)SCREAM:忽略(!)的错误抑制警告:simplexml_load_file():I / O警告:无法加载外部实体“maps.googleapis.com/maps/api/geocode/output?parameters&q=4200+Park+Blvd+ " 在 C:.... 第 57 行 .....
网址未加载
全面披露:我很新,也许上面的内容甚至没有意义。但是,我已经在这个问题上停留了一周。(顺便说一下,对于那些刚接触谷歌地图的人来说,《Beginning Google API 3》一书是必须的。虽然它不处理数据库,但很好地解释了谷歌地图 API)。
有人可以提供任何提示,书籍,教程吗?任何帮助都是很大的帮助。感谢您的时间。
第 57 行是 $xml = simplexml_load_file($request_url) 或 die("url not loading");