Tôi đã viết một ứng dụng nhỏ cho thiết bị cầm tay sử dụng JavaScript và API Google Maps, bây giờ II cần di chuyển biểu tượng điểm đánh dấu của tôi ở bất kỳ đâu trên bản đồ dọc theo tuyến đường bằng chức năng hẹn giờ. Tôi có một biểu tượng người đàn ông và tôi cần phải di chuyển nó tự động trên bản đồ. Tôi có thể làm cái này như thế nào?Làm cách nào để tạo hiệu ứng đánh dấu Google Maps tùy chỉnh dọc theo tuyến đường?
Trả lời
Nó không di chuyển một cái gì đó tự động, nhưng bạn nên kiểm tra các thí nghiệm Google Drive bằng phatfusion. Nhìn vào mã có thể giúp bạn.
Thật không may, không có chức năng chuyển động tự động đánh dấu trong bộ sưu tập chính thức của GMaps.
Tuy nhiên, nếu bạn có GRoute, điều đó có nghĩa là bạn có một tập hợp các điểm. Để lặp qua các bước lộ trình, bạn có thể sử dụng một cái gì đó như thế này:
for (var c = 0; c < yourroute.getNumSteps(); c++) {
yourmarker.setLatLng(yourroute.getStep(c).getLatLng());
}
Tất nhiên, có thể bạn sẽ muốn làm điều này không đồng bộ bằng cách sử dụng tính giờ:
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);
Đối với phong trào thậm chí mượt mà, bạn có thể nội suy các điểm từ những điểm bạn đã có.
Chức năng này có sẵn trong Google Maps V3 không?Mảng "bước" được trả về bởi DirectionsService chỉ dường như bao gồm các bước của chỉ đường (tức là rẽ trái tại như vậy) thay vì các điểm riêng lẻ tạo nên đường kết xuất. – Kevin
@Puskvor có thể tiếp tục tăng một tọa độ dài để mô phỏng tuyến đường, tuyến đường không phải chỉ trên đường phố. – devdar
@dev_darin: Có. Không phải tất cả các tuyến đường đều là đường thẳng; ở giữa các điểm tuyến khác nhau, cách tiếp cận của bạn tất nhiên là khả thi. – Piskvor
Một ví dụ khá thú vị là ở đây:
Trang đó sử dụng phiên bản cũ hơn của thư viện tại http://econym.org.uk/gmap/epoly.htm chứa một số chức năng tiện ích hữu ích mà bạn có thể sử dụng để tìm vị trí dài của một vị trí dọc theo một con đường. Nên làm cho nó dễ dàng hơn nhiều để xây dựng một dấu hiệu hoạt hình. –
Tôi đã sử dụng một kỹ thuật tương tự trên trang web mà tôi đã sửa vào năm ngoái. các phương thức có thể hơi lỗi thời với các API mới nhất nhưng nó hoạt động tốt. http://www.flushtracker.com/ – Matt
Hy vọng điều này sẽ giúp bạn ở đây là một nút và khi bạn bấm vào chúng marker di chuyển từ nguồn đến đường đích. phương thức setRoutes được sử dụng để đặt tuyến đường đánh dấu.
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]));
}
Tạo lộ trình sau khi đặt.
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);
}
}
Cuối cùng chúng ta gọi là bắt đầu chức năng hoạt hình
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
}
Bạn có thể tìm thấy mã đầy đủ trên GeekOnJava blog và sao chép mã đó và chạy chúng và đầu ra trên youtube.
Tôi muốn tạo điểm đánh dấu tại điểm giữa trong hơn 2 giây và bắt đầu lại, tôi đã cố gắng làm cho giấc ngủ trong chức năng updatepoly nhưng nó không dừng lại? Bạn có thể giúp tôi ở đây không – Raghu
Đây là giải pháp của tôi hoạt động với API v3. Điều này làm động các điểm đánh dấu không với một vận tốc cố định, nhưng dựa trên thời gian tuyến tính được tính toán. Có một yếu tố tốc độ, vì vậy ví dụ bạn có thể lái xe thông qua các tuyến đường 10x nhanh hơn trong thực tế.
Tôi đã cố gắng làm điều đó đơn giản nhất có thể. Hãy sử dụng nó.
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);
}
Cách sử dụng:
setAnimatedRoute("source address or LatLng ...", "destination address or LatLng ...", map);
// start simulation on button click...
$("#simulateRouteButton").click(function() {
startRouteAnimation(agentMarker);
});
- 1. Tuyến đường/lối đi/đường tùy chỉnh trên Google Maps
- 2. làm "điểm quan tâm dọc theo tuyến đường" trong google maps
- 3. Lưu trữ tuyến đường Google Maps hoàn chỉnh
- 4. Google Maps: Cách thêm bóng vào điểm đánh dấu tùy chỉnh?
- 5. Làm cách nào để thêm điểm đánh dấu trên các bản đồ của Google Maps dựa trên khoảng cách dọc theo đường?
- 6. API Google Maps - Nhận điểm dọc theo tuyến đường giữa vĩ độ/dài
- 7. Làm cách nào để xoay điểm đánh dấu trong Google Maps?
- 8. Điểm đánh dấu hoạt ảnh trên Google Maps v2
- 9. Làm cách nào để chuyển dữ liệu tùy chỉnh vào Google Maps v2 InfoWindowAdapter?
- 10. Xóa dấu chỉ đường khỏi API Google Maps V3
- 11. Làm cách nào để thay đổi màu của điểm đánh dấu trên Google Maps?
- 12. Cách di chuyển điểm đánh dấu trong API Google Maps
- 13. Làm cách nào để thêm tuyến đường RESTful tùy chỉnh vào ứng dụng Rails?
- 14. Làm cách nào để xóa điểm đánh dấu trên Google Maps?
- 15. Làm cách nào để đánh dấu một khu vực trên Google Maps
- 16. Làm cách nào để tham gia tất cả các điểm đánh dấu bằng đường dẫn trong Google Maps?
- 17. Đánh dấu Clustering - Fusion Table Layer - Google Maps v3
- 18. Sử dụng định tuyến góc dọc theo tuyến đường tròn
- 19. Lớp Google Maps tùy chỉnh qua API?
- 20. Cập nhật vị trí đánh dấu Google Maps V3
- 21. Đánh dấu tùy chỉnh NSCell
- 22. Thao tác kéo Điểm đánh dấu của Google Maps V3 vào Polyline
- 23. Remove đánh dấu trong Google Maps Api v3
- 24. Google Maps + Jquery: Lỗi đánh dấu trong IE
- 25. Thêm chức năng Đánh dấu bằng API Google Maps
- 26. Thay đổi kích thước điểm đánh dấu tùy thuộc vào thu phóng Google maps v3
- 27. Trình chỉnh sửa Eclipse: hiển thị điểm đánh dấu trên cột tùy chỉnh của thước dọc
- 28. Google Maps - Hàng nghìn điểm đánh dấu - JSON
- 29. Đánh dấu bitmap định tâm (Google Maps API Android v2)
- 30. Cách sử dụng điểm đánh dấu tùy chỉnh với ô?
Tôi chỉnh sửa các tiêu đề để phản ánh các nội dung của câu hỏi. @ jyothi: khi đăng câu hỏi, hãy dành thời gian của bạn để xem lại nội dung của nó. Chỉ với 2 phút đánh giá bổ sung, bạn có thể nâng cao chất lượng lên 100%, với kỳ vọng có nhiều câu trả lời tốt hơn và tốt hơn. –
k sir thank u, u có thể trả lời câu hỏi của tôi –
@ jyothi bạn đã nhận được một giải pháp này tôi cần phải làm điều này cùng một chính xác trên một ứng dụng bản đồ. Bạn có thể làm sáng tỏ nếu bạn đạt được nó như thế nào nó đã đạt được. – devdar