Я работал над картой Google (v3 из API), которая составляет около 120 маркеров (или скоро) - см. Http://www.mediwales.com/mapping . Если вы просматриваете источник, данные карты предназначены для всех пользователей, можно ли это скрыть?
Я не беспокоюсь о коде, который генерирует карту, только о данных. Данные взяты из Wordpress cms.
Вот код, который генерирует все это:
<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
обкрадывать
источник
источник
popup_content
аaddress
?Ответы:
Вы можете хранить свои данные в базе данных ( Fusion Tables - быстрое решение).
В Картах Google есть учебник, в котором показано, как это сделать с MySQL (но это может быть любая база данных) http://code.google.com/apis/maps/articles/phpsqlajax_v3.html
Вы можете стать настолько безопасным и запутанным, насколько захотите, используя базу данных.
Похоже, вы геокодируете свои данные на лету - вы будете ограничены 1000 запросами в день на IP-адрес.
Было бы более эффективно геокодировать, а затем обновить базу данных почти в реальном времени.
источник
Вы не будете в состоянии фактически скрыть содержимое
popup_content
иaddress
от пользователя, просто потому , что все , что отправляется на веб - странице явно видны конечному пользователю. Вместо того, чтобы выгрузить все это во время загрузки, вы можете сделать асинхронный запрос для этого по щелчку карты. В вашейclick
функции-обработчике вы бы хотели сделать запрос со страницы PHP для popup_content [i] и открыть информационное окно после завершения запроса (поочередно откройте информационное окно сразу с текстом Загрузка ... и обновите текст впоследствии) , Вы можете обрабатывать адреса аналогичным образом.Примечание: это решение по-прежнему НЕ скрывает содержимое от пользователя, оно просто задерживает загрузку, так что все данные не отображаются немедленно. Это также окажет негативное влияние на вашу производительность.
В качестве другой альтернативы, вы можете каким-то образом запутать данные. Вы также можете вывести данные в отдельный файл JavaScript при загрузке, чтобы они сразу не отображались, когда пользователь нажимает кнопку «Просмотреть источник». Опять же, данные на самом деле не скрыты от пользователя; это просто удалено из виду.
источник