0

私がやりたいのは、ユーザーのIPアドレスを取得して、固定された場所からおよそ何マイル離れているかを識別できるようにすることです。サービスやデータベースを使用することで、都市と郵便番号を見つけることができることに気付きましたが、ユーザーのZIPと私のZIPの間のおおよその距離も知りたいと思います。

ユーザーのIPからZip/City/Countryを取得するためのサービスとデータベースを見てきました。また、いくつかのPHPクラスを使用して、ある郵便番号から別の郵便番号までの距離を取得しました。仮に、一方のデータベースを使用してzipを取得し、もう一方のデータベースを使用して2つのzip間の距離を比較することもできますが、これは非常にリソースを消費するようです(少なくとも2つのクエリと処理)。

ユーザーが100マイル(IPに基づく)以内にいる場合は、美術館の展示会の広告を表示したいだけです。そうでなければ、彼らが遠すぎるように思われるので、私はそれを示すつもりはありません。

これを達成するためのより簡単な方法はありますか?

また、新しいHTML5のものを使用して、アプリケーションでジオロケーションを使用できるかどうかをブラウザがユーザーに尋ねないようにします。むしろ、それを使用する圧倒的な理由がない限り、これはすべて、ロケーションベースの認識(およびユーザーのオプトイン)なしで舞台裏で行われることを望んでいます。

私はどんな解決策にもオープンですが、PHP / MYSQL / jQuery/Javascriptレルムでそれを見つけることを望んでいます。

ありがとう

4

3 に答える 3

3

私の会社が使用している郵便番号サービスというサービスがあります。https://www.zipcodeservices.comにあります。それはあなたがあなたの質問で強調したすべてをします。

  1. あなたは2つの郵便番号の間の距離を得ることができます。

  2. IPアドレスと半径の整数を渡すことができます。これにより、そのIPアドレスの半径内のすべての郵便番号が提供されます。

私たちは実際に郵便番号サービスのIPアドレスと郵便番号サービスを使用して、地理的に配置された広告をWebサイトの閲覧者に表示しています。

すばらしいのは、すべてサービスベース(Rest / JSON、XML、またはSOAP-選択してください)であり、かなり安価でもあります-月額15ドル程度です。

于 2012-10-26T18:54:51.837 に答える
1

You could use something like http://www.geoiptool.com/ or other similar service (even one of the Google APIs).

Then as it provides lat/long coords, just map the distance to your own using the following function. Be careful though - some lat/long coords for IP addresses are way off target and won't correlate for mobiles/cells at all. IP's don't roam well:

function distance($lat1, $lng1, $lat2, $lng2, $miles = true)
{
        $pi80 = M_PI / 180;
        $lat1 *= $pi80;
        $lng1 *= $pi80;
        $lat2 *= $pi80;
        $lng2 *= $pi80;

        $r = 6372.797; // mean radius of Earth in km
        $dlat = $lat2 - $lat1;
        $dlng = $lng2 - $lng1;
        $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
        $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
        $km = $r * $c;

        return ($miles ? ($km * 0.621371192) : $km);
}

Hope this helps.

于 2012-10-25T21:20:48.653 に答える
1

解決すべき2つの問題があります。(1)ユーザーの緯度/経度を取得することと(2)距離を計算することです。(2)の場合、半正矢関数を使用します。

http://www.movable-type.co.uk/scripts/latlong.html

a = sin²(Δφ/2) + cos(φ1).cos(φ2).sin²(Δλ/2)
c = 2.atan2(√a, √(1−a))
d = R.c
where   φ is latitude, λ is longitude, R is earth’s radius (mean radius = 6,371km)
note that angles need to be in radians to pass to trig functions!
于 2012-10-25T21:21:39.743 に答える