如何使用Java代码找到两个ZipCodes之间的距离?

时间:2011-09-15 06:26:54

标签: java web-services java-ee

我的要求与this question相似,但我禁止使用纬度和经度值。我想计算两个zipcodes之间的“行走”距离。后来我还要求查询“谁在X公里范围内?”

我不确定它是否可以实现。是否真的可以找到两个给定的拉链码之间的距离? 我不希望这些答案仅适用于美国/英国邮政编码。我需要一个适用于世界上任何两个邮政编码的通用解决方案。

如果计算距离而不使用Langitude&经度是不可能的,那么我可以获得给定ZIPCODE的经度/经度值吗? (太棒了)但是如何?

任何教程/示例都会有很大的帮助。由于我正在开展商业项目,因此无法使用Google Maps API。所以请不要建议任何其他许可服务。

提前致谢,

更新 this question的答案之一建议使用MySQLPostgress ...这对我有用吗?

5 个答案:

答案 0 :(得分:15)

如果您有兴趣,这是我对haversine formula

的java实现
/**
 * 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;
}

我特此将此捐赠给GPL下的公共场所:)

答案 1 :(得分:5)

只需复制并粘贴我的评论;)


  

亲爱的艺术家,你有一种错觉,认为它可能是邮政编码   是国家和州的当地人,不是地质分界线   。你只能在本地实现这个,即使是你的本地   政府\议会\邮局有任何此类信息。以外   很抱歉,没有艺术家可以画这幅画。 -

答案 2 :(得分:4)

您可以购买US Zip-codes Database,为每个邮政编码提供经度和纬度。我相信他们也可以让你访问他们的api所以你可以做各种各样的事情,比如calculate the distance between 2 zipcodes, in this case Worcester and St. Louis。但是,你可以通过让你的java应用程序调用这样的URL来从页面上抓取数据来逃脱:

  

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

遍历DOM 直线行驶距离。只要您的网站没有成为高容量,您就应该好好去。如果您的网站数量很大,那么说服管理层花费40美元购买数据。由于网站使用谷歌计算距离,你应该能够步行距离

符合您的世界要求。整个世界遗憾地不使用邮政编码,我们中的一些人使用所谓的邮政编码,如果有第三个名称甚至第四个名称,我也不会感到惊讶。它可能可以为所有人使用相同的解决方案,即获得逻辑和纬度,并让谷歌地图告诉你步行距离。您只需要一个数据库,将邮政编码和邮政编码映射到经度和纬度,并让谷歌地图绘制出步行距离。

如果您正在利用Google地图,您甚至可以使用国家/地区名称和邮政编码。 Walking distance between UK postal code and france postal code仅使用Google地图中的邮政编码和国家/地区名称。

答案 3 :(得分:4)

我遵循了两个步骤...

  1. 首先,我将用户的邮政编码作为输入,而不是使用免费提供的API之一找到纬度和经度值,
  2. 一旦我获得纬度,经度对,我就可以轻松使用@Bohemian建议的功能......
  3. 然而,有时我发现谷歌和雅虎API是这个恕我直言的最佳方式,所以我将其整合到我的项目中。如果有兴趣我可以在这里粘贴代码。

答案 4 :(得分:2)

检查此帖子链接和Google地理编码和反向地理编码

get latitude and longitude using zipcode

http://code.google.com/apis/maps/documentation/geocoding/