Comment masquer les données lors de l'utilisation de Google Maps?


9

J'ai travaillé sur une carte Google (v3 de l'API) qui trace environ 120 marqueurs (ou le fera bientôt) - voir http://www.mediwales.com/mapping . Si vous affichez la source des données de la carte pour tout le monde, est-il possible de masquer cela?

Je ne m'inquiète pas du code qui génère la carte, juste des données. Les données sont extraites d'un cms Wordpress.

Voici le code qui génère tout cela:

<script type="text/javascript"> 
(function() { 

window.onload = function() { 
 var mc;
// Creating an object literal containing the properties we want to pass to the map 
var options = { 
zoom: 10, 
center: new google.maps.LatLng(52.40, -3.61), 
mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 

// Creating the map 
var map = new google.maps.Map(document.getElementById('map'), options); 

// Creating a LatLngBounds object 
var bounds = new google.maps.LatLngBounds(); 

// Creating an array that will contain the addresses 
var places = []; 

// Creating a variable that will hold the InfoWindow object 
var infowindow; 
mc = new MarkerClusterer(map);
<?php
$pages = get_pages(array('child_of' => $post->ID, 'sort_column' => 'menu_order'));
$popup_content = array();
foreach($pages as $post)
    {
    setup_postdata($post);
    $fields = get_fields(); 
    $popup_content[] = '<p>'.$fields->company_name.'</p><img src="'.$fields->company_logo.'" /><br /><br /><a href="'.get_page_link($post->ID).'">View profile</a>';
    $comma = ", ";
    $full_address = "{$fields->address_line_1}{$comma}{$fields->address_line_2}{$comma}{$fields->address_line_3}{$comma}{$fields->post_code}";
    $address[] = $full_address;
    }
wp_reset_query();
echo 'var popup_content = ' . json_encode($popup_content) . ';';
echo 'var address = ' . json_encode($address) . ';';
?>

var geocoder = new google.maps.Geocoder(); 

var markers = [];

// Adding a LatLng object for each city  
for (var i = 0; i < address.length; i++) { 
    (function(i) { 
        geocoder.geocode( {'address': address[i]}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                places[i] = results[0].geometry.location;

                // Adding the markers 
                var marker = new google.maps.Marker({position: places[i], map: map});
                markers.push(marker);
                mc.addMarker(marker);

                // Creating the event listener. It now has access to the values of i and marker as they were during its creation
                google.maps.event.addListener(marker, 'click', function() {
                    // Check to see if we already have an InfoWindow
                    if (!infowindow) {
                        infowindow = new google.maps.InfoWindow();
                    }

                    // Setting the content of the InfoWindow
                    infowindow.setContent(popup_content[i]);

                    // Tying the InfoWindow to the marker 
                    infowindow.open(map, marker);
                });

                // Extending the bounds object with each LatLng 
                bounds.extend(places[i]); 

                // Adjusting the map to new bounding box 
                map.fitBounds(bounds) 
            } else { 
            alert("Geocode was not successful for the following reason: " + status); 
            }

        });

    })(i);

} 
var markerCluster = new MarkerClusterer(map, markers); 
} 
})
(); 
</script>

De quelles données parlez-vous? popup_contentet address?
Sasa Ivetic

@SasaIvetic Both si possible.
Rob

Réponses:


7

Vous pouvez stocker vos données dans une base de données ( Fusion Tables est une solution rapide).

Google Maps propose un didacticiel qui vous montre comment procéder avec MySQL (mais peut être n'importe quelle base de données) http://code.google.com/apis/maps/articles/phpsqlajax_v3.html

Vous pouvez être aussi sécurisé et obscurci que vous le souhaitez en utilisant un back-end de base de données.

On dirait que vous géocodez vos données à la volée - vous serez limité à 1000 demandes par jour par adresse IP.

Il serait plus efficace de géocoder puis de mettre à jour la base de données en temps quasi réel.


1
Grande suggestion pour les tables de fusion! Fusion Tables a une limite de géocodage, bien que je ne m'en souvienne pas maintenant, mais elle est BEAUCOUP plus élevée que la limite de l'API. Le seul inconvénient est que vous devrez garder vos données wordpress synchronisées avec une table de fusion (ou utiliser alternativement les données des tables de fusion dans votre site wordpress).
Sasa Ivetic

C'est une bonne idée. Les limites de l'API ont changé récemment. J'entre des détails comme réponse distincte, pour l'espace, mais @Mapperz a donné la VRAIE réponse, je veux juste m'assurer que le mien n'est pas perçu comme un copieur!
Ellie Kesselman

@Mapperz C'est définitivement la direction dans laquelle je veux me diriger ... si seulement je savais comment! Je pense que j'aurai probablement besoin de quelques exemples de code ... J'ajouterai une prime.
Rob

4

Vous ne pourrez pas réellement masquer le contenu de popup_contentet addressde l'utilisateur, simplement parce que tout ce qui est envoyé à une page Web est clairement visible pour l'utilisateur final. Au lieu de tout vider au moment du chargement, vous pouvez faire une demande asynchrone pour cela sur un clic de carte. Dans votre clickfonction de gestionnaire, vous voudriez faire une demande à partir de la page PHP pour popup_content [i], et ouvrir l'infoWindow une fois la demande terminée (alternativement, ouvrez immédiatement l'infoWindow avec le texte de chargement ... et mettez à jour le texte par la suite) . Vous pouvez gérer les adresses d'une manière similaire.

Remarque: cette solution ne masque toujours pas le contenu à l'utilisateur, elle retarde simplement le chargement afin que toutes les données ne soient pas immédiatement présentes. Cela aura également un impact négatif sur vos performances.

Comme autre alternative, vous pouvez obscurcir les données d'une manière ou d'une autre. Vous pouvez également exporter les données vers un fichier JavaScript distinct lors du chargement, de cette façon elles ne sont pas immédiatement visibles lorsque l'utilisateur clique sur Afficher la source. Encore une fois, les données ne sont pas réellement cachées à l'utilisateur; il est simplement retiré de la vue.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.