2011-09-28 11 views
6

मैंने कुछ बहुभुज सेट अप किए हैं, उन्हें मानचित्र पर ठीक से खींचा है। जब मैं क्लिक किया गया तो मैं console.log को भी आग लगाने में कामयाब रहा। हालांकि, मैं यह पता लगाने के बारे में कैसे जाउंगा कि वास्तव में किस बहुभुज पर क्लिक किया गया था?मैं पॉलीगॉन पर क्लिक करने के लिए संदर्भ कैसे प्राप्त करूं? (गूगल मैप्स एपीआई वी 3)

जैसा कि आप यहां मेरे नमूना कोड में देख सकते हैं, मैं प्रत्येक ऑब्जेक्ट को "लॉट" संग्रह में संग्रहीत करता हूं, हालांकि - उन्हें क्लिक करने से मुझे केवल क्लिक का लेट-लम्बा समय मिल जाता है। मुझे लगा कि मुझे अपने बहुभुजों के माध्यम से लूप करने की आवश्यकता हो सकती है और जांच करनी चाहिए कि क्या बिंदु क्लिक किया गया था, उन्हें छेड़छाड़ कर रहा है और इस प्रकार यह पता लगाया गया है कि यह कौन सा बहुभुज है ... क्या कोई आसान समाधान है?

var lot = new google.maps.Polygon({ 
    paths: me.area, 
    strokeColor: 'black', 
    strokeOpacity: 0.35, 
    strokeWeight: 1, 
    fillColor: fillcol, 
    fillOpacity: 0.35 
}); 

lot.setMap(map); 
var obj = { 
    'id':me.id, 
    'rented':me.rented, 
    'area':lot 
}; 

google.maps.event.addListener(lot, 'click', function(event) { 
    console.log(event); 
}); 

lots.push(lot); 
+0

पर इस विशेष अवधारणा पाया पता चला getPath() एक आकर्षण की तरह काम करता है। मुझे एहसास नहीं हुआ कि मुझे वास्तव में क्लिक किए गए पॉलीगॉन संदर्भ को क्लिक किया गया है, इसे मेरे संग्रहित "लॉट" के साथ मिलान करने के लिए, बस मेरे संग्रहीत लॉट के माध्यम से लूप करें और इसकी तुलना करें .getPath को अन्य .getPath, अगर वे मेल खाते हैं तो मुझे पता है कि कौन सा क्लिक किया गया था और अब इस विशेष वस्तु से संबंधित जानकारी दिखा सकता है। – Bisa

+0

साइट आपको ऐसा करने से कुछ घंटे पहले प्रतीक्षा करनी पड़ेगी, लेकिन यदि आप कर सकते हैं तो आपको इसे उत्तर के रूप में पोस्ट करना चाहिए। – Trott

उत्तर

13

क्यों प्रत्येक बहुभुज करने के लिए कुछ आईडी संपत्ति जब आप असाइन नहीं करते उन्हें बनाएं और बाद में बस का उपयोग करें। myID? वास्तव में बोलते हुए, आप उस बहुभुज वस्तु पर आवश्यक सभी जानकारी लटका सकते हैं।

var lot = new google.maps.Polygon({ 
     paths: me.area, 
     strokeColor: 'black', 
     strokeOpacity: 0.35, 
     strokeWeight: 1, 
     fillColor: fillcol, 
     fillOpacity: 0.35 
    }); 

    lot.setMap(map); 

    var obj = { 
     'id':me.id, 
     'rented':me.rented, 
     'area':lot 
    }; 
    lot.objInfo = obj; 

    google.maps.event.addListener(lot, 'click', function(event) { 
     console.log(this.objInfo); 
    }); 

    lots.push(lot); 

यह लूप में पथ तुलना से अधिक प्रभावी होगा, या क्या मुझे कुछ याद आ रहा है? :)

+0

हम्म, मुझे यकीन नहीं है, बात है I पॉलीगॉन ऑब्जेक्ट में अपनी खुद की संपत्तियों को जोड़ने का वास्तव में कभी नहीं सोचा था, लेकिन मुझे लगता है कि यह आसान है तो पथ की तुलना में हाँ =) – Bisa

