2011-08-08 52 views
2

我有一个Java应用程序,我想知道访问者的位置。该API会给我一个访问者的邮政编码,然后基于该邮政编码,我会发现一个查询,并在25/50英里半径范围内获得我的应用程序中的用户。 或者,访问者可以键入他们感兴趣的邮政编码,应用程序应返回半径为x英里的用户。 对于在系统中注册的用户,我们只有他们的邮政编码。 我环顾了一些选项,但没有找到确切的解决方案。我不想下载邮政编码数据库并维护它们。 我不认为Google API支持这种东西。地理位置API并在半径范围内查找用户

回答

2

我找不到任何提供API的服务。经过大量研究后,我发现您必须将邮政编码及其经纬度位置下载到表格中。然后 计算您想要搜索的半径内的坐标。 这是帮助我很多的网站。 http://www.dougv.com/2009/03/27/getting-all-zip-codes-in-a-given-radius-from-a-known-point-zip-code-via-php-and-mysql/

这里是Java中的计算,如果你真的,如果你不想用PHP工作

//这个你通过查询数据库对邮政编码 双纬度= Double.parseDouble得到( zipCode.getLatitude()); Double longitude = Double.parseDouble(zipCode.getLongitude());

Double latN =Math.asin(
      Math.sin(Math.toRadians(latitude)) * Math.cos(distance/radius) + 
      Math.cos(Math.toRadians(latitude)) * Math.sin(distance/radius) * Math.cos(Math.toRadians(0))); 


    Double latS =Math.asin(
      Math.sin(Math.toRadians(latitude)) * Math.cos(distance/radius) + 
      Math.cos(Math.toRadians(latitude)) * Math.sin(distance/radius) * Math.cos(Math.toRadians(180))); 


    Double longE = Math.toRadians(longitude) + 
        Math.atan2(
          Math.sin(Math.toRadians(90)) * Math.sin(distance/radius)* Math.cos(Math.toRadians(latitude)) 
      , Math.cos(Math.toRadians(distance/radius)) - Math.sin(Math.toRadians(latitude))* Math.sin(Math.toRadians(latN))); 

    Double longW = Math.toRadians(longitude) + 
    Math.atan2(
        Math.sin(Math.toRadians(270)) * Math.sin(distance/radius)* Math.cos(Math.toRadians(latitude)) 
       , Math.cos(Math.toRadians(distance/radius)) - Math.sin(Math.toRadians(latitude))* Math.sin(Math.toRadians(latN))); 

    System.out.println("Latutude N "+Math.toDegrees(latN) +" Latitide S "+Math.toDegrees(latS) +">>> Longitude E "+Math.toDegrees(longE) +" Longitude W "+Math.toDegrees(longW)); 
+0

欲阅读更多关于计算距离的算法(以及考虑地球曲率的近似值),请阅读:http://en.wikipedia.org/wiki/Haversine_formula –

2

我不知道它有多准确,但你看看IPinfoDB?他们将返回XML和JSON结果,但您需要注册一个API密钥。它不提供任何半径,但对于附近的邮编,你可以使用类似这样的东西:http://www.geonames.org/export/web-services.html#findNearbyPostalCodes

+0

谢谢Jon。我会查看详细信息 – vsingh

+0

Ipinfodb给我的访问者的邮政编码。它不给半径。 geonames给出半径但不完整。仍然在寻找获得半径数据的选项 – vsingh

相关问题