Google maps Загрузка маркеров геокодирования - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть WP с пользовательским типом сообщения и +150 сообщений с полным адресом с использованием пользовательских полей.

Я использую Google API с Geocoding для отображения этих сообщений на карте, и это отображается в шаблоне file.php. Работает отлично:

$args = array( ... );
$fiches = get_posts($args);
foreach ($fiches as $post) {
    $array_adresse = array('ADRESSE1','ADRESSE2','ADRESSE3','CODE_POSTAL','VILLE');
    [...]
    codeAddress("<?php echo addslashes($adresse_membre); ?>","<?php echo $titre; ?>","<?php echo $cat_name; ?>","<?php echo $post->guid; ?>","<?php echo $adresse_desc; ?>","<?php echo $icon_at; ?>","<?php echo $carre_color; ?>");

    function codeAddress(address,title,cat_name,guid,adress_desc,icon_at,color) {
        geocoder.geocode( { "address": address},function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location,
                    title: title,
                    icon: icon_at
                });
                var markerCluster = new MarkerClusterer(map, marker,
        {imagePath: 'https://raw.githubusercontent.com/googlemaps/js-marker-clusterer/gh-pages/images/m1.png'});
                var myWindowOptions = {
                    content: "<h5 style=\"margin: 0 0 5px 0;font-size: 16px;\"><a href=\""+guid+"\" title=\"Voir cette fiche\" target=\"_blank\">"+title+"</a></h5><p style=\"font-size: 12px;\">Catégorie : "+cat_name+" <span style=\"display:inline-block;vertical-align: middle;background-color:"+color+";width: 10px;height: 10px;\">&nbsp;</span></p><p>"+adress_desc+"</p><a style=\"float: right;color: blue;font-size:12px;\" href=\""+guid+"\" target=\"_blank\">>> Voir la fiche</a>"
                };
                var myInfoWindow = new google.maps.InfoWindow(myWindowOptions);
                google.maps.event.addListener(marker, "click", function() {
                    myInfoWindow.open(map,marker);
                });             
            } 
            else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
                setTimeout(function() {
                   codeAddress(address,title,cat_name,guid,adress_desc,icon_at,color);
                }, 0);
            } 
            else {
                //alert("Geocode was not successful for the following reason: " + status);
            }
        });
    }
<?php } ?>
}

Но у меня проблема, мои маркеры загружаются один за другим. Кто-то знает, существует ли проблема:

- загрузить все маркеры одновременно?

- использовать кеш для более быстрой загрузки?

-или просто быстрее загружаться?

1 Ответ

0 голосов
/ 28 сентября 2018

Похоже, что ваши приложения достаточно часто сталкиваются с ошибкой OVER_QUERY_LIMIT, поэтому между каждым маркером всегда приходится ждать (setTimeout).

Первым делом проверьте, используете ли вы ключ API, потому что вам не следует так часто повторять ошибку OVER_QUERY_LIMIT, если бы вы это делали. Некоторые советы о том, как начать использовать ключи API, см. В разделе https://issuetracker.google.com/116675310#comment2

Если даже используя ключ API, вы по-прежнему сталкиваетесь с ошибкой OVER_QUERY_LIMIT чаще, чем хотелось бы, вы можете использовать веб-сервис API геокодирования из пакетного задания, чтобы геокодировать адреса один раз в день (чтобы результаты оставались свежими), а затем показать все маркеры одновременно, используя эти кэшированные результаты.

...