+1

@ बिसा और जावास्क्रिप्ट स्टोर ऑब्जेक्ट्स और एरे के संदर्भों के संदर्भ में, कॉपी नहीं, इस मामले में स्मृति खपत वही रहता है। – dmitry

+0

सही, यह एक ठोस तर्क है, मेरे मूल समाधान में मैं मानों की प्रतिलिपि बनाउंगा और उनकी तुलना करूंगा बल्कि संदर्भों की तुलना करूंगा - मैं थोड़ा कोड सुधारने के बजाय थोड़ा सा सुधार के साथ अपने कोड को थोड़ा सा ^^ thnx – Bisa

0

getPath() एक आकर्षण की तरह काम करता है। मुझे एहसास नहीं हुआ कि मुझे वास्तव में क्लिक किए गए पॉलीगॉन संदर्भ को मेरे ईवेंट "लॉट" के साथ मिलान करने के लिए क्लिक करें, मैं अपने संग्रहीत लॉट के माध्यम से बस लूप करता हूं और इसकी तुलना करता हूं .getPath को अन्य .getPath, अगर वे मेल खाते हैं तो मुझे पता है कि कौन सा था क्लिक किया गया और अब इस विशेष वस्तु से संबंधित जानकारी दिखा सकता है।

यहाँ एक कोड नमूना है: (जहां पार्किंग मेरी पार्किंग क्षेत्र वस्तुओं जो खुद सरणियों पार्किंग वस्तुओं से युक्त है की एक सरणी है)

google.maps.event.addListener(lot, 'click', function(event) { 

    var myPath = this.getPath(); 

      for(var i = 0; i < parking.length; i++){ 
      for(var j = 0; j < parking[i].lots.length; j++){ 
       var lot = parking[i].lots[j]; 

       var otherPath = lot.poly.getPath(); 

       if(otherPath == myPath){ 
        console.log(lot); 
        break; 
       } 
      } 
      } 

     }); 
+0

ट्रॉट्स सुझाव के अनुसार मैंने अपनी टिप्पणी को एक उत्तर के रूप में पोस्ट किया है और साथ ही साथ कुछ नमूना कोड भी प्रदान किया है - मुझे इसे कल तक मेरे उत्तर के रूप में चिह्नित नहीं करने देगा;) – Bisa

8

यदि मैं एक अलग समाधान के साथ थोड़ा देर से कदम उठा सकता हूं, तो मुझे एक ही समस्या हो रही थी और पता चला कि आप बहुभुज पर कस्टम गुणों को परिभाषित कर सकते हैं।

मेरे उदाहरण (जो अमेरिका के एक नक्शे पर एक राज्य बनाता है)

poly = new google.maps.Polygon({ 
    map_state_id: map_state_id, 
    paths: pts, 
    fillColor: colour, 
    fillOpacity: 0.66, 
    strokeWeight: 1, 
    clickable:true 
    }); 

इस मामले "map_state_id" में कस्टम गुण है। मैंने इसे राज्य की आईडी (अलाबामा के लिए 1, अलास्का के लिए 2, आदि) के रूप में परिभाषित किया है।

तब जब विशेष स्थिति बाद में क्लिक की जाती है, तो यह "map_state_id" ईवेंट फ़ंक्शन में पारित किया जा सकता है।

google.maps.event.addListener(poly, 'click', function() 
    { 
    var map_state_id = this.map_state_id; //retrieve correct state_id 

    $.ajax(
     { 
     type: "POST", 
     url: "http://www...get_state_info.php", 
     data: {state_id : map_state_id}, 
     dataType: "html", 
     success: function(data) 
      { 
      $("#state_info").html(data); //display some info 
      }      
     }); 
    }); 

मैं http://dominoc925.blogspot.com/2011/12/add-your-own-property-field-to-google.html

+0

के बारे में सही हैं 'इस' का उपयोग करके इंगित करने के लिए धन्यवाद। - polys को असंबद्ध करने के लिए जरूरी था। – sdailey

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