Làm cách nào để làm xáo trộn dữ liệu khi sử dụng Google Maps?


9

Tôi đã làm việc trên bản đồ google (v3 của api) đang vẽ sơ đồ 120 điểm đánh dấu (hoặc sẽ thực hiện trong thời gian ngắn) - xem http://www.mediwales.com/mapping . Nếu bạn xem nguồn dữ liệu bản đồ cho tất cả những gì nhìn thấy, liệu có thể ẩn điều này?

Tôi không lo lắng về mã tạo ra bản đồ, chỉ là dữ liệu. Dữ liệu được lấy từ một cms Wordpress.

Đây là mã tạo ra tất cả:

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

Dữ liệu nào bạn đang đề cập đến? popup_contentaddress?
Sasa Ivetic

@SasaIvetic Cả hai nếu có thể.
Cướp

Câu trả lời:


7

Bạn có thể lưu trữ dữ liệu của mình trong cơ sở dữ liệu ( Fusion Table là một giải pháp nhanh chóng).

Google Maps có một hướng dẫn chỉ cho bạn cách thực hiện điều này với MySQL (nhưng có thể là bất kỳ cơ sở dữ liệu nào) http://code.google.com.vn/apis/maps/articles/phpsqlajax_v3.html

Bạn có thể nhận được an toàn và bị xáo trộn như bạn muốn bằng cách sử dụng cơ sở dữ liệu phụ trợ.

Có vẻ như bạn mã hóa dữ liệu của mình một cách nhanh chóng - bạn sẽ bị giới hạn ở 1000 yêu cầu mỗi ngày cho mỗi địa chỉ IP.

Sẽ hiệu quả hơn với mã địa lý và sau đó cập nhật cơ sở dữ liệu gần thời gian thực.


1
Gợi ý tuyệt vời cho Fusion Table! Fusion Table có giới hạn mã hóa địa lý, mặc dù bây giờ tôi không thể nhớ lại, nhưng nó cao hơn giới hạn API. Hạn chế duy nhất là bạn sẽ cần giữ cho dữ liệu wordpress của mình được đồng bộ hóa với Bảng Fusion (hoặc sử dụng luân phiên dữ liệu Fusion Table trong trang web wordpress của bạn).
Sasa Ivetic

Ý kiến ​​hay. Các giới hạn API đã thay đổi gần đây. Tôi đang nhập chi tiết dưới dạng một câu trả lời riêng biệt, cho không gian, nhưng @Mapperz đã đưa ra câu trả lời THỰC SỰ, chỉ muốn đảm bảo rằng tôi không bị coi là một bản sao!
Ellie Kesselman

@Mapperz Đây chắc chắn là hướng tôi muốn hướng đến ... nếu tôi biết cách! Hãy nghĩ rằng tôi có thể cần một số ví dụ về mã ... Tôi sẽ thêm tiền thưởng.
Cướp

4

Bạn sẽ không thể thực sự ẩn nội dung của popup_contentaddresskhỏi người dùng, đơn giản vì mọi nội dung được gửi đến trang web đều hiển thị rõ ràng cho người dùng cuối. Thay vì bỏ tất cả vào lúc tải, bạn có thể thực hiện yêu cầu không đồng bộ cho nó khi nhấp vào bản đồ. Trong clickhàm xử lý của bạn, bạn sẽ muốn thực hiện một yêu cầu từ trang PHP cho popup_content [i] và mở thông tinWindow sau khi yêu cầu hoàn thành (thay vào đó, hãy mở thông tinWindow ngay với Đang tải ... văn bản và cập nhật văn bản sau đó) . Bạn có thể xử lý các địa chỉ theo cách tương tự.

Lưu ý: giải pháp này vẫn KHÔNG ẩn nội dung khỏi người dùng, nó chỉ đơn giản là trì hoãn việc tải để tất cả dữ liệu không xuất hiện ngay lập tức. Nó cũng sẽ có tác động tiêu cực đến hiệu suất của bạn.

Thay vào đó, bạn có thể làm xáo trộn dữ liệu theo một cách nào đó. Bạn cũng có thể xuất dữ liệu thành một tệp JavaScript riêng khi tải, theo cách đó nó không hiển thị ngay lập tức khi người dùng nhấp vào Xem Nguồn. Một lần nữa, dữ liệu không thực sự bị ẩn khỏi người dùng; nó chỉ đơn giản là loại bỏ khỏi tầm nhìn rõ ràng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.