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>
google-maps
php
Rob
la source
la source
popup_content
etaddress
?Réponses:
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.
la source
Vous ne pourrez pas réellement masquer le contenu de
popup_content
etaddress
de 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 votreclick
fonction 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.
la source