Google Haritalar'ı kullanırken verileri nasıl gizlerim?


9

120 işaretçi çizen (veya kısa bir süre içinde) bir google haritası üzerinde (API'nin v3'ü) çalışıyorum - bkz. Http://www.mediwales.com/mapping . Eğer harita verisi tüm görmek için kaynağı görüntülerseniz, bunu gizlemek mümkün mü?

Haritayı üreten kod hakkında endişelenmiyorum, sadece veri. Veriler bir Wordpress cms'den alınır.

İşte hepsini üreten kod:

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

Hangi verilere atıfta bulunuyorsunuz? popup_contentve address?
Sasa Ivetic

@SasaIvetic Mümkünse her ikisi de.
Rob

Yanıtlar:


7

Verilerinizi bir veritabanında saklayabilirsiniz ( Fusion Tables hızlı bir çözümdür).

Google Haritalar, bunu MySQL ile nasıl yapacağınızı gösteren bir öğreticiye sahiptir (ancak herhangi bir veritabanı olabilir) http://code.google.com/apis/maps/articles/phpsqlajax_v3.html

Bir veritabanı arka ucu kullanarak istediğiniz kadar güvenli ve gizlenmiş olabilirsiniz.

Verilerinizi anında coğrafi olarak kodladığınız anlaşılıyor - IP adresi başına günde 1000 istekle sınırlı olacaksınız.

Coğrafi kod oluşturmak ve daha sonra gerçek zamanlıya yakın veritabanını güncellemek daha verimli olacaktır.


1
Fusion Tables için harika bir öneri! Fusion Tables'ın coğrafi kodlama sınırı var, ancak şimdi hatırlayamıyorum, ancak API sınırından çok daha yüksek. Tek dezavantajı, wordpress verilerinizi bir Füzyon Tablosu ile senkronize etmeniz (veya alternatif olarak wordpress sitenizdeki Fusion Tables verilerini kullanmanız) gerekmesidir.
Sasa Ivetic

Bu harika bir fikir. API sınırları son zamanlarda değişti. Ayrıntıları boşluk için ayrı bir cevap olarak giriyorum, ama @Mapperz GERÇEK yanıtı verdi, benimkinin taklitçi olarak algılanmadığından emin olmak istiyorum!
Ellie Kesselman

@Mapperz Kesinlikle gitmek istediğim yön bu ... sadece nasıl olduğunu bilsem! Sanırım kodun bazı örneklerine ihtiyacım olacak ... Bir ödül ekleyeceğim.
Rob

4

Bir web sayfasına gönderilen her şey son kullanıcı tarafından açıkça görülebildiğinden, kullanıcının içeriğini popup_contentve addresskullanıcının içeriğini gizleyemezsiniz . Her şeyi yükleme zamanında boşaltmak yerine, bir harita tıklamasında bunun için bir zaman uyumsuz istek yapabilirsiniz. Senin içinde clickişleyici işlevi size popup_content [i] için PHP sayfasından bir istekte bulunur ve bu istek tamamlanıncaya kez infowindow açın (dönüşümlü, hemen Yükleniyor ... metinle infowindow açın ve daha sonra metni güncellemek) isteyeyim . Adresleri benzer bir şekilde işleyebilirsiniz.

Not: Bu çözüm hala içeriği kullanıcıdan gizlemez, tüm verilerin hemen mevcut olmaması için yüklemeyi geciktirir. Ayrıca performansınız üzerinde olumsuz bir etkisi olacaktır.

Başka bir alternatif olarak, verileri bir şekilde gizleyebilirsiniz. Ayrıca verileri yüklendiğinde ayrı bir JavaScript dosyasına da gönderebilirsiniz; böylece kullanıcı Kaynağı Görüntüle'yi tıkladığında hemen görünmez. Yine, veriler aslında kullanıcıdan gizlenmez; sadece düz görüşten çıkarılır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.