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

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

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

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

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

提前致谢,

更新 这个问题的答案之一建议使用MySQL或Postgress ……这对我有用吗?

如果你有兴趣,这是我的hasrsine公式的 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下的公共场所:)

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


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

您可以购买美国邮政编码数据库 ,为每个邮政编码提供经度和纬度。 我相信他们也可以让你访问他们的api所以你可以做各种各样的事情,比如计算2个zipcodes之间的距离,在这个例子中是伍斯特和圣路易斯 。 但是,你可以通过让你的java应用程序调用这样的url来从页面上抓取数据来逃脱:

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

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

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

如果您正在利用Google地图,您甚至可以使用国家/地区名称和邮政编码。 英国邮政编码和法国邮政编码之间的步行距离,仅使用邮政编码和国家/地区名称与谷歌地图。

我按照两个步骤……

  1. 首先,我将用户的邮政编码作为输入,而不是使用免费提供的API之一找到纬度和经度值,
  2. 一旦我获得纬度,经度对,我就能轻松使用@Bohemian建议的function……

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

检查此post链接和谷歌地理编码和反向地理编码

使用zipcode获取经度和纬度

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