He estado trabajando en un mapa de google (v3 de la api) que está trazando 120 marcadores más o menos (o lo haré en breve): consulte http://www.mediwales.com/mapping . Si ve la fuente, los datos del mapa son para toda la vista, ¿es posible ocultar esto?
No me preocupa el código que genera el mapa, solo los datos. Los datos se obtienen de un cms de Wordpress.
Aquí está el código que lo genera todo:
<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
Robar
fuente
fuente
popup_content
yaddress
?Respuestas:
Puede almacenar sus datos en una base de datos ( Fusion Tables es una solución rápida).
Google Maps tiene un tutorial que le muestra cómo hacer esto con MySQL (pero puede ser cualquier base de datos) http://code.google.com/apis/maps/articles/phpsqlajax_v3.html
Puedes ponerte tan seguro y ofuscado como quieras usando un back-end de base de datos.
Parece que geocodifica sus datos sobre la marcha: estará limitado a 1000 solicitudes por día por dirección IP.
Sería más eficiente geocodificar y luego actualizar la base de datos casi en tiempo real.
fuente
No podrá ocultar realmente el contenido del usuario
popup_content
yaddress
del usuario, simplemente porque cualquier cosa que se envíe a una página web es claramente visible para el usuario final. Sin embargo, en lugar de deshacerse de todo en el momento de la carga, puede hacer una solicitud asíncrona con un clic en el mapa. En suclick
función de controlador, querrá hacer una solicitud desde la página PHP para popup_content [i], y abrir la ventana de información una vez que se complete la solicitud (alternativamente, abra la ventana de información de inmediato con Cargando ... texto, y actualice el texto después) . Puede manejar direcciones de manera similar.Nota: esta solución aún NO oculta el contenido al usuario, simplemente retrasa la carga para que todos los datos no estén presentes de inmediato. También tendrá un impacto negativo en su rendimiento.
Como otra alternativa, podría ofuscar los datos de alguna manera. También puede enviar los datos a un archivo JavaScript separado en la carga, de esa manera no será visible de inmediato cuando el usuario haga clic en Ver código fuente. Nuevamente, los datos no están realmente ocultos para el usuario; simplemente se elimina de la vista.
fuente