मैंने जावास्क्रिप्ट और Google मैप्स एपीआई का उपयोग करके हैंडहेल्ड डिवाइस के लिए एक छोटा सा एप्लीकेशन लिखा है, अब मुझे टाइमर फ़ंक्शन का उपयोग करके मार्ग पर मानचित्र पर कहीं भी अपने मार्कर आइकन को स्थानांतरित करने की आवश्यकता है। मेरे पास एक आदमी आइकन है और मुझे इसे मानचित्र पर स्वचालित रूप से स्थानांतरित करने की आवश्यकता है। मैं यह कैसे कर सकता हूँ?मार्ग के साथ एक कस्टम Google मानचित्र मार्कर को एनिमेट कैसे करें?
उत्तर
यह स्वचालित रूप से कुछ नहीं लेता है, लेकिन आपको Google Drive फ़ैटफ्यूजन द्वारा प्रयोग करना चाहिए। कोड को देखकर आपकी मदद कर सकती है।
दुर्भाग्य से, आधिकारिक जीएमएपीएस संग्रह में कोई स्वचालित-मार्कर-आंदोलन कार्य नहीं है।
हालांकि, यदि आपके पास GRoute है, तो इसका मतलब होगा कि आपके पास अंक का एक सेट है। मार्ग चरणों के माध्यम से पाश के लिए, आप कुछ इस तरह इस्तेमाल कर सकते हैं:
for (var c = 0; c < yourroute.getNumSteps(); c++) {
yourmarker.setLatLng(yourroute.getStep(c).getLatLng());
}
बेशक
, तो आप शायद एसिंक्रोनस रूप टाइमर का उपयोग कर ऐसा करने के लिए चाहता हूँ:
function moveToStep(yourmarker,yourroute,c) {
if {yourroute.getNumSteps() > c) {
yourmarker.setLatLng(yourroute.getStep(c).getLatLng());
window.setTimeout(function(){
moveToStep(yourmarker,yourroute,c+1);
},500);
}
}
moveToStep(marker,route,0);
भी चिकनी आंदोलन के लिए, आप आपके पास पहले से मौजूद अंकों से अंतरण कर सकता है।
क्या यह कार्यक्षमता Google मानचित्र V3 में उपलब्ध है?दिशा-निर्देशों द्वारा लौटाए गए "चरण" सरणी में केवल प्रस्तुत बिंदु बनाने वाले व्यक्तिगत बिंदुओं के बजाय दिशानिर्देशों के चरणों (यानी बाएं और इतने पर बाएं मुड़ें) शामिल हैं। – Kevin
@ पुस्कवोर मार्ग को अनुकरण करने के लिए लेटलॉन्ग समन्वय में वृद्धि करना संभव है, मार्ग केवल सड़कों पर ही नहीं होना चाहिए। – devdar
@dev_darin: हां। हालांकि सभी मार्ग सीधे लाइनें नहीं हैं; विभिन्न मार्ग बिंदुओं के बीच में, आपका दृष्टिकोण निश्चित रूप से व्यवहार्य है। – Piskvor
एक बहुत अच्छा उदाहरण यहाँ है:
वह पृष्ठ http://econym.org.uk/gmap/epoly.htm पर लाइब्रेरी के पुराने संस्करण का उपयोग करता है जिसमें कुछ आसान उपयोगिता फ़ंक्शन शामिल हैं जिनका उपयोग आप पथ के साथ स्थिति के अक्षांश को खोजने के लिए कर सकते हैं। एनिमेटेड मार्कर बनाने के लिए इसे और अधिक आसान बनाना चाहिए। –
बस ब्याज से बाहर मैंने पिछले साल खरीदी गई साइट पर एक समान तकनीक का भी उपयोग किया। नवीनतम एपीआई के साथ विधियों की तारीख बहुत कम है, लेकिन यह अच्छी तरह से काम करता है। http://www.flushtracker.com/ – Matt
आशा इस तुम यहाँ मदद मिलेगी एक बटन है और आप स्रोत से गंतव्य मार्ग के लिए मार्कर चाल उन पर क्लिक करें जब। मार्कर के मार्ग को सेट करने के लिए setRoutes विधि का उपयोग किया जाता है।
function setRoutes(){
var directionsDisplay = new Array();
for (var i=0; i< startLoc.length; i++){
var rendererOptions = {
map: map,
suppressMarkers : true,
preserveViewport: true
}
directionsService = new google.maps.DirectionsService();
var travelMode = google.maps.DirectionsTravelMode.DRIVING;
var request = {
origin: startLoc[i],
destination: endLoc[i],
travelMode: travelMode
};
directionsService.route(request,makeRouteCallback(i,directionsDisplay[i]));
}
उन्हें सेट करने के बाद मार्ग बनाएं।
function makeRouteCallback(routeNum,disp){
if (polyline[routeNum] && (polyline[routeNum].getMap() != null)) {
startAnimation(routeNum);
return;
}
return function(response, status){
if (status == google.maps.DirectionsStatus.OK){
var bounds = new google.maps.LatLngBounds();
var route = response.routes[0];
startLocation[routeNum] = new Object();
endLocation[routeNum] = new Object();
polyline[routeNum] = new google.maps.Polyline({
path: [],
strokeColor: '#FFFF00',
strokeWeight: 3
});
poly2[routeNum] = new google.maps.Polyline({
path: [],
strokeColor: '#FFFF00',
strokeWeight: 3
});
// For each route, display summary information.
var path = response.routes[0].overview_path;
var legs = response.routes[0].legs;
disp = new google.maps.DirectionsRenderer(rendererOptions);
disp.setMap(map);
disp.setDirections(response);
//Markers
for (i=0;i<legs.length;i++) {
if (i == 0) {
startLocation[routeNum].latlng = legs[i].start_location;
startLocation[routeNum].address = legs[i].start_address;
// marker = google.maps.Marker({map:map,position: startLocation.latlng});
marker[routeNum] = createMarker(legs[i].start_location,"start",legs[i].start_address,"green");
}
endLocation[routeNum].latlng = legs[i].end_location;
endLocation[routeNum].address = legs[i].end_address;
var steps = legs[i].steps;
for (j=0;j<steps.length;j++) {
var nextSegment = steps[j].path;
var nextSegment = steps[j].path;
for (k=0;k<nextSegment.length;k++) {
polyline[routeNum].getPath().push(nextSegment[k]);
//bounds.extend(nextSegment[k]);
}
}
}
}
polyline[routeNum].setMap(map);
//map.fitBounds(bounds);
startAnimation(routeNum);
} // else alert("Directions request failed: "+status);
}
}
अंत में हम GeekOnJava ब्लॉग पर
function startAnimation(index) {
if (timerHandle[index]) clearTimeout(timerHandle[index]);
eol[index]=polyline[index].Distance();
map.setCenter(polyline[index].getPath().getAt(0));
poly2[index] = new google.maps.Polyline({path: [polyline[index].getPath().getAt(0)], strokeColor:"#FFFF00", strokeWeight:3});
timerHandle[index] = setTimeout("animate("+index+",50)",2000); // Allow time for the initial map display
}
आप पाया जा सकता है पूरा कोड शुरू एनीमेशन समारोह और उस कोड को कॉपी करें और उन्हें और आउटपुट youtube पर चलने कहते हैं।
मैं मार्कर को 2 सेकंड से अधिक समय के लिए मिडपॉइंट पर रोकना चाहता हूं और फिर से शुरू करना चाहता हूं, मैंने अपडेटपॉली फ़ंक्शन में नींद बनाने की कोशिश की लेकिन यह रोक नहीं रहा? क्या आप यहां मेरी मदद कर सकते हैं – Raghu
यहां मेरा समाधान है जो v3 API के साथ काम करता है। यह मार्कर को निश्चित वेग के साथ एनिमेट नहीं करता है, लेकिन गणना की गई अवधि अवधि के आधार पर। एक गति कारक है, इसलिए उदाहरण के लिए आप वास्तविकता की तुलना में 10x तेज मार्ग से ड्राइव कर सकते हैं।
मैंने इसे यथासंभव सरल करने की कोशिश की है। इसका इस्तेमाल करने के लिए स्वतंत्र महसूस करें।
var autoDriveSteps = new Array();
var speedFactor = 10; // 10x faster animated drive
function setAnimatedRoute(origin, destination, map) {
// init routing services
var directionsService = new google.maps.DirectionsService;
var directionsRenderer = new google.maps.DirectionsRenderer({
map: map
});
//calculate route
directionsService.route({
origin: origin,
destination: destination,
travelMode: google.maps.TravelMode.DRIVING
},
function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
// display the route
directionsRenderer.setDirections(response);
// calculate positions for the animation steps
// the result is an array of LatLng, stored in autoDriveSteps
autoDriveSteps = new Array();
var remainingSeconds = 0;
var leg = response.routes[0].legs[0]; // supporting single route, single legs currently
leg.steps.forEach(function(step) {
var stepSeconds = step.duration.value;
var nextStopSeconds = speedFactor - remainingSeconds;
while (nextStopSeconds <= stepSeconds) {
var nextStopLatLng = getPointBetween(step.start_location, step.end_location, nextStopSeconds/stepSeconds);
autoDriveSteps.push(nextStopLatLng);
nextStopSeconds += speedFactor;
}
remainingSeconds = stepSeconds + speedFactor - nextStopSeconds;
});
if (remainingSeconds > 0) {
autoDriveSteps.push(leg.end_location);
}
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
// helper method to calculate a point between A and B at some ratio
function getPointBetween(a, b, ratio) {
return new google.maps.LatLng(a.lat() + (b.lat() - a.lat()) * ratio, a.lng() + (b.lng() - a.lng()) * ratio);
}
// start the route simulation
function startRouteAnimation(marker) {
var autoDriveTimer = setInterval(function() {
// stop the timer if the route is finished
if (autoDriveSteps.length === 0) {
clearInterval(autoDriveTimer);
} else {
// move marker to the next position (always the first in the array)
marker.setPosition(autoDriveSteps[0]);
// remove the processed position
autoDriveSteps.shift();
}
},
1000);
}
उपयोग:
setAnimatedRoute("source address or LatLng ...", "destination address or LatLng ...", map);
// start simulation on button click...
$("#simulateRouteButton").click(function() {
startRouteAnimation(agentMarker);
});
- 1. Google मानचित्र कस्टम मार्कर रेटिना रिज़ॉल्यूशन
- 2. Google मानचित्र मार्कर इवेंट
- 3. Google मानचित्र मार्कर के लिए कस्टम टूलटिप कैसे जोड़ें?
- 4. Google मानचित्र V3 मार्कर
- 5. Google मानचित्र एक मानचित्र पर दो मार्कर
- 6. मार्कर को Google मानचित्र क्वेरी स्ट्रिंग के साथ कैसे रखें
- 7. Google मानचित्र मार्कर बदलें
- 8. Google मानचित्र मार्कर समूह
- 9. Google मानचित्र v3 कस्टम मार्कर आइकन इसे मानचित्र पर
- 10. पूरा Google मानचित्र मार्ग
- 11. Google मानचित्र मार्कर
- 12. Google मानचित्र के साथ मार्ग हटाएं
- 13. Google मानचित्र मार्कर क्लस्टरर
- 14. एक चिकनी ज़ूम (एपीआई वी 3) के साथ एक Google मानचित्र मार्कर को कैसे केन्द्रित करें?
- 15. Google मानचित्र के अनुसार एक मार्ग
- 16. Google मानचित्र एम्बेड करना - अवांछित मार्कर को कैसे खत्म करें?
- 17. Google मानचित्र में मार्कर दृश्यता
- 18. Google मानचित्र: कस्टम मार्कर में छाया कैसे जोड़ें?
- 19. Google मानचित्र पर एनिमेटिंग मार्कर v2
- 20. Google मानचित्र मार्कर पर क्लिक को "अनुकरण" कैसे करें?
- 21. Google मानचित्र पर एकाधिक मार्कर
- 22. Google मानचित्र V3: कैनवास मार्कर अक्षम करें
- 23. Google मानचित्र मार्कर प्रबंधक V3
- 24. Google मानचित्र जानकारीविंडो केवल मार्कर
- 25. Google मानचित्र पर एक मार्ग की साजिश
- 26. Google मानचित्र: मार्कर पर ऑटो सेंटर मानचित्र
- 27. आप Google मानचित्र API v3 के लिए कस्टम आइकन के साथ मार्कर कैसे बनाते हैं?
- 28. Google मानचित्र मार्कर एपीआई v3
- 29. मार्कर के साथ एक ऑब्जेक्ट संबद्ध करें (google map v2)
- 30. jQuery के साथ Google मानचित्र एपी मार्कर को छिपाने के लिए कैसे करें
मैं सवाल की सामग्री को प्रतिबिंबित करने के लिए शीर्षक का संपादन किया। @ ज्योति: जब कोई प्रश्न पोस्ट करते हैं, तो कृपया इसकी सामग्री की समीक्षा करने के लिए अपना समय लें। अतिरिक्त समीक्षा के केवल 2 मिनट के साथ, आप अधिक और बेहतर उत्तरों की अपेक्षा के साथ 100% तक गुणवत्ता में सुधार कर सकते हैं। –
k sir धन्यवाद, क्या आप मेरे प्रश्न का उत्तर दे सकते हैं –
@jyothi क्या आपको इसका समाधान मिला है, मुझे मानचित्र एप्लिकेशन पर यह वही चीज़ करने की ज़रूरत है। यदि आप इसे हासिल करते हैं तो यह कुछ प्रकाश डाला जा सकता है। – devdar