Pracowałem nad mapą Google (v3 interfejsu API), która wykreśla około 120 znaczników (lub wkrótce) - patrz http://www.mediwales.com/mapping . Jeśli przeglądasz źródło, dane mapy są dla wszystkich do zobaczenia, czy można to ukryć?
Nie martwię się o kod generujący mapę, tylko dane. Dane są pobierane z cms Wordpress.
Oto kod, który generuje to wszystko:
<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
Obrabować
źródło
źródło
popup_content
iaddress
?Odpowiedzi:
Możesz przechowywać swoje dane w bazie danych ( Fusion Tables to szybkie rozwiązanie).
Mapy Google mają samouczek, który pokazuje, jak to zrobić za pomocą MySQL (ale może to być dowolna baza danych) http://code.google.com/apis/maps/articles/phpsqlajax_v3.html
Możesz uzyskać tak bezpieczne i zaciemnione, jak chcesz, korzystając z zaplecza bazy danych.
Wygląda na to, że geokodujesz swoje dane w locie - będziesz mieć do 1000 żądań dziennie na adres IP.
Bardziej wydajne byłoby geokodowanie, a następnie aktualizacja bazy danych w czasie zbliżonym do rzeczywistego.
źródło
Nie będziesz w stanie ukryć zawartości
popup_content
iaddress
przed użytkownikiem, po prostu dlatego, że wszystko, co jest wysyłane na stronę internetową, jest wyraźnie widoczne dla użytkownika końcowego. Zamiast zrzucać to wszystko podczas ładowania, możesz wykonać żądanie asynchroniczne po kliknięciu mapy. W swojejclick
funkcji obsługi chciałbyś złożyć żądanie ze strony PHP dla popup_content [i] i otworzyć infoWindow po zakończeniu żądania (alternatywnie, otwórz okno infoWindow z ładowaniem ... tekstu, a następnie zaktualizuj tekst) . Możesz obsługiwać adresy w podobny sposób.Uwaga: to rozwiązanie nadal NIE ukrywa treści przed użytkownikiem, po prostu opóźnia ładowanie, dzięki czemu wszystkie dane nie są natychmiast obecne. Będzie to również miało negatywny wpływ na Twoją wydajność.
Jako kolejną opcję możesz w jakiś sposób zaciemnić dane. Możesz również wyprowadzić dane do osobnego pliku JavaScript podczas ładowania, w ten sposób nie jest on natychmiast widoczny, gdy użytkownik kliknie opcję Wyświetl źródło. Ponownie dane nie są w rzeczywistości ukryte przed użytkownikiem; jest po prostu usuwany z pola widzenia.
źródło