2012-06-14 3 views
3

Мы создаем сайт с Wordpress с интегрированной системой Gmaps, чтобы показать местоположение мест для рыбалки. Он заполняется сообщениями, связанными с каждым состоянием, а также долготой и широтой, введенными в пользовательские поля. Карта отлично работает. Проблема состоит в том, что некоторые состояния имеют 1000+ маркеров, которые вызывают некоторое отставание от загрузки страницы, а маркеры сложены друг над другом, что делает его нелепым в использовании. Нам хотелось бы ограничить количество контактов, прежде чем отображать все маркеры. Для уточнения:Необходимо остановить отображение маркеров карты до тех пор, пока счет не достигнет 200

  1. В Калифорнии есть 1000+ озер, но в Аризоне около 165. ЕСЛИ общая сумма более 200, тогда простое сообщение должно показать посетителю, что есть «слишком много записей, пожалуйста, увеличьте масштаб, чтобы просмотреть выбор» или аналогичный. Затем,
  2. По мере того, как они увеличивают масштаб, он будет пересчитывать общее количество, а когда ему меньше 200 (или какой бы ни был лимит, на который мы фактически положили, только столько состояний имеют больше, чем), тогда маркеры будут отображаться в соответствии с областью, увеличенной до

Вид, когда они прибывают на страницу состояния, показывает все состояние и все маркеры. Если более 200 отсчетов, то он должен просто отображать сообщение для увеличения и т. Д. В любом случае будет указано более 50 000 озер, поэтому эта модификация значительно облегчит загрузку страницы.

Вот код, в настоящее время мы работаем с этим тянет данные и отображает карту:

<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    function initialize() { 
    var myLatlng = new google.maps.LatLng(<?php echo $center_final; ?>); 
    var myOptions = { 
     zoom: <?php echo $zoom; ?>, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.<?php echo $type; ?> 
    }; 
    var map = new google.maps.Map(document.getElementById("featured_overview"), myOptions); 
    <?php if(get_option('woo_maps_archive_scroll') == 'true'){ ?> 
    map.scrollwheel = false; 
    <?php } ?> 
    <?php foreach($coords as $c_key => $c_value) { ?> 
    var point = new google.maps.LatLng(<?php echo $c_value['coords']; ?>); 
    var root = "<?php bloginfo('template_url'); ?>"; 
    var the_link = '<?php echo get_permalink($c_key); ?>'; 
    <?php $title = str_replace(array('&#8220;','&#8221;'),'"',get_the_title($c_key)); ?> 
    <?php $title = str_replace('&#8211;','-',$title); ?> 
    <?php $title = str_replace('&#8217;',"`",$title); ?> 
    <?php $title = str_replace('&#038;','&',$title); ?> 
    var the_title = '<?php echo html_entity_decode($title) ?>'; 
    var color = '<?php echo $c_value['color']; ?>'; 
    createMarker(map,point,root,the_link,the_title,color); 
    <?php } ?> 
    } 
    initialize(); 
}); 
</script> 

Любая помощь будет принята с благодарностью. Спасибо заранее всем и каждому.

+0

Я хотел бы предложить взглянуть на это: http://stackoverflow.com/questions/1356321/load-markers-on-google-maps-dynamic-on-map-move-drag-pan - еще один вариант - сначала выполнить запрос в БД, чтобы получить количество маркеров на основе окна просмотра (вы вам нужно сделать запрос на выборку). Если общее количество маркеров> X, тогда отобразите сообщение для увеличения, иначе покажите маркеры. Затем вы настроили прослушиватели событий для изменения карты, а затем выполните запрос ajax для обновления маркеров на карте (или для отображения сообщения). – andresf

ответ

2

Почему бы не использовать библиотеку MarkerClusterer. Он предназначен именно для этих сценариев, поэтому вы можете установить разрешение кластеризации и расстояния. .. и вы также можете связывать события (если вы настаиваете на таком количестве, как 200).

(На самом деле, у меня есть не-выпустила плагин WordPress, который делает только что - вставить карту и зафиксировать кластеризацию на основе пост)

Смежные вопросы