2011-07-07 15 views
5

Tôi có một bảng tính địa chỉ và tôi cần tính toán khoảng cách giữa tất cả các mã zip và mã zip của tôi. Tôi khá linh hoạt trên phương pháp được sử dụng, nhưng tôi hy vọng cho một số loại thuật toán webservice hoặc toán học. Chỉ địa chỉ ở Hoa Kỳ. Về cơ bản tôi cần phải ăn trong 2 mã zip và nhận ra khoảng cách giữa chúng.Máy tính khoảng cách mã zip

Tôi sẵn sàng sử dụng công thức Excel hoặc VBA và thậm chí tôi có thể mã hóa một số thứ trong C# .net nếu cần.

Bạn sẽ tính toán khoảng cách như thế nào?

+1

bạn đã xem xét bản đồ google api? –

+0

@Amir Raminfar -Khi cuối cùng tôi nhìn vào bản đồ Google api, giới hạn là bất kỳ thông tin nào được truy xuất phải được hiển thị trên bản đồ để đáp ứng các yêu cầu về liscence. Tôi không muốn hiển thị trên bản đồ. – MAW74656

Trả lời

2

Nó thực sự khá đơn giản. Tải xuống cơ sở dữ liệu các tọa độ GPS của mã zip, có rất nhiều trang web có sẵn dữ liệu này để tải xuống. Họ sẽ liệt kê các tọa độ cho trung tâm của mã zip.

Sử dụng một công thức để tính toán khoảng cách ngắn nhất: (ví dụ: http://www.movable-type.co.uk/scripts/latlong.html)

3

Bạn có thể sử dụng Latitude và Longitude.

Excel:

=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))) 

VB.net nhập khẩu System.Math

Private Function Distance(ByVal lat1 As Double, ByVal lon1 As Double, ByVal lat2 As Double, ByVal lon2 As Double, ByVal unit As String) As Double 
     Dim theta As Double = lon1 - lon2 
     Dim dist = System.Math.Sin(deg2rad(lat1)) * System.Math.Sin(deg2rad(lat2)) + System.Math.Cos(deg2rad(lat1)) * System.Math.Cos(deg2rad(lat2)) * System.Math.Cos(deg2rad(theta)) 
     dist = System.Math.Acos(dist) 
     dist = rad2deg(dist) 
     dist = dist * 60 * 1.1515 
     Select Case unit 
      Case "K" 
       dist = dist * 1.609344 
      Case "N" 
       dist = dist * 0.8684 
     End Select 

     Return dist 

    End Function 

Liên kết hữu ích khác (một đầu tiên cũng đề cập đến giải pháp thay thế VBA)

ExcelLatLong (Cũng đề cập đến giải pháp thay thế VBA)

Zips by Lat Long Lookup

VBA discussion

EDIT: Link bổ sung do bình luận thảo luận

More Info(Excel Formula)

+0

Bạn có muốn giải thích logic đằng sau công thức Excel của mình không? Tôi không thấy nó khớp với công thức trên trang web của Chip Pearson mà bạn liên kết đến. Ngoài ra điều này giả định một hình cầu Trái đất hơn là một ellipsoid thực tế hơn, nhưng tôi đoán nó hoàn toàn tốt cho ứng dụng này, vì sự không chắc chắn sẽ nhỏ hơn nhiều so với kích thước của mã zip ... ngoại trừ các thành phố lớn nhỏ gọn các khu vực có thể khá nhỏ. Có lẽ tôi đang quá hậu môn. –

+0

@ Jean-Francois Corbett Excels cần phải được chuyển đổi sang Radian (tôi sẽ cung cấp một liên kết khác trong câu trả lời của tôi). Tôi không có ý định phá vỡ nó, và không nghĩ như bạn khi tôi viết nó. Nhưng bạn làm cho một điểm tốt. Tôi đoán nó phụ thuộc vào chính xác như thế nào anh ta sẽ muốn nó được. Đó là lý do tại sao tôi liên kết anh ta với một lựa chọn khác. – sealz