¿Cómo ofuscar datos al usar Google Maps?


9

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>

¿A qué datos te refieres? popup_contenty address?
Sasa Ivetic

@SasaIvetic Ambos si es posible.
Rob

Respuestas:


7

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.


1
¡Gran sugerencia para Fusion Tables! Fusion Tables tiene un límite de geocodificación, aunque no puedo recordarlo ahora, pero es MUCHO más alto que el límite API. El único inconveniente es que necesitará mantener sus datos de WordPress sincronizados con una tabla Fusion (o utilizar alternativamente los datos de las tablas Fusion en su sitio de WordPress).
Sasa Ivetic

Esta es una gran idea. Los límites de la API han cambiado recientemente. Estoy ingresando detalles como una respuesta separada, por espacio, pero @Mapperz dio la respuesta REAL, ¡solo quiero asegurarme de que el mío no sea percibido como un imitador!
Ellie Kesselman

@Mapperz Esta es definitivamente la dirección en la que quiero dirigirme ... ¡si supiera cómo! Creo que probablemente necesitaré algunos ejemplos del código ... Agregaré una recompensa.
Rob

4

No podrá ocultar realmente el contenido del usuario popup_contenty addressdel 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 su clickfunció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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.