0

この情報を提供するWebサービスがあることは知っていますが、1日あたりのリクエストに制限することができます。郵便番号が必要なレコードが約114,000あります。私はそこにlatとlongsを持つ郵便番号でいっぱいのデータベースを持っています。ただし、郵便番号latandlongに対して指定されたlatandlongを計算する方法がわかりません。

基本的に、指定されたアドレスlat and longを、提供された郵便番号latandlongと相互参照する必要があります。PHP、Java、MySQLプロシージャ、または単なる計算のいずれかを使用できます。

4

2 に答える 2

1

私はあなたに足がかりを与えることができますが、この場合はそれについてです。

$distance = 10;
$latitude = 37.295092;
$longitude = -121.896490;

$sql = "SELECT loc.*, (((acos(sin(($latitude*pi()/180)) * sin((`latitude`*pi()/180))+cos(($latitude*pi()/180)) * cos((`latitude`*pi()/180)) * cos((($longitude - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` FROM table_with_lonlat_ref loc HAVING distance < $distance"

所有している2つのテーブル間でJOINを実行し、距離を1または2に減らすクエリを作成すると、概念的には、必要なほぼすべての緯度と経度の組み合わせを思い付くことができます。または、米国のすべての郵便番号があり、緯度/経度もあるDBを見つけて、一致した郵便番号に基づいて1つのテーブルをクエリして別のテーブルに挿入することもできます。私はどこかにそのような郵便番号DBを持っています。

また、 http://www.maxmind.com/app/geoliteを提案するかもしれませんが、それはあなたがそれを支払うことを望んでいるよりも決して完全ではなく、それは頻繁に変更されます。これにより、訪問者のIPに基づいて参照ポイントとして使用できるほぼすべての緯度/経度の組み合わせを取得できます(IPが1つまたは2つの町のハブから蒸気を発する可能性があるため、場合によっては少しずれます。しかし、何もないよりはましで、サーバーが処理できる制限のみを提供し、maxmindの使用条件以外のAPI制限について心配する必要はありません。

とにかく、全体として、私はこの組み合わせをしばらくの間多くのサイトで使用してきましたが、これまで多くの問題を考え出すことはまだありません。私はあなたの質問に対する直接の答えではないことを知っていますが、それがあなたを解決策に導くことを願っています

于 2012-07-25T02:05:47.017 に答える
0

すでにlatsとlongsのデータベースがあるので、(latA、lonA)から(latB、lonB)までの長方形の領域のセットを記述し、それぞれに郵便番号が関連付けられていると仮定します。また、これらの4つのフィールドにインデックスを付けたと仮定(または推奨)します。

クエリは、座標(coordA、coordB)がその長方形を表す2つの範囲内に収まるかどうかをかなり簡単に一致させることができます。

update coords set zip_code=(
  select zip_code from zip_codes 
  where coords.coordA >= zip_codes.latA 
    and coords.coordA <= zip_codes.latB
    and coords.coordB >= zip_codes.lonA
    and coords.coordB <= zip_codes.lonB
    limit 1
)

Caviat:郵便番号データベースでlatA<latBおよびlonA<lonBであるかどうかを確認し、両方のテーブルで同じ座標系を使用していることを確認する必要があります。変換または演算子を適切に変更することにより、調整が必要になる場合があります。

于 2012-07-25T05:14:26.550 に答える