【发布时间】:2013-12-14 16:53:05
【问题描述】:
我的网站上目前有一张显示 50,000 个标记的地图。由于混乱,这些对用户来说是不可读的,所以我使用谷歌的 markerclusterer 实现了一个集群解决方案。这工作正常,但由于标记的数量,加载速度非常慢。
我想使用 php 形式的服务器端解决方案,但找不到最好的方法。这是我目前的设置
外部php文件标记-xml.php
<?php
$SQL = "SELECT MarkerName, Lat, Lng FROM TableName WHERE MarkerName !=''";
$Query = mysql_query($SQL);
$NumRows = mysql_num_rows($Query);
?>
<markers>
<?php
for($i = 0; $i < $NumRows; $i++)
{
$row = mysql_fetch_assoc($Query);
$Lat = $row['Lat'];
$Lng = $row['Lng'];
$MarkerName = $row['MarkerName'];
echo "<marker Lat='$Lat' Lng='$Lng' MarkerName='$MarkerName'> </marker>\n";
}
?>
</markers>
包含地图的主文件
function initialize(mapvars) {
var xmldata = "markers-xml.php";
downloadUrl(xmldata, function(doc) {
var xml = xmlParse(doc);
var markersInfo = xml.documentElement.getElementsByTagName("marker");
var markers = [];
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markersInfo.length; i++) {
var Lat = parseFloat(markersInfo[i].getAttribute("Lat"));
var Lng = parseFloat(markersInfo[i].getAttribute("Lng"));
var point = new google.maps.LatLng(Lat,Lng);
var MarkerName = markersInfo[i].getAttribute("MarkerName");
var marker = new google.maps.Marker({
position: point,
map: map,
title: MarkerName,
MarkerName: MarkerName
});
markers.push(marker);
bounds.extend(point);
}
var markerCluster = new MarkerClusterer(map, markers);
}
【问题讨论】:
-
输出到HTML时请使用
htmlspecialchars防止XSS。 -
请不要再使用
mysql_*函数,它们已被弃用。有关详细信息,请参阅Why shouldn't I use mysql_* functions in PHP?。相反,您应该了解prepared statements 并使用PDO 或MySQLi。如果你不能决定哪一个,this article 会帮助你。如果你选择 PDO,here is a good tutorial。 -
我目前必须使用
mysql,但很快就会转移到 PDO
标签: php google-maps google-maps-api-3