【问题标题】:Geo Location API and finding user within a radius地理位置 API 和在半径内查找用户
【发布时间】:2011-10-22 01:59:10
【问题描述】:

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

【问题讨论】:

    标签: java geolocation


    【解决方案1】:

    我不知道它有多准确,但你看过IPinfoDB吗?它们将返回 XML 和 JSON 结果,但您需要注册 API 密钥。虽然它没有提供任何半径,但对于附近的邮政编码,您可以使用如下内容:http://www.geonames.org/export/web-services.html#findNearbyPostalCodes

    【讨论】:

    • 谢谢乔恩。我去看看详情
    • Ipinfodb 给了我访客的邮政编码。它没有给出半径。 geonames 给出了半径但不完整。仍在寻找获取半径范围内数据的选项
    【解决方案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/

    如果你真的不想使用 php,这里是 java 中的计算

    //这可以通过根据邮政编码查询数据库来获得 双纬度 = Double.parseDouble(zipCode.getLatitude()); 双经度 = 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));
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2011-12-28
    • 2017-12-31
    相关资源
    最近更新 更多