cron作业-lat&;的地理编码地址字段;mySQL数据库中的long
有人这样做过吗,或者有什么想法 我有一个不动产脚本,无论出于什么原因(谷歌地图限制,脚本本身),它只能获得一半列表的坐标。我想运行一个脚本,使lat&long字段为空。脚本将使用地址、城市、州填充lat&long字段 想法 编辑: 这里有一段来自谷歌的代码,允许您对数据库进行地理编码:cron作业-lat&;的地理编码地址字段;mySQL数据库中的long,mysql,google-maps,cron,Mysql,Google Maps,Cron,有人这样做过吗,或者有什么想法 我有一个不动产脚本,无论出于什么原因(谷歌地图限制,脚本本身),它只能获得一半列表的坐标。我想运行一个脚本,使lat&long字段为空。脚本将使用地址、城市、州填充lat&long字段 想法 编辑: 这里有一段来自谷歌的代码,允许您对数据库进行地理编码: 最好的方法显然是解析响应并查找返回的错误代码 发生这种情况最常见的原因是 请求发出得太快(在脚本中添加一些限制) 像ÄÜUmlauts这样的Unicode字符编码错误 顺便说一句,你所做的可能违反了谷歌的服
最好的方法显然是解析响应并查找返回的错误代码
发生这种情况最常见的原因是
- 请求发出得太快(在脚本中添加一些限制)
- 像ÄÜUmlauts这样的Unicode字符编码错误
顺便说一句,你所做的可能违反了谷歌的服务条款:
注:地理编码API只能与谷歌地图结合使用;禁止对未在地图上显示的结果进行地理编码。有关允许使用的完整详细信息,请参阅Maps API服务条款许可证限制
显然,最好的方法是解析响应并查找返回的错误代码
发生这种情况最常见的原因是
- 请求发出得太快(在脚本中添加一些限制)
- 像ÄÜUmlauts这样的Unicode字符编码错误
顺便说一句,你所做的可能违反了谷歌的服务条款:
注:地理编码API只能与谷歌地图结合使用;禁止对未在地图上显示的结果进行地理编码。有关允许使用的完整详细信息,请参阅Maps API服务条款许可证限制
您每天可以使用2500个地理编码。这是一个相当大的数目,但你不能只是用你的请求轰炸服务。您需要在每个请求之间提供一个延迟,否则它将开始阻塞服务
一旦您进行了地理编码,您应该将该值存储在数据库中并将其标记为地理编码,这样您就不必再次请求它。然后,随着时间的推移,您可以对其余部分进行地理编码。每天允许您使用2500个地理编码。这是一个相当大的数目,但你不能只是用你的请求轰炸服务。您需要在每个请求之间提供一个延迟,否则它将开始阻塞服务
一旦您进行了地理编码,您应该将该值存储在数据库中并将其标记为地理编码,这样您就不必再次请求它。然后,随着时间的推移,您可以对其余部分进行地理编码。我也有同样的要求,并最终实现了:
这将对地址进行地理编码:
<?php
require("database.php");
function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$xmlStr);
return $xmlStr;
}
// 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());
}
header("Content-type: text/xml");
// Start XML file, echo parent node
echo '<markers>';
// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
// ADD TO XML DOCUMENT NODE
echo '<marker ';
echo 'name="' . parseToXML($row['name']) . '" ';
echo 'address="' . parseToXML($row['address']) . '" ';
echo 'lat="' . $row['lat'] . '" ';
echo 'lng="' . $row['lng'] . '" ';
echo 'type="' . $row['type'] . '" ';
echo '/>';
}
// End XML file
echo '</markers>';
?>
这会生成地图(我也会对其进行聚类,但您应该能够将其取出):
//
我也有同样的要求,并最终实现了:
这将对地址进行地理编码:
<?php
require("database.php");
function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$xmlStr);
return $xmlStr;
}
// 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());
}
header("Content-type: text/xml");
// Start XML file, echo parent node
echo '<markers>';
// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
// ADD TO XML DOCUMENT NODE
echo '<marker ';
echo 'name="' . parseToXML($row['name']) . '" ';
echo 'address="' . parseToXML($row['address']) . '" ';
echo 'lat="' . $row['lat'] . '" ';
echo 'lng="' . $row['lng'] . '" ';
echo 'type="' . $row['type'] . '" ';
echo '/>';
}
// End XML file
echo '</markers>';
?>
这会生成地图(我也会对其进行聚类,但您应该能够将其取出):
//
公平地说,结果显示在地图上。对于每个地理编码地址,lat&long都会添加到数据库中,并在前端查看一个列表。请参阅我上面的编辑-谷歌实际上提供了一个php文件来完成我需要的任务-数据库中的地理编码地址。我只是需要你帮我弄清楚如何让它和我的DB@Jason每个人都一直告诉我这是对谷歌TOS的反对,但他们提供了一个如何做到这一点的教程。在我看来,他们是在批准。好吧,公平地说,结果显示在地图上。对于每个地理编码地址,lat&long都会添加到数据库中,并在前端查看一个列表。请参阅我上面的编辑-谷歌实际上提供了一个php文件来完成我需要的任务-数据库中的地理编码地址。我只是需要你帮我弄清楚如何让它和我的DB@Jason每个人都一直告诉我这是对谷歌TOS的反对,但他们提供了一个关于如何做到这一点的教程,在我看来,他们是在给予支持。这正是我想要做的——我的网站上有300个属性。大多数lat&long都是存储的-但是有些条目没有lat&long,我想运行脚本来填充缺少的值这正是我想做的-我的站点上有300个属性。大多数lat&long都是存储的-但是有些条目没有lat&long,我想运行脚本来填充缺少的值。实际上-我在这里无法获得任何帮助?真的-我在这里无法获得任何帮助?
<script type="text/javascript">
//<![CDATA[
var customIcons = {
restaurant: {
icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png',
shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
},
bar: {
icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
}
};
function load() {
var cluster = [];
var map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(53.4788, -3.9551),
zoom: 6,
mapTypeId: 'roadmap'
});
var infowindow = new google.maps.InfoWindow();
// Change this depending on the name of your PHP file
downloadUrl("<?php bloginfo('stylesheet_directory'); ?>/phpsqlajax_genxml.php ", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name");
var address = markers[i].getAttribute("address");
var type = markers[i].getAttribute("type");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var html = "<b>" + name + "</b> <br/>" + address;
var icon = customIcons[type] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon,
shadow: icon.shadow
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(markers[i].getAttribute("name"));
infowindow.open(map, marker);
}
})(marker, i));
cluster.push(marker);
}
var mc = new MarkerClusterer(map,cluster);
});
}
function bindInfoWindow(marker, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
});
}
function downloadUrl(url, callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
function doNothing() {}
//]]>
</script>