Как запутать данные при использовании Google Maps?


9

Я работал над картой 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>

На какие данные вы ссылаетесь? 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 (или поочередно использовать данные таблиц Fusion на своем сайте 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.