私はここで多くの計算といくつかのphpの例を見つけましたが、ほとんどは私の頭の中にあります.
私はこの例を見つけました:
SELECT b.zip_code, b.state,
(3956 * (2 * ASIN(SQRT(
POWER(SIN(((a.lat-b.lat)*0.017453293)/2),2) +
COS(a.lat*0.017453293) *
COS(b.lat*0.017453293) *
POWER(SIN(((a.lng-b.lng)*0.017453293)/2),2))))) AS distance
FROM zips a, zips b
WHERE
a.zip_code = '90210' ## I would use the users submitted value
GROUP BY distance
having distance <= 5; ## I would use the users submitted value
しかし、データベースでクエリを実装する方法がわかりません。
そのクエリには必要なものがすべて揃っているようです。
ただし、 b.zip_code が実際に何であるかを見つけることも理解することもできません! (b.
とはzips a, zips b
何ですか?)
state
クエリに も必要ありません。
私のmySQL db構造は次のようなものです:
ZIP | LAT | LONG
33416 | 26.6654 | -80.0929
ある種の結果 (上記のクエリに基づくものではない) を返すためにこれを書きましたが、1 つの郵便番号しか除外されません。
## Just for a test BUT, in reality I desire to SELECT a zip code WHERE ZIP = the users submitted zip code
## not by a submitted lat lon. I left off the $connect var, assume it's there.
my $set1 = (26.6654 - 0.20);
my $set2 = (26.6654 + 0.20);
my $set3 = (-80.0929 - 0.143);
my $set4 = (-80.0929 + 0.143);
my $test123 = $connect->prepare(qq{SELECT `ZIP` FROM `POSTAL`
WHERE `LAT` >= ? AND `LAT` <= ?
AND `LONG` >= ? AND `LONG` <= ?}) or die "$DBI::errstr";
$test123->execute("$set1","$set2","$set3","$set4") or die "$DBI::errstr";
my $cntr;
while(@zip = $test123->fetchrow_array()) {
print qq~$zip[$cntr]~;
push(@zips,$zip[$cntr]);
$cntr++;
}
ご覧のとおり、私はかなりの初心者なので、ここで詳細な説明を行う必要があります。
したがって、Perl では、USER SUBMITTED ZIP CODE とユーザーがマイルで送信した DISTANCE から郵便番号を配列にプッシュするにはどうすればよいでしょうか。円の代わりに四角形にすることもできますが、機能にとってそれほど重要ではありません。速いほど良いです。