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

Ami*_*mit 10 java web-services java-ee

我的要求与此问题类似,但我禁止使用纬度和经度值.我想计算两个拉链码之间的"行走"距离.后来我还要求查询"谁在X公里范围内?"

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

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

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

提前致谢,

更新这个问题 的答案之一建议使用MySQLPostgress ......这对我有用吗?

Boh*_*ian 15

如果你有兴趣,这是我的半实施公式的 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;
}
Run Code Online (Sandbox Code Playgroud)

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


Sha*_*zeb 5

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


亲爱的艺术家,你有一种错觉,认为邮政编码是国家和国家的本地代码,而不是地质分界.即使您的当地政府\委员会\邮局有任何此类信息,您也只能在本地实施.除了遗憾地说没有艺术家可以画这幅画. -


Ami*_*mit 4

我遵循了两步过程......

  1. 首先,我将用户的邮政编码作为输入,然后使用免费提供的 API 之一找到纬度和经度值,
  2. 一旦我得到了纬度,经度对,我就可以轻松使用@Bohemian建议的函数......

然而,有时我发现谷歌和雅虎 API 是这个恕我直言的最佳方式,所以我将其集成到我的项目中。如果有人感兴趣,我可以在这里粘贴代码。