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>
google-maps
php
Roubar
fonte
fonte
popup_content
eaddress
?Respostas:
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.
fonte
Você não conseguirá ocultar o conteúdo do
popup_content
eaddress
do 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 suaclick
funçã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.
fonte