Google मानचित्र का उपयोग करते समय डेटा को कैसे बाधित किया जाए?


9

मैं एक गूगल मैप (एपीआई का v3) पर काम कर रहा हूं जो 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

आप अपने डेटा को डेटाबेस में स्टोर कर सकते हैं ( फ्यूजन टेबल्स एक त्वरित समाधान है)।

Google मानचित्र में एक ट्यूटोरियल है जो आपको दिखाता है कि यह MySQL (लेकिन किसी भी डेटाबेस से कैसे हो सकता है) http://code.google.com/apis/maps/articles/phpsqlajax_v3.html

आप किसी डेटाबेस के बैक-एंड का उपयोग करके जितना चाहें उतना सुरक्षित और सुरक्षित प्राप्त कर सकते हैं।

ऐसा लगता है कि आप अपने डेटा को फ्लाई पर जियोकोड करते हैं - आप प्रति दिन प्रति आईपी पते पर 1000 अनुरोधों तक सीमित रहेंगे।

जियोडोड के लिए अधिक कुशल होगा और फिर डेटाबेस को वास्तविक समय के करीब अपडेट करेगा।


1
फ्यूजन टेबल्स के लिए बढ़िया सुझाव! फ्यूजन टेबल्स की एक जियोकोडिंग सीमा होती है, हालांकि मैं इसे अब याद नहीं कर सकता, लेकिन यह एपीआई सीमा से अधिक है। केवल दोष यह है कि आपको अपने वर्डप्रेस डेटा को फ्यूजन टेबल के साथ सिंक करने की आवश्यकता होगी (या वैकल्पिक रूप से अपनी वर्डप्रेस साइट में फ्यूजन टेबल्स डेटा का उपयोग करें)।
सास इवेटिक

यह एक महान विचार है। एपीआई सीमाएं हाल ही में बदल गई हैं। मैं अंतरिक्ष के लिए एक अलग उत्तर के रूप में विवरण दर्ज कर रहा हूं, लेकिन @ मपरज़ ने असली जवाब दिया, बस यह सुनिश्चित करना चाहता हूं कि मेरा नकल नहीं किया जाए!
ऐली केसलमैन

@ मैपरेज़ यह निश्चित रूप से वह दिशा है जो मैं सिर करना चाहता हूं ... अगर केवल मुझे पता था कि कैसे! मुझे लगता है कि मुझे शायद कोड के कुछ उदाहरणों की आवश्यकता होगी ... मैं एक इनाम जोड़ूंगा।
रॉब

4

आप वास्तव में की सामग्री को छिपाने के लिए सक्षम नहीं होंगे popup_contentऔर addressउपयोगकर्ता से, बस क्योंकि कुछ भी एक वेब पेज को भेजी जाने वाली स्पष्ट रूप से अंतिम-उपयोगकर्ता को दिख रहा है। हालाँकि, सभी लोड-टाइम पर इसे डंप करने के बजाय, आप इसके लिए एक मैप क्लिक पर एक async अनुरोध कर सकते हैं। अपने clickहैंडलर फंक्शन में आप popup_content [i] के लिए PHP पेज से एक अनुरोध करना चाहते हैं, और रिक्वेस्ट पूरी होने पर इन्फोविन्डो को खोलें (वैकल्पिक रूप से, इन्फोविन्डो को अभी से Loading ... टेक्स्ट के साथ खोलें, और बाद में टेक्स्ट अपडेट करें) । आप एक समान तरीके से पतों को संभाल सकते हैं।

नोट: यह समाधान अभी भी उपयोगकर्ता से सामग्री को छिपाता नहीं है, यह केवल लोडिंग में देरी करता है ताकि सभी डेटा तुरंत मौजूद न हों। आपके प्रदर्शन पर भी इसका नकारात्मक प्रभाव पड़ेगा।

एक अन्य विकल्प के रूप में, आप डेटा को किसी तरह से बाधित कर सकते हैं। आप डेटा को लोड पर एक अलग जावास्क्रिप्ट फ़ाइल में भी आउटपुट कर सकते हैं, इस तरह यह तब दिखाई नहीं देता जब उपयोगकर्ता व्यू सोर्स पर क्लिक करता है। फिर, डेटा वास्तव में उपयोगकर्ता से छिपा नहीं है; यह सीधे सादे दृष्टि से हटा दिया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.