Como ofuscar dados ao usar o Google Maps?

9

Eu tenho trabalhado em um mapa do google (v3 da API) que está plotando 120 marcadores ou mais (ou será em breve) - consulte http://www.mediwales.com/mapping . Se você visualizar a fonte, os dados do mapa são para toda a visualização, é possível ocultar isso?

Não estou preocupado com o código que está gerando o mapa, apenas com os dados. Os dados são obtidos a partir de um Wordpress cms.

Aqui está o código que está gerando tudo:

<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>
Roubar
fonte
A que dados você está se referindo? popup_contente address?
Sasa Ivetic 5/05
@SasaIvetic Ambos, se possível.
Rob

Respostas:

7

Você pode armazenar seus dados em um banco de dados (o Fusion Tables é uma solução rápida).

O Google Maps tem um tutorial que mostra como fazer isso com o MySQL (mas pode ser qualquer banco de dados) http://code.google.com/apis/maps/articles/phpsqlajax_v3.html

Você pode ficar tão seguro e ofuscado quanto desejar usando um back-end de banco de dados.

Parece que você codifica seus dados em tempo real - você estará limitado a 1000 solicitações por dia por endereço IP.

Seria mais eficiente geocodificar e atualizar o banco de dados quase em tempo real.

Mapperz
fonte
11
Ótima sugestão para o Fusion Tables! O Fusion Tables tem um limite de geocodificação, embora eu não possa me lembrar agora, mas é MUITO maior que o limite da API. A única desvantagem é que você precisará manter os dados do wordpress sincronizados com uma Fusion Table (ou usar os dados do Fusion Tables no seu site wordpress).
Sasa Ivetic
Esta é uma ótima idéia. Os limites da API foram alterados recentemente. Estou inserindo detalhes como uma resposta separada, por espaço, mas o @Mapperz deu a resposta REAL, só quero ter certeza de que o meu não é percebido como um imitador!
Ellie Kesselman
@Mapperz Esta é definitivamente a direção que eu quero seguir ... se eu soubesse! Acho que provavelmente vou precisar de alguns exemplos do código ... vou adicionar uma recompensa.
Rob
4

Você não conseguirá ocultar o conteúdo do popup_contente addressdo usuário, simplesmente porque tudo o que é enviado para uma página da Web é claramente visível para o usuário final. Em vez de descarregar tudo no momento do carregamento, você pode fazer uma solicitação assíncrona em um clique no mapa. Em sua clickfunção de manipulador, você deseja fazer uma solicitação na página PHP para popup_content [i] e abrir o infoWindow assim que a solicitação for concluída (alternativamente, abra o infoWindow imediatamente com Carregando ... texto e atualize o texto posteriormente) . Você pode manipular endereços de maneira semelhante.

Nota: esta solução ainda não oculta o conteúdo do usuário, simplesmente atrasa o carregamento para que todos os dados não estejam imediatamente presentes. Também terá um impacto negativo no seu desempenho.

Como outra alternativa, você pode ofuscar os dados de alguma forma. Você também pode enviar os dados para um arquivo JavaScript separado durante o carregamento, para que não fiquem visíveis imediatamente quando o usuário clicar em Exibir fonte. Novamente, os dados não estão realmente ocultos do usuário; é simplesmente removido da vista de todos.

Sasa Ivetic
fonte