aralık + Pisagor teoremi ile sonuçları seçerek

2 Cevap php

i içerir uk insanlar için bir mysql tablo var:

  • posta kodu başlangıcı (yani BB2)
  • enlem (int)
  • boylam (int)
  • aralığı (int, mili, 1-20)

http://www.easypeasy.com/gukimlikes/article.php?article=64 - Ben benim tabloya dayalı sql dosyası için yazı gkimlikecekseniz

şimdi ben enlem ve boylam dayalı mesafeleri hesaplamak için Pisagor teoremini kullanabilirsiniz diyor.

öylesine i aramak bir posta kodu başında (bunlar aralık alanına girmek 1-20 dayanarak) aralığında olan tüm insanları seçmek istedim Diyelim

Örneğin, ben kimin posta kodu başlangıcı "BB2" olan tüm insanların seçecek bir sorgu istiyorum, "Bb2" için arama VE Bb2 menzilinde olan tüm insanların (içinde 1-20 kilometre aralığı gkimlikerek Diyelim ki onların veritabanı alan).

Bazı matematik usta bana yardımcı olabilir?

2 Cevap

Kod PERL ama sen mantığı anlamaya olabilir - Google this saptandı.

Formula and code for calculating distance based on two lat/lon locations

The following is the formula I use in perl to do the calculations. Perl expects all of the angles to be in radians.

return &acos(cos($a1)*cos($b1)*cos($a2)*cos($b2) + cos($a1)*sin($b1)*cos($a2)*sin($b2) + sin($a1)*sin($a2)) * $r;


Where:

$a1 = lat1 in radians
$b1 = lon1 in radians
$a2 = lat2 in radians
$b2 = lon2 in radians
$r = radius of the earth in whatever units you want

The values I use for radius of the earth are:

3963.1 statute miles 3443.9 nautical miles 6378 km

To convert the decimal degrees to radians use the following perl.

# define an accurate value for PI

$pi = atan2(1,1) * 4;

#
# make sure the sign of the angle is correct for the direction
# West an South are negative angles
#

$degrees = $degrees * -1 if $direction =~ /[WwSs]/;
$radians = $degrees*($pi/180);

To convert degree minutes and seconds to decimal degrees use the following perl formula.

$dec_deg = $deg + ($min + $sec/60)/60;

Finally, there is no acos function in perl so here is the function I use. I don't remember where I got the math for this.

# subroutine acos
#
# input: an angle in radians
#
# output: returns the arc cosine of the angle
#
# description: this is needed because perl does not provide an arc cosine function
sub acos {
    my($x) = @_;
    my $ret = atan2(sqrt(1 - $x**2), $x);        return $ret;
}

Eğer x üzerinde mesafeler matrahının hesaplanması diyor hayır, y (Pisagor teoremini kullanarak) değil boylam-enlem koordinatları.

2 puan (x1, y1) ve arasındaki mesafeyi hesaplamak için (X2, y2):

d = SquareRoot((x2-x1)^2 + (y2-y1)^2)

boylam-enlem kullanarak, burada görebilirsiniz: Calculate distance, bearing and more between two Latitude/Longitude points