2011-08-08 6 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/

あなたは本当にあなたがPHP

//これで動作するようにしたくない場合は、郵便番号 ダブル緯度= Double.parseDouble(に対してデータベースを照会することによって取得する場合は、Javaでの計算であります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

ありがとうございます。私は詳細をチェックします – vsingh

+0

Ipinfodbは私に訪問者の郵便番号を与えます。それは半径を与えません。 geonamesは半径を与えますが、完全ではありません。半径内のデータを取得するオプションをまだ探しています – vsingh

関連する問題