2011-11-02 10 views
11

मैं Google मानचित्र पर काम कर रहा हूं और एक ऐसी सुविधा को कार्यान्वित करना चाहता हूं जहां उपयोगकर्ता मानचित्र पर किसी क्षेत्र का चयन करने के लिए अपने माउस का उपयोग करके बॉक्स/आयत खींच सकता है (जैसे विंडोज़ में एकाधिक फाइलों का चयन करना)। चयन पर, मैं इस क्षेत्र में आने वाले सभी मार्करों को प्राप्त करना चाहता हूं। मैं Google मानचित्र एपीआई और खोज दोनों के आसपास देख रहा हूं लेकिन मैं समाधान ढूंढने में असमर्थ हूं। मैंने चयन के लिए jQuery चयन योग्य का उपयोग करने की कोशिश की लेकिन यह सब लौटाता है जो divs का एक गुच्छा है जिससे मैं यह निर्धारित करने में असमर्थ हूं कि कोई मार्कर चुना गया है या नहीं।Google मानचित्र में बॉक्स/आयताकार ड्रा चयन

+0

है कि कुछ उपकरण की आवश्यकता होगी गूगल के नक्शे के लिए विशेष रूप DragZoom समारोह बदल दिया ... मैं कुछ समय के लिए "गूगल के लिए खोज करने की कोशिश की मानचित्र आयत चयन "लेकिन सफलता के बिना। क्या आपको कुछ मिला है? – TMS

+0

मुझे एक लाइब्रेरी मिली जो आपको आयत खींचने की अनुमति देती है (शिफ्ट कुंजी पकड़े हुए)। फिर यह उस क्षेत्र में ज़ूम करता है। मैंने इसे बदल दिया है ताकि यह ज़ूम इन न हो बल्कि चयनित क्षेत्र के भू-निर्देशांक लौटाए। मैं फिर मानचित्र पर सभी मार्करों के माध्यम से लूप करता हूं और उस क्षेत्र में मौजूद लोगों का चयन करता हूं। लाइब्रेरी का नाम "keydragzoom" –

+0

है क्या यह एक है? http://google-maps-utility-library-v3.googlecode.com/svn/tags/keydragzoom/1.0/docs/reference.html – TMS

उत्तर

9

मुझे लाइब्रेरी कीडैगज़ूम (http://google-maps-utility-library-v3.googlecode.com/svn/tags/keydragzoom/1.0/docs/reference.html) मिली और पृष्ठ पर एक आयत खींचने के लिए इसका इस्तेमाल किया।

बाद में, मैंने लाइब्रेरी को संपादित किया और इसे चयनित क्षेत्र ज़ूम करने से रोक दिया और इसके बजाय इसे 'ड्रैगेंड' ईवेंट में सही समन्वय वापस कर दिया। फिर मैंने उस विशेष क्षेत्र के भीतर मौजूद मार्करों को खोजने के लिए मानचित्र पर सभी मार्कर मैन्युअल रूप से looped। पुस्तकालय मुझे निम्नलिखित परिवर्तन करने के लिए उचित समन्वय नहीं दे रहा था।

को

var prj = null; 
    function DragZoom(map, opt_zoomOpts) { 
     var ov = new google.maps.OverlayView(); 

     var me = this; 
     ov.onAdd = function() { 
      me.init_(map, opt_zoomOpts); 
     }; 
     ov.draw = function() { 
     }; 
     ov.onRemove = function() { 
     }; 
     ov.setMap(map); 
     this.prjov_ = ov; 
     google.maps.event.addListener(map, 'idle', function() { 
      prj = ov.getProjection(); 
     }); 
    } 

और DragZoom.prototype.onMouseUp_ समारोह

DragZoom.prototype.onMouseUp_ = function (e) { 
    this.mouseDown_ = false; 
    if (this.dragging_) { 
     var left = Math.min(this.startPt_.x, this.endPt_.x); 
     var top = Math.min(this.startPt_.y, this.endPt_.y); 
     var width = Math.abs(this.startPt_.x - this.endPt_.x); 
     var height = Math.abs(this.startPt_.y - this.endPt_.y); 
     var points={ 
     top: top, 
     left: left, 
     bottom: top + height, 
     right: left + width 
     }; 
     var prj = this.prjov_.getProjection(); 
     // 2009-05-29: since V3 does not have fromContainerPixel, 
     //needs find offset here 
     var containerPos = getElementPosition(this.map_.getDiv()); 
     var mapPanePos = getElementPosition(this.prjov_.getPanes().mapPane); 
     left = left + (containerPos.left - mapPanePos.left); 
     top = top + (containerPos.top - mapPanePos.top); 
     var sw = prj.fromDivPixelToLatLng(new google.maps.Point(left, top + height)); 
     var ne = prj.fromDivPixelToLatLng(new google.maps.Point(left + width, top)); 
     var bnds = new google.maps.LatLngBounds(sw, ne); 
     //this.map_.fitBounds(bnds); 
     this.dragging_ = false; 
     this.boxDiv_.style.display = 'none'; 
     /** 
     * This event is fired when the drag operation ends. 
     * Note that the event is not fired if the hot key is released before the drag operation ends. 
     * @name DragZoom#dragend 
     * @param {GLatLngBounds} newBounds 
     * @event 
     */ 

     google.maps.event.trigger(this, 'dragend', points); 
    } 
    }; 
+0

यह 10k मार्करों के लिए कैसे करता है? –

+0

मैं अपने कोड में 'अंक' को कैसे रोकूं? मैंने google.maps.event.addListener (मानचित्र, 'ड्रैगेंड', फ़ंक्शन() {...}) का उपयोग करने का प्रयास किया, लेकिन जब मैं बॉक्स को बनाने के लिए स्थानांतरित करने के बजाय मानचित्र को स्थानांतरित करने के लिए खींचता हूं तो यह हस्तक्षेप करता है। –

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