मुझे Google मानचित्र के साथ एक नक्शा बनाना पसंद है जो बड़ी मात्रा में मार्कर (10.000 से अधिक) को संभाल सकता है। मानचित्र को धीमा करने के लिए मैंने एक एक्सएमएल-फाइल बनाई है जो वर्तमान व्यूपोर्ट के अंदर मौजूद मार्करों को आउटपुट करता है।Google मानचित्र V3: केवल व्यूपोर्ट में मार्कर दिखाएं - साफ़ मार्कर समस्या
पहले, मैं सेटअप करने के लिए प्रारंभ() मानचित्र विकल्पों का उपयोग:
function initialize() {
var myLatlng = new google.maps.LatLng(51.25503952021694,3.27392578125);
var myOptions = {
zoom: 8,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
google.maps.event.addListener(map, 'tilesloaded', function() {
loadMapFromCurrentBounds(map);
});
}
जब घटना 'tilesloaded' समाप्त हो गया है, मैं loadMapFromCurrentBounds(), यह काम करता है वर्तमान सीमा मिल जाएगा का उपयोग करें और एक अनुरोध भेजता है
function loadMapFromCurrentBounds(map) {
// First, determine the map bounds
var bounds = map.getBounds();
// Then the points
var swPoint = bounds.getSouthWest();
var nePoint = bounds.getNorthEast();
// Now, each individual coordinate
var swLat = swPoint.lat();
var swLng = swPoint.lng();
var neLat = nePoint.lat();
var neLng = nePoint.lng();
downloadUrl("mapsxml.php?swLat="+swLat+"&swLng="+swLng+"&neLat="+neLat+"&neLng="+neLng+"", function(data) {
var xml = parseXml(data);
var markers = xml.documentElement.getElementsByTagName("marker");
var infoWindow = new google.maps.InfoWindow;
for (var i = 0; i < markers.length; i++) {
var address = markers[i].getAttribute("address");
var type = markers[i].getAttribute("type");
var name = markers[i].getAttribute("name");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng"))
);
var html = "<b>" + name + "</b> <br/>" + address;
var icon = customIcons[type] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon,
shadow: icon.shadow});
bindInfoWindow(marker, map, infoWindow, html);
}
})
}
यह महान है, तथापि, वर्तमान कोड ऑफलोड नहीं करता मार्करों कि डी व्यूपोर्ट में अब और नहीं कर रहे हैं काम कर रहा है: एक्सएमएल फाइल करने के लिए मार्कर कि वर्तमान व्यूपोर्ट के अंदर हैं दिखाने के लिए। इसके अलावा, यह मार्करों को फिर से लोड करता है जो पहले ही लोड हो चुके हैं, जो नक्शा को उसी क्षेत्र में एक दृश्य समय को स्थानांतरित करते समय मानचित्र को धीमा कर देता है।
तो जब व्यूपोर्ट बदलता है, तो मैं नए मार्कर लोड करने से पहले पूरे मानचित्र को साफ़ करना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है?
अरे @jeff, संपादन के लिए THX! मैं बस आपको यह बताने के लिए चाहता था कि आप वास्तव में टैग के दाईं ओर दिखाई देने वाले "संपादन टैग" लिंक का उपयोग करके 'जावास्क्रिप्ट' टैग जोड़कर किसी प्रश्न पर सभी * उत्तरों के लिए हाइलाइटिंग सिंटैक्स जोड़ सकते हैं। सौभाग्य! :) – jmort253
[मार्कर clusterer] (https://code.google.com/p/google-maps-utility-library-v3/wiki/Libraries) उपयोगी होता है जब इतने सारे मार्कर के साथ काम कर रहा हो सकता है। – Blazemonger
तुम क्या कर 'द्वारा ऊपर विभाजन (',') कोड की कुछ लाइनें बचा सकता है map.getBounds()। ToUrlValue()।' और अपने कोनों के लिए एक अच्छी सरणी है। – tim