Як приховати дані при використанні Карт Google?


9

Я працював над картою google (v3 api), яка планує 120 маркерів або приблизно так (або незабаром) - див. Http://www.mediwales.com/mapping . Якщо ви переглядаєте джерело, дані про карту є усіма можливостями, чи можливо це приховати?

Мене не хвилює код, який генерує карту, лише дані. Дані схоплені з cms Wordpress.

Ось код, який генерує все це:

<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>

На які дані ви посилаєтесь? popup_contentі address?
Саса Іветік

@SasaIvetic Обидва, якщо можливо.
Роб

Відповіді:


7

Ви можете зберігати свої дані в базі даних ( Fusion Tables - швидке рішення).

На Картах Google є підручник, який показує, як це зробити за допомогою MySQL (але це може бути будь-яка база даних) http://code.google.com/apis/maps/articles/phpsqlajax_v3.html

Ви можете отримати настільки ж захищені та заплутані, як хочете, використовуючи базу даних.

Схоже, ви геокодуєте свої дані під час польоту - вам буде обмежено 1000 запитів на день за IP-адресою.

Було б більш ефективно геокодувати, а потім оновити базу даних майже в режимі реального часу.


1
Чудова пропозиція для Fusion Tables! Fusion Tables має обмеження геокодування, хоча зараз не можу його пригадати, але він набагато вище, ніж межа API. Єдиний недолік полягає в тому, що вам потрібно буде підтримувати дані Wordpress синхронізованими з Fusion Table (або по черзі використовувати дані Fusion Tables на вашому сайті wordpress).
Саса Іветік

Це чудова ідея. Обмеження API нещодавно змінилися. Я ввожу деталі як окрему відповідь, для простору, але @Mapperz дав Справжню відповідь, просто хочу переконатися, що моя не сприймається як копія!
Еллі Кессельман

@Mapperz Це безумовно напрямок, в який я хочу рухатись ... якби тільки я знав, як! Подумайте, мені, мабуть, знадобляться приклади коду ... Я додам щедрості.
Роб

4

Ви не зможете фактично приховати вміст popup_contentі addressвід користувача, просто тому, що все, що надсилається на веб-сторінку, чітко видно кінцевому користувачеві. Замість того, щоб скидати все це під час завантаження, ви можете зробити запит на асинхронізацію для цього на натисканні на карту. У clickфункції обробника ви хочете зробити запит зі сторінки PHP для popup_content [i] та відкрити інформаційне вікно, як тільки запит завершиться (по черзі, відкрийте інформаційне вікно відразу із завантаженням ... тексту та оновіть текст згодом) . Ви можете обробляти адреси подібним чином.

Примітка: це рішення все ще НЕ приховує вміст від користувача, воно просто затримує завантаження, так що всі дані не одразу є. Це також негативно вплине на вашу ефективність.

Як інша альтернатива, ви можете яким-небудь чином приховати дані. Ви також можете вивести дані в окремий файл JavaScript під час завантаження, таким чином, це не відразу видно, коли користувач натискає "Переглянути джерело". Знову ж таки, дані насправді не приховані від користувача; його просто видаляють із поля зору.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.