2011-03-13 20 views
72

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

मैं नए निर्देशांक कैसे प्राप्त कर सकता हूं?

उत्तर

102

यहां JSFiddle Demo है। Google मानचित्र API V3 में ड्रैगगेबल मार्कर के lat और lng को ट्रैक करना बहुत आसान है। चलिए निम्नलिखित एचटीएमएल और सीएसएस के साथ हमारे आधार के रूप में शुरू करते हैं।

<div id='map_canvas'></div> 
<div id="current">Nothing yet...</div> 

#map_canvas{ 
    width: 400px; 
    height: 300px; 
} 

#current{ 
    padding-top: 25px; 
} 

यहां हमारे प्रारंभिक जावास्क्रिप्ट को Google मानचित्र आरंभ करना है। हम एक मार्कर बनाते हैं जिसे हम खींचना चाहते हैं और इसे ड्रैग करने योग्य संपत्ति को सत्य पर सेट करना चाहते हैं। बेशक यह ध्यान रखें कि यह आपके विंडो के एक ऑनलोड घटना से जुड़ी किया जाना चाहिए यह लोड करने के लिए के लिए, लेकिन मैं कोड के लिए छोड़ देंगे:

var map = new google.maps.Map(document.getElementById('map_canvas'), { 
    zoom: 1, 
    center: new google.maps.LatLng(35.137879, -82.836914), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 

var myMarker = new google.maps.Marker({ 
    position: new google.maps.LatLng(47.651968, 9.478485), 
    draggable: true 
}); 

यहाँ हम खींच के शुरू होने से ट्रैक करने के लिए दो घटनाओं dragstart देते हैं और मार्कर बंद होने पर dragend ड्रेक करने के लिए, और जिस तरह से हम इसे संलग्न करते हैं, वह google.maps.event.addListener का उपयोग करना है। हम यहां क्या कर रहे हैं div current की सामग्री को सेट करते समय मार्कर ड्रैग हो रहा है और फिर ड्रैग स्टॉप होने पर मार्कर के लैट और एलएनजी सेट करें। Google माउस ईवेंट में एक संपत्ति नाम 'latlng' होता है जो ईवेंट ट्रिगर होने पर 'google.maps.LatLng' ऑब्जेक्ट देता है। तो, हम यहां क्या कर रहे हैं मूल रूप से इस श्रोता के लिए पहचानकर्ता का उपयोग कर रहा है जो google.maps.event.addListener द्वारा वापस लौटाया जाता है और ड्रैगेंड की वर्तमान स्थिति निकालने के लिए संपत्ति latLng प्राप्त करता है। एक बार जब हम कि अक्षांश Lng मिल खींचें बंद हो जाता है जब हम अपने current div के भीतर प्रदर्शित करेंगे:

google.maps.event.addListener(myMarker, 'dragend', function(evt){ 
    document.getElementById('current').innerHTML = '<p>Marker dropped: Current Lat: ' + evt.latLng.lat().toFixed(3) + ' Current Lng: ' + evt.latLng.lng().toFixed(3) + '</p>'; 
}); 

google.maps.event.addListener(myMarker, 'dragstart', function(evt){ 
    document.getElementById('current').innerHTML = '<p>Currently dragging marker...</p>'; 
}); 

अन्त में, हम अपने चिह्नक और इसे नक्शे पर प्रदर्शित करेंगे:

map.setCenter(myMarker.position); 
myMarker.setMap(map); 

मुझे चलो पता है कि मेरे जवाब के बारे में आपके कोई प्रश्न हैं या नहीं।

+2

यह उत्कृष्ट है! मेरे पास एक ऑटो-पूर्ण पता इनपुट फ़ील्ड के साथ-साथ ड्रैगगेबल मार्कर वाला नक्शा है। यदि कोई इनपुट फ़ील्ड का उपयोग करता है तो मुझे लैट लंबे निर्देशांक भी प्रदर्शित करने की आवश्यकता है। क्या इसका कोई आसान समाधान है? –

+2

बहुत बढ़िया ......... –

27

आप बस getPosition() on the Marker पर कॉल कर सकते हैं - क्या आपने कोशिश की है?

यदि आप जावास्क्रिप्ट एपीआई के बहिष्कृत, v2 पर हैं, तो आप getLatLng() on GMarker पर कॉल कर सकते हैं।

+0

मुझे लगता है कि जहाँ मेरे भ्रम की स्थिति थी जब getPosition() कॉल करने के लिए पाया जा सकता है - क्या मुझे ऐसा कुछ है जो मुझे कन्स्ट्रक्टर में जोड़ना है ताकि मार्कर स्थानांतरित होने पर निर्देशांक मांगना चाहें? – Genadinik

+0

@Genadinik उदाहरण जो मैंने अपने संपादन में जोड़ा है, मदद की हो सकती है; यह दिखाता है कि ड्रैग इवेंट्स के लिए श्रोता को कैसे संलग्न किया जाए, जहां आप मार्कर से इसकी स्थिति के लिए पूछ सकते हैं और इसका उपयोग कर सकते हैं। –

+0

आह ठंडा, और यदि मैं सत्र या डीबी में निर्देशांक स्टोर करना चाहता हूं, तो क्या मुझे इसे AJAX कॉल के माध्यम से करना चाहिए? या क्या कोई आसान तरीका है? – Genadinik

1

आपको मार्कर पर एक श्रोता जोड़ना चाहिए और ड्रैग या ड्रैगेंड ईवेंट सुनना चाहिए, और जब आप इस ईवेंट को प्राप्त करते हैं तो घटना को अपनी स्थिति से पूछें।

मार्कर द्वारा ट्रिगर की गई घटनाओं के विवरण के लिए http://code.google.com/intl/fr/apis/maps/documentation/javascript/reference.html#Marker देखें। और ईवेंट श्रोताओं को जोड़ने की अनुमति देने के तरीकों के लिए http://code.google.com/intl/fr/apis/maps/documentation/javascript/reference.html#MapsEventListener देखें।

4
// show the marker position // 

console.log(objMarker.position.lat()); 
console.log(objMarker.position.lng()); 

// create a new point based into marker position // 

var deltaLat = 1.002; 
var deltaLng = -1.003; 

var objPoint = new google.maps.LatLng( 
    parseFloat(objMarker.position.lat()) + deltaLat, 
    parseFloat(objMarker.position.lng()) + deltaLng 
); 

// now center the map using the new point // 

objMap.setCenter(objPoint); 
15

कोशिश इस

var latlng = new google.maps.LatLng(51.4975941, -0.0803232); 
var map = new google.maps.Map(document.getElementById('map'), { 
    center: latlng, 
    zoom: 11, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 
var marker = new google.maps.Marker({ 
    position: latlng, 
    map: map, 
    title: 'Set lat/lon values for this property', 
    draggable: true 
}); 

google.maps.event.addListener(marker, 'dragend', function (event) { 
    document.getElementById("latbox").value = this.getPosition().lat(); 
    document.getElementById("lngbox").value = this.getPosition().lng(); 
}); 
+0

धन्यवाद दोस्त! पीड़ित जवाब। –

+0

मेरे लिए भी सही जवाब। धन्यवाद रोल्विन –

-1

इस प्रश्न है, जो मुझे (getPosition (सुझाव सहित के लिए काम नहीं के जवाब का एक बहुत), जो एक विधि मार्करों वस्तुओं के लिए उपलब्ध हो प्रतीत नहीं होता हैं)।एकमात्र तरीका है कि नक्शे वी 3 में मेरे लिए काम किया (बस) है:

var lat = marker.lat(); 
var long = marker.lng(); 
+1

मुझे लगता है कि आपका मतलब है 'marker.position.lat() 'और' marker.position.lng() ' –

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