6

मैं Angular 4, Google Maps v3, और मार्कर Clusterer v2 का उपयोग कर रहा हूं - इसलिए, अनिवार्य रूप से प्रत्येक संबंधित पुस्तकालय के नवीनतम संस्करण। मैं अपने मार्कर क्लस्टर और अन-क्लस्टर बनाने के लिए आधिकारिक Google मानचित्र दस्तावेज़ में पाया गया एक साधारण उदाहरण (https://developers.google.com/maps/documentation/javascript/marker-clustering) का पालन करने का प्रयास कर रहा हूं। यहाँ विशेषGoogle मानचित्र मार्कर "अन-क्लस्टरिंग" पर नहीं

नक्शा Init, कुछ भी नहीं:

public ngOnInit(): void { 
    var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 7, 
    center: {lat: 41.85, lng: -87.65} 
    }); 
    this.generateMockPinResultsResponse(10000, map); 
} 

इस समारोह init पर बुलाया सिर्फ नमूना पिन का एक समूह उत्पन्न करता है:

public generateMockPinResultsResponse(nMarkers, map): void { 
    let component = this; 
    var markers = []; 
    for (var i = 0; i<nMarkers; i++){ 
     let latitude: number = this.getRandomUsLat(); 
     let longitude: number = this.getRandomUsLng(); 
     var marker = new google.maps.Marker({ 
     position: { lat: latitude, lng: longitude }, 
     map: map 
     }); 
     markers.push(marker); 
    } 
    var markerCluster = new MarkerClusterer(map, markers);// 
    } 
ऊपर

वास्तव में सभी प्रासंगिक कोड जहाँ तक है मुझे पता है। मेरे मार्कर क्लस्टर करते हैं लेकिन अनजान नहीं होते हैं, और मुझे समझ में नहीं आता क्यों। मेरा सेमी-वर्किंग कोड यहां है: PLUNK, कोड स्निपेट app.ts फ़ाइल से हैं।

संपादित करें: नक्शा छोटे समूहों में घुसपैठ करता है, यह केवल व्यक्तिगत पिन में शामिल नहीं होता है।

+1

क्या आपने उचित क्लस्टर मार्कर छवियों के साथ ऐसा करने का प्रयास किया है? मैं सोच रहा हूं कि कोई समस्या हो सकती है जहां यह क्लस्टर मार्कर छवि को लोड करने का प्रयास करता है, लेकिन गायब फ़ाइल के कारण दुर्घटनाग्रस्त हो जाता है। –

+0

मैं इसे कोशिश करूंगा/पोस्ट लम्बाई – VSO

उत्तर

3

अपने स्थानों को लॉग इन करते हुए आप देख सकते हैं कि आप 0 दशमलव स्थानों पर यादृच्छिक एलएनजी/लैट उत्पन्न कर रहे हैं, इसलिए 10,000 स्थानों के साथ, आपके पास सटीक डुप्लिकेट स्थान होंगे। http://plnkr.co/edit/FWRdHXd2tJbOIRzrvBZj?p=preview

const positions = markers.map(marker => { 
    const position = marker.getPosition(); 

    return { 
    lat: position.lat(), 
    lng: position.lng(), 
}) 

console.log(positions); 

हम देख सकते हैं कि यह ठीक करता है कि इस http://plnkr.co/edit/vMkjrSYqeYoaN4lRRyHa?p=preview

public getRandomInRange (from, to, fixed) { 
    return (Math.random() * (to - from) + from).toFixed(fixed) * 1; 
    } 

    private getRandomUsLat(){ 
    let max = 48; 
    let min = 30; 
    let num = this.getRandomInRange(min, max, 4); 

    return num; 
    } 

    private getRandomUsLng(){ 
    let max = -70; 
    let min = -110; 
    let num = this.getRandomInRange(min, max, 4); 
    return num; 
    } 
3

यह कोणीय की समस्या नहीं है। चूंकि आपके पास लेट और लम्बे समय के लिए यादृच्छिक रूप से जेनरेट किया गया फ़ंक्शन है। किसी भी तरह से यह दो से अधिक मार्करों के बहुत करीब होगा। फिर Google मानचित्र लाइब्रेरी उन लोगों के बीच अंतर करने में सक्षम नहीं है।

https://embed.plnkr.co/Ww4N71vKe6IUZjHFPLKo/

यह Github पर सूचना मिली थी के रूप में अच्छी तरह से। मेरे प्लंकर को केवल 1000 आइटम के साथ देखें और हम कुछ मार्करों को देखने में सक्षम हो सकते हैं, लेकिन समस्या अभी भी बनी हुई है। लोग नक्शा ऑब्जेक्ट के अधिकतम ज़ूम को बदलने का सुझाव देते हैं। लेकिन यह depend on the map type. होगा आप मेरे प्लंकर के कंसोल पर ज़ूम स्तर भी देख सकते हैं। अधिकतम में यह 22 हो सकता है, मैं 48 के साथ हैक करने की कोशिश करता हूं।

यदि आपका वास्तविक डेटा बहुत नज़दीकी मार्करों के क्लस्टरिंग का समर्थन करने के लिए नीड है, तो आप पत्रक पर एक नज़र डालना चाहेंगे।

इस मुद्दे से उद्धरण।

यह समस्या, गूगल मैप्स एपीआई समाधान की आवश्यकता होती है में कई अन्य सीमाओं गूगल मैप्स से दूर हमारे व्यापार के लिए मजबूर के साथ। हम अब बड़ी सफलता के साथ पत्रक और मैपबॉक्स का उपयोग कर रहे हैं।

+1

कूल, मैं जवाब की सराहना करता हूं। समाप्ति के करीब बक्षीस पुरस्कार होगा। – VSO

+0

@VSO क्लस्टरिंग के काम को देखने के लिए आपको मार्करक्लस्टर [विकल्प] (https://googlemaps.github.io/js-marker-clusterer/docs/reference.html) के साथ भी खेलना चाहिए, उदाहरण के लिए '{gridSize: 50 , maxZoom: 15} '। – RWAM

+0

@RWAM बस अधिकतम ज़ूम करें: 15 और क्लस्टर में क्लिक करने पर एक मार्कर देखने में सक्षम हो सकता है। मुझे इसके बारे में वास्तव में पता नहीं था, -> वीएसओ को इंगित करने के लिए धन्यवाद: कृपया जांचें और देखें कि यह आपकी अपेक्षाओं को पूरा करता है या नहीं। मैं मार्कर देख सकता हूं लेकिन केवल एक ही। – trungk18

0

गूगल से निम्न उदाहरण आप विशेष रूप से uncluster समारोह मदद कर सकता है बेहतर (4 दशमलव स्थानों) यादृच्छिक स्थानों बनाने के लिए अपने जनरेटर अद्यतन कर रहा है: https://github.com/googlemaps/js-marker-clusterer

संबंधित मुद्दे