1

如何用 JavaScript+PHP+MYSQL 和 Google Maps API v2 动态加载标记?

atm 我有地图跟随示例

http://googlemapsapi.martinpearman.co.uk/infusions/google_maps_api/basic_page.php?map_id=8

但是我的marker_data_01.php(所有标记都在哪里列出-> 查看示例代码)有atm 4MB,而且只会有更多。

所以问题是:如何只加载这个标记marker_data_01.php(它的一些其他修改,可以与地图在同一个文件上,没有意义,我全部从 MySQL atm 加载)

我现在的样子:例如
(我不知道什么数字会好,但我写这个只是为了展示我想要制作的东西或者只是类似的东西),所以

  • 例如左上角有位置:10,
  • 例如右上角有位置:30,
  • 例如左下角有位置:5,
  • 例如右下角有位置:15。

-- 所以只加载这个标记 10-30-5-15 这个盒子里有什么

例如 GET,

例如,当我将地图移动到 17-12-48-20 框时,然后发出下一个 GET 请求
,并使用这个 mysql 报价并下载我现在看到的下一个标记,

有了这个我可以有无限标记的地图,

什么时候会有很多标记,然后聚类可以将它们联系起来,

所以有了这个 ppl 不需要做所有标记数据库的“预加载”(现在有 4mb 并且会有更多),但只下载他们目前看到的,

我知道这是可能的,因为很多网站都有它,但我不是代码语言大师,我只知道一点 php 和 mysql(和 html):)

// 对不起我的英语不好

4

2 回答 2

1

在我看来,您正在寻找类似MarkerClusterer的东西

编辑

我明白了 - 我没有很清楚地得到原始问题。

您需要做的是将当前的纬度/经度框发送到服务器,并在 WHERE 子句中使用这些值。

这是一个简单的例子

// Create a GMap2 instance
var gmap = new GMap2( document.getElementById( 'map' );

// Do all your setup here, like gmap.setCenter() and such

// Now, load the map data
loadMapFromCurrentBounds( gmap );

// Assign a handler to the "moveend" event
GEvent.addListener( gmap, 'moveend', function()
{
  loadMapFromCurrentBounds( gmap );
});

function loadMapFromCurrentBounds( gmap )
{
  // First, determine the map bounds
  var bounds = gmap.getBounds();

  // Then the points
  var swPoint = bounds.getSouthWest();
  var nePoint = bounds.getNorthEast();

  // Now, each individual coordinate
  var swLat = swPoint.lat();
  var swLng = swPoint.lng();
  var neLat = nePoint.lat();
  var neLng = nePoint.lng();

  // Now, build a query-string to represent this data
  var qs = 'swLat=' + swLat + '&swLng=' + swLng + '&neLat=' + neLat + '&neLng=' + neLng;

  // Now you can use this query-string in your AJAX request  

  // AJAX-stuff here
}

然后,在 PHP 端,假设你的数据表有一个latlng列,像这样

$swLat = mysql_real_escape_string( $_GET['swLat'] );
$swLng = mysql_real_escape_string( $_GET['swLng'] );
$neLat = mysql_real_escape_string( $_GET['neLat'] );
$neLng = mysql_real_escape_string( $_GET['neLng'] );

$query = "
SELECT *
  FROM [Table]
 WHERE lat > $swLat
   AND lat < $neLat
   AND lng > $swLng
   AND lng < $neLng
";
于 2010-04-12T16:53:26.923 回答
0

您将无法使用标记管理器在谷歌地图上管理/显示数千个标记,性能将非常糟糕。以任何可靠性执行此操作的唯一方法是使用 MarkerClusterer 之类的实用程序,它将标记紧密地组合在一起,或者使用 Fusion Tables Layer。

我个人会推荐 Fusion Tables Layer,但是这里有一篇很棒的文章讨论了您可能想要考虑的所有不同选项。https://developers.google.com/maps/articles/toomanymarkers

于 2013-01-15T23:15:20.440 回答