google maps api v2 - маркеры динамической нагрузки (десятки тысяч) - PullRequest
1 голос
/ 12 апреля 2010

как сделано с помощью JavaScript + PHP + MYSQL и Google Maps API v2 динамическая загрузка маркеров?

атм У меня есть карта, следуйте примеру

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

но мой marker_data_01.php (где перечислены все маркеры -> посмотрите пример кода) имеет атм 4 МБ и будет только больше и больше.

Таким образом, вопрос заключается в следующем: как загрузить только эти маркеры в marker_data_01.php (какой-либо другой его модификации, может быть в том же файле, что и map, бессмысленно, я загружаю все это из MySQL atm)

что я сейчас смотрю:
так для примера (я не знаю, какое число будет хорошим, но я пишу это только для того, чтобы показать, что я хочу сделать, или просто что-то подобное), так что

  • верхний левый угол, например, имеет позицию: 10,
  • верхний правый угол, например, имеет позицию: 30,
  • нижний левый угол, например, имеет положение: 5,
  • нижний правый угол, например, имеет позицию: 15.

- поэтому загружайте только эти маркеры, которые находятся в этом поле 10-30-5-15

например GET,

и когда я перемещаю карту, например, в поле 17-12-48-20, затем выполняю следующий запрос GET
и с этой цитатой MySQL и скачайте следующие маркеры, что я вижу сейчас,

с этим я могу иметь карту с неограниченным количеством маркеров,

и когда будет много маркеров, тогда кластеризация может их связать,

так что с этим ppl не нужно делать «предварительную загрузку» всех маркеров БД (у которых сейчас 4 МБ и будет больше), но загружать только то, что они видят в данный момент,

Я знаю, что это возможно, потому что это есть на многих сайтах, но я не мастер языковых кодов, я знаю только немного php и mysql (и html) :)

// простите за мой английский

Ответы [ 2 ]

1 голос
/ 12 апреля 2010

Мне кажется, что вы ищете что-то вроде MarkerClusterer

EDIT

Понятно - я не очень четко понял исходный вопрос.

Что вам нужно сделать, это отправить текущее поле 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, предполагая, что в вашей таблице данных есть столбцы lat и lng, что-то вроде этого

$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
";
0 голосов
/ 16 января 2013

Вы не сможете управлять / отображать тысячи маркеров на картах Google с помощью диспетчера маркеров, производительность будет ужасной. Единственный способ сделать это с какой-либо надежностью - это использовать утилиту наподобие MarkerClusterer, которая группирует маркеры в непосредственной близости, или использовать Fusion Tables Layer.

Лично я бы порекомендовал слой Fusion Tables, однако здесь есть отличная рецензия, в которой рассказывается обо всех возможных вариантах, которые вы, возможно, захотите рассмотреть. https://developers.google.com/maps/articles/toomanymarkers

...