2011-02-23 13 views
5

पंजीकरण नहीं कर रहा है ठीक है, मैं ओपनलेयर के लिए एक नोब हूं। मेरी समस्या यह है कि ...ओपनलेयर event.register

मेरे जावास्क्रिप्ट में, मानचित्र को आरंभ करने के बाद, बेस ओएसएम परत और केंद्रित करने के बाद, मेरा कोड मार्करों को मानचित्र में जोड़ने के लिए अंक के अजेक्स लुकअप करता है, सभी मार्कर समूहों में हैं, इसलिए यह प्रत्येक समूह के लिए एक नई परत बनाता है और मार्कर परत में मार्कर जोड़ता है। लेकिन, परत पर मार्कर जोड़ने से पहले यह एक साधारण चेतावनी समारोह के साथ mousedown का एक ईवेंट रजिस्टर करता है।

समस्या यह है कि जब मैं मार्कर पर क्लिक करने के लिए जाता हूं, तो कर्सर बस एक हाथ में बदल जाता है जैसे कि मुझे लगता है कि मैं मानचित्र खींचना चाहता हूं। ऐसा लगता है कि शीर्ष पर कुछ अन्य परत है जो क्लिक को रोक रही है। मैंने केवल सुनिश्चित करने के लिए अलर्ट के बजाय कंसोल लॉगिंग करने की कोशिश की लेकिन यह वास्तव में ईवेंट क्लिक को ट्रिगर नहीं करता है। यह एक कोड नमूना है कि कोड का पूरा चित्र प्रदर्शित होगा करने के लिए मुश्किल है, लेकिन यहाँ एक टुकड़ा है:

function createMarker(lat, lon) { 
    var icon = new OpenLayers.Icon('/mapicon/icon-b.png', new OpenLayers.Size(12, 20), new OpenLayers.Pixel(-6, -10)); // this is a custom image 
    lonlat = new OpenLayers.LonLat(lon, lat); 
    var marker = new OpenLayers.Marker(lonlat, icon.clone()); 
    return marker; 
} 

marker = createMarker(lat,lon,'Example Title'); 
marker.events.register('mousedown', pin, function(evt) { alert('help!'); OpenLayers.Event.stop(evt); }); 

मैं एक दीवार से टकराने कर रहा हूँ और अगर मैं गंजा नहीं थे, मैं अपने बालों को बाहर खींच होगी । क्या किसी के भी पास कोई सुझाव है?

+0

में एक लिंक जोड़ा मेरा जवाब। –

उत्तर

4

इस प्रयास करें: उद्देश्य यह है कि आप घटना बाध्य करने के लिए चाहते हैं

function createMarker(lat, lon) { 
    var icon = new OpenLayers.Icon('/mapicon/icon-b.png', new OpenLayers.Size(12, 20), new OpenLayers.Pixel(-6, -10)); 
    lonlat = new OpenLayers.LonLat(lon, lat); 
    var marker = new OpenLayers.Marker(lonlat, icon.clone()); 
    return marker; 
} 

marker = createMarker(lat,lon,'Example Title'); 
marker.events.register('mousedown', marker, function(evt) { 
    alert('help!'); 
}); 

रजिस्टर समारोह का दूसरा पैरामीटर होना चाहिए।

map = new OpenLayers.Map('divmap'); 
map.events.register('mouseover', map, function(evt) { 
    // Do stuff 
}); 

मुझे आशा है कि यह आपकी मदद: मैं हमेशा मेरे मन में OpenLayers.Map वस्तु के लिए माउसओवर घटना के उदाहरण है। हैप्पी कोडिंग!

4

शायद आपको इसके बजाय परत घटनाओं को देखना चाहिए। मुझे लगता है कि आप अपने अंक के लिए वेक्टर परत का उपयोग कर रहे हैं? उस स्थिति में, इवेंट हैंडलिंग के बारे में Vector layer documentation देखें।

माउस परतों को प्राप्त करने वाली विभिन्न परतों को काम करना चाहिए।

इसके अलावा, OL पृष्ठ पर this sample पर एक नज़र डालें।

क्षमा करें अगर मैं स्पष्ट बता रहा हूं, और आप इसे पहले से ही आजमा रहे हैं।

संपादित करें:

अपने जवाब यह है कि आप एक बार देख this question कि मैंने पूछा और बाद में एक राजभाषा हैक साथ जवाब लेने के लिए चाहते हो सकता है से एहसास। शायद आप इससे कुछ खींच सकते हैं।

10

सभी मदद के लिए धन्यवाद। समस्या यह है (और ओएल दस्तावेज बहुत ही दयनीय है इसलिए यह कहीं भी यह नहीं बताता है) कि उसे उस क्रम के साथ करना है जिसमें आप परतें बनाते हैं। मेरे कोड में, मैं परत नामों की एक सरणी के माध्यम से लूप करता हूं और मैं प्रत्येक नाम के लिए एक मार्कर परत और एक वेक्टर परत बना रहा था। मैंने पहले मार्कर परत बनाने और फिर वेक्टर परत बनाने के साथ इसे आजमाया और इसका एक ही क्लिक अपंग प्रभाव था। तो मैंने पहले सभी वेक्टर परतों को बनाने के लिए एक बार लूपिंग करने की कोशिश की। फिर से लूप और मार्कर परतें बनाते हैं और यह काम करता है।

ओएल एक महान मैपिंग सिस्टम है। यह सिर्फ एक शर्म की बात है कि उनके पास ऐसे खराब दस्तावेज हैं। नमूने लगभग बेकार हैं। यदि ओएल ऐसी समुदाय संचालित चीज है, तो कोई ओएल मंच क्यों नहीं है? मुझे यहां आना पड़ा क्योंकि ऐसा लगता है कि ओएल उपयोगकर्ता किसी भी तरह की पोस्टिंग करते हैं।

+1

http://osgeo-org.1560.n6.nabble.com/OpenLayers-Users-f3910695.html – tomfumb

2

मैं एक ही समस्या है और मुझे लगता है मैं समाधान लगता है: इस पर

देखो: Capture feature events on different layers

समस्या हो कि आप एक ही समय में अलग अलग परतों पर अलग घटनाओं सुन नहीं कर सकते लगता है, आप केवल सक्रिय परत में ही कर सकते हैं।

पुनश्च: मैं इसे बनाने के लिए यह प्रयास किया नहीं अभी तक ...

2

सरल तरीका:

map.events.listeners.mousedown.unshift({ 
    func: function(){ 
     alert('hola muheres'); 
    } 
}); 

बस स्थानापन्न घटना आप के बजाय चाहते हैं "mousedown"

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