Chức năng tìm khoảng cách giữa các thành phố


9

Tôi đang làm việc với Google Docs và muốn tạo một bảng tính theo mẫu sau:

Số điểm A Điểm B
Los Angeles Miami 292100
Palo Alto San Francisco 90

Trong bảng tính, Mileageđược tính toán tự động. Tôi đang tìm kiếm "khoảng cách điều khiển", chứ không phải "như con quạ bay".

Có một chức năng trong Bảng tính Google có thể làm điều này không?


Khi khoảng cách tăng lên, sự khác biệt giữa "khoảng cách lái xe" và "chuyến bay quạ" sẽ giảm dần theo. Trong mọi trường hợp, họ có thể sẽ không khác nhau nhiều hơn một vài phần trăm.

1
Có vẻ như một yêu sách khá táo bạo, cao bồi. bạn đang nói rằng lái xe từ portland đến atlanta gần như là một chuyến đi giống như bay? tôi không nghĩ vậy
Landon Kuhn

1
@pnuts đã đồng ý và tôi sẽ không bảo vệ bình luận 4 năm của mình :)
Landon Kuhn

Rosarch, tại sao bạn không xem lại Ứng dụng web sau 4 năm vắng bóng và xem lại tất cả các câu trả lời hay mà bạn nhận được cho câu hỏi của mình?
Jacob Jan Tuinstra

Câu trả lời:


9

Với đoạn mã nhỏ sau đây, bạn có thể lấy khoảng cách giữa hai điểm.

function getDirection(city1, city2, unit) {
  var directions = Maps.newDirectionFinder()
    .setOrigin(city1).setDestination(city2)
    .setMode(Maps.DirectionFinder.Mode.DRIVING)
    .getDirections();
  var d = directions.routes[0].legs[0].distance.text;

  var distance, value = d.split(" ")[0].replace(",", ""), text = d.split(" ")[1];
  if(text == unit) {
    distance = value;
  } else if(text == "km" && unit == "mi") {
    distance = value / 1.6;
  } else {
    distance = value * 1.6;
  }
  return Math.round(distance);
}

Giải thích

API MAP, được xây dựng dựa trên Tập lệnh Google Apps, sẽ có hướng đầu tiên ( tuyến [0] ) giữa điểm gốcđích . Giá trị được trả về bị tước khỏi dấu phẩy và được phân tích thành số nguyên.

Ảnh chụp màn hình

nhập mô tả hình ảnh ở đây

Ghi chú

Khoảng cách quay trở lại có thể là ở km hoặc dặm . Tôi đã thêm các tính toán cho "đường chim bay" cũng như (trong dặm).

Thêm tập lệnh bên dưới Công cụ> Trình chỉnh sửa tập lệnh trong bảng tính. Nhấn nút lỗi trong trình chỉnh sửa tập lệnh và bạn đang di chuyển !!

Thí dụ

Tôi đã tạo một tệp ví dụ cho bạn: lấy khoảng cách lái xe

Người giới thiệu


1
Có vẻ như công thức trong tài liệu mẫu không còn hoạt động nhất quán. Ai đó có thể xin vui lòng chỉnh sửa nó để làm cho nó hoạt động? Tôi không biết gì về kịch bản (hơn là sao chép và dán) và tôi rất thích sự giúp đỡ của bạn! Tất cả tôi đang tìm kiếm là khoảng cách lái xe giữa các mã zip. Cảm ơn bạn!
Melissa

3

Trong Bảng tính Google:

=importXML("http://mapquestapi.com/directions/v1/route?  
  key=YOUR_KEY_HERE&outFormat=xml&from=" & A2 & "&to=" 
  & B2,"//response/route/distance")

nơi A2là nguồn gốc và B2là đích đến.

Bạn phải lấy khóa API từ mapquest và thay thế giá trị YOUR_KEY_HEREbằng nó.


1
Làm thế nào để bạn có được khóa API?
Jacob Jan Tuinstra

1
@JacobJanTuinstra developer.mapquest.com
Neil McGuigan

Neil, còn sống của bạn !! Cảm ơn đã chia sẻ điều đó.
Jacob Jan Tuinstra

