2011-09-15 46 views
9

Yêu cầu của tôi tương tự như this question, ngoại trừ việc tôi bị cấm sử dụng các giá trị vĩ độ và kinh độ. Tôi muốn caluclate số "đi bộ" khoảng cách giữa hai mã zip. Sau đó tôi cũng sẽ yêu cầu truy vấn "ai nằm trong phạm vi X km?"Cách tìm khoảng cách giữa hai Mã Zip bằng cách sử dụng Mã Java?

Tôi không chắc liệu nó có thể đạt được hay không. Có thực sự có thể tìm thấy khoảng cách giữa hai mã zip nhất định không? Tôi không muốn câu trả lời chỉ hoạt động đối với mã zip của Hoa Kỳ/Vương quốc Anh. Tôi cần một giải pháp chung mà sẽ làm việc cho bất kỳ hai zipcodes của thế giới.

Nếu tính toán khoảng cách mà không sử dụng Langitude & kinh độ là không thể so với tôi có thể nhận được giá trị Kinh độ/kinh độ của một mã ZIP đã cho không? (tuyệt vời) nhưng thế nào?

Bất kỳ hướng dẫn/ví dụ nào sẽ giúp ích rất nhiều ... Vì tôi đang làm việc trên một dự án thương mại, không thể sử dụng Google Maps API. Vì vậy, vui lòng không đề xuất bất kỳ dịch vụ được cấp phép nào khác.

Cảm ơn trước,

CẬP NHẬT một trong những câu trả lời của this question cho thấy việc sử dụng các MySQL hoặc Postgress ... Sẽ rằng công việc cho tôi ..?

+3

Bạn nói rằng bạn không muốn làm việc với các giá trị Lat/Lon, nhưng sẽ dễ dàng hơn nếu bạn sử dụng các giá trị đó trước đây, mã hóa nó hoặc một thứ gì đó, và sau đó thực hiện toán học với điều đó. (Đó là toán đơn giản để có khoảng cách từ Lat/Lon) – LouwHopley

+4

Nghệ sĩ thân mến bạn đang bị ảo tưởng rằng có thể là mã bưu điện địa phương cho các quốc gia và tiểu bang và không phải là ranh giới địa chất. Bạn chỉ có thể triển khai địa phương này ngay cả khi chính quyền địa phương \ council \ postoffice của bạn có bất kỳ thông tin nào như vậy. Khác hơn là xin lỗi để nói không có nghệ sĩ có thể vẽ hình ảnh này. – Shahzeb

+0

@Nideo hoàn toàn đúng của bạn. Và nó không phải là bắt buộc mà bạn có zipcode có sẵn cho mỗi thành phố, thị trấn, vv có thể là bạn đã không nhận được vị trí chính xác bằng mã zip – Pratik

Trả lời

4

Tôi đi theo một quá trình hai bước. ..

  1. Trước tiên, tôi đã lấy mã zip của người dùng làm đầu vào, không tìm thấy giá trị vĩ độ và kinh độ bằng cách sử dụng một trong các tiện ích miễn phí API ble,
  2. Khi tôi có vĩ độ, kinh độ cặp, tôi đã có thể dễ dàng sử dụng các chức năng được đề xuất bởi @Bohemian ...

Tuy nhiên sau khi thỉnh thoảng tôi thấy rằng google và Yahoo API là tốt nhất có thể cho IMHO này, vì vậy tôi đã tích hợp nó vào dự án của mình. Nếu bất kỳ ai quan tâm tôi có thể dán mã cho điều đó ở đây.

4

Có một US Zip-codes Database mà bạn có thể mua cung cấp cho bạn những kinh độ và vĩ độ cho mỗi zip-code. Tôi tin rằng họ cũng cung cấp cho bạn quyền truy cập vào api của họ để bạn có thể thực hiện tất cả các loại nội dung như calculate the distance between 2 zipcodes, in this case Worcester and St. Louis. Tuy nhiên bạn có thể nhận được ngay bằng cách cạo dữ liệu ra khỏi trang của mình bằng cách chỉ nhận được ứng dụng java của bạn để gọi một url như vậy:

http://www.zip-codes.com/distance_calculator.asp?zip1=63130&zip2=01610

Các đi qua DOM cho đường dây trực tiếp hoặc khoảng cách lái xe. Miễn là trang web của bạn không trở thành khối lượng lớn, bạn nên tốt để đi. Nếu trang web của bạn có khối lượng lớn thì hãy thuyết phục ban quản lý chi tiêu 40 đô la cho dữ liệu. Kể từ khi trang web sử dụng google để tính toán khoảng cách bạn sẽ có thể nhận được khoảng cách đi bộ là tốt.

Đối với yêu cầu thế giới của bạn. Cả thế giới buồn bã không sử dụng mã zip, một số người trong chúng ta sử dụng những gì được gọi là Mã bưu điện và tôi sẽ không ngạc nhiên nếu có một tên thứ ba ở đó hoặc thậm chí một thứ tư cho cùng. Có thể sử dụng cùng một giải pháp cho tất cả, tức là nhận được thái độ và thái độ và có bản đồ của Google cho bạn biết khoảng cách đi bộ. Tất cả những gì bạn cần là một cơ sở dữ liệu ánh xạ mã zip/bưu chính đến kinh độ và vĩ độ và có bản đồ google lập bản đồ trong khoảng cách đi bộ.

Nếu bạn đang tận dụng các bản đồ của Google, bạn thậm chí có thể lấy đi chỉ với tên quốc gia và mã zip.Walking distance between UK postal code and france postal code chỉ sử dụng mã bưu chính và tên quốc gia với Google Maps.

+1

@Ali ... cảm ơn nhưng tôi đã đề cập rằng tôi không muốn câu trả lời cụ thể của Hoa Kỳ/Vương quốc Anh .... – aProgrammer

+0

đã cập nhật câu trả lời. Xin lỗi tôi nhấn gửi sai lầm trước đó. – Ali

5

Chỉ cần sao chép và dán các nhận xét của tôi;)


Thưa nghệ sĩ bạn dưới một ảo tưởng rằng nó là postcodes thể là địa phương cho các nước và các quốc gia và không phân chia ranh địa chất . Bạn chỉ có thể triển khai địa phương này ngay cả khi địa phương của bạn chính quyền \ council \ postoffice có bất kỳ thông tin nào như vậy. Khác với xin lỗi để nói không có Nghệ sĩ nào có thể vẽ hình này. -

+0

Đây là một ý tưởng tồi để tự làm điều đó .. Cách tốt nhất là sử dụng API của bên thứ ba như tôi đã đề cập trong câu hỏi này http://stackoverflow.com/a/8136333/720176 – aProgrammer

15

Nếu bạn quan tâm, đây là thực hiện java của tôi về haversine formula

/** 
* Calculates the distance in km between two lat/long points 
* using the haversine formula 
*/ 
public static double haversine(
     double lat1, double lng1, double lat2, double lng2) { 
    int r = 6371; // average radius of the earth in km 
    double dLat = Math.toRadians(lat2 - lat1); 
    double dLon = Math.toRadians(lng2 - lng1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) 
     * Math.sin(dLon/2) * Math.sin(dLon/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    double d = r * c; 
    return d; 
} 

Tôi xin tặng này để các trường công lập theo GPL :)

+0

nhờ @Bohemian .... – aProgrammer

+0

+ 1 từ tôi quá do tầm quan trọng của mã này nhưng không phải những gì OP muốn giao phối :) –

Các vấn đề liên quan