google maps api v2 - 动态加载(数万个)标记

时间:2010-04-12 16:46:50

标签: php javascript google-maps google-maps-api-2

如何用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(其中列出了所有标记 - >查看示例代码)的大小为4MB,只有更多,更多。

所以问题是:如何仅将此标记加载到marker_data_01.php(对其进行一些其他修改,可以与map相同的文件,无意义,我从MySQL atm加载它)

我现在的样子:
所以对于示例(我不知道哪个数字会好,但我只是为了展示我想做的东西或者只是喜欢它而写的),所以

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

- 所以只加载此标记10-30-5-15中的标记

例如GET,

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

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

什么时候会有很多标记,然后聚类可以链接它们,

所以有了这个ppl,不需要对所有标记DB进行“预加载”(现在有4mb并且会有更多),但只下载他们目前看到的内容,

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

//对不起我的英文

2 个答案:

答案 0 :(得分:1)

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

的内容

修改

我知道 - 我没有清楚地得到原来的问题。

您需要做的是将当前的lat / lon框发送到服务器,并在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
";

答案 1 :(得分:0)

您将无法使用Marker Manager在Google地图上管理/显示数千个标记,性能将非常糟糕。任何可靠性的唯一方法是使用像MarkerClusterer这样的实用程序,它将标记组合在一起,或者使用Fusion Tables Layer。

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