+1 Giải pháp rõ ràng thanh lịch, tuy nhiên MapQuest hơi tệ hại. Tôi đã gặp lỗi này khi thử sử dụng khóa tôi đã được cung cấp: "Khóa này không được cấp phép cho dịch vụ này. Nếu bạn không có khóa, bạn có thể nhận được khóa miễn phí bằng cách đăng ký tại developer.mapquest.com ."
Nick Bolton

1

Đây là những gì làm việc cho tôi:

=importXML("http://maps.googleapis.com/maps/api/distancematrix/xml?&origins="& <point.A> & "&destinations=" & <point.B>; "//distance/value")

Điều này sẽ mang lại khoảng cách định hướng giữa <point.A>và tính <point.B>bằng mét (theo Google Maps, tất nhiên).


Điều đó thật tuyệt! Làm thế nào về khoảng cách as-the-crow-fly?
Dustin Kirkland

0

Tôi không nghĩ rằng có chức năng Excel hoặc phần mở rộng được xây dựng để làm điều này.

Bạn có thể muốn xem trang Source Forge này: http://zips.sourceforge.net/

  • Nó cung cấp một bộ dữ liệu CSV để chuyển đổi Mã Zip thành Lat / Long (có lẽ là điểm trung tâm)
  • Nó cung cấp mã Excel để tính khoảng cách "quạ bay" giữa hai tọa độ lat / long. (và bao gồm mã tương đương cho Java, PHP và Python.

Hàm Excel là

=IF(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1 - Long2) > 1,
  RadiusofEarth * ACOS(1), RadiusofEarth *
  ACOS(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1-Long2)))

Trang lưu ý rằng các góc phải nằm trong Radian và Excel có chức năng chuyển đổi độ sang Radian:

=RADIAN(degrees)

Trừ khi người khác có câu trả lời lắt léo, điều này sẽ giúp bạn có được những gì bạn muốn mà không cần quá nhiều công việc.


đúng, nhưng những gì về khoảng cách điều khiển thay vì "như con quạ bay"?

1
Điều đó khó khăn hơn đáng kể và sẽ đòi hỏi kiến ​​thức về tất cả các con đường, như được thực hiện trong Mapquest, Google Earth, Streets & Trips (hoặc MapPoint). Tôi không biết liệu có ứng dụng nào trong số này có API phù hợp không.

... mặt khác, nếu bạn đang tìm kiếm một xấp xỉ thô và sẵn sàng cho một số thành phố khá hạn chế, bạn có thể tìm các bảng khoảng cách lái xe khá phổ biến trong bản đồ lái xe và đường đua. Tái tạo kiểu dữ liệu đó trong Excel và xây dựng một tra cứu để truy xuất nó cho các cặp vị trí chắc chắn là khả thi trong Excel. Nếu điều đó kháng cáo, hãy trả lời và tôi sẽ có thể tạo ra một chức năng cho nó.

1
OP sử dụng Bảng tính Google.
Jacob Jan Tuinstra

+1 vì công thức thú vị, tuy nhiên tôi nghĩ sử dụng điều này có lẽ không thực tế.
Nick Bolton


-1

Google Developers cung cấp một tập lệnh rất mạnh mẽ cho các chức năng liên quan đến bản đồ trong Google Sheets mà tôi đã sử dụng và thực sự rất thích. Hướng dẫn đầy đủ là trên trang web là tốt.


1
Bạn có thể tóm tắt một số điểm chính của "hướng dẫn đầy đủ" không? Câu trả lời phải độc lập và không phụ thuộc vào các nguồn bên ngoài (mặc dù tôi nhận thấy ít có khả năng trang web Google sẽ biến mất). Cảm ơn!
jonsca

-2

Tôi không đủ quen thuộc với các API để cho bạn biết chính xác cách thực hiện việc này, nhưng tôi nghĩ sẽ có thể sử dụng API Google Maps .

Google Maps, tất nhiên, có thể cung cấp chỉ đường từ điểm này đến điểm khác thông qua API của họ. Sẽ rất phức tạp, nhưng có thể định tuyến các vị trí từ bảng tính thông qua API và nhận chỉ đường lái xe, điều này sẽ cho bạn khoảng cách lái xe giữa các thành phố.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.