выбор результатов с помощью диапазона + теорема Пифагора - PullRequest
0 голосов
/ 08 октября 2009

У меня есть таблица MySQL для Великобритании, которая включает в себя:

  • начало почтового индекса (т.е. BB2)
  • широта (int)
  • долгота (int)
  • дальность (int, в милях, 1-20)

http://www.easypeasy.com/guides/article.php?article=64 - есть статья для файла sql, в которой я основал свою таблицу на

теперь говорится, что я могу использовать теорему Пифагора для вычисления расстояний на основе долготы и широты.

Допустим, я хотел выбрать всех людей, которые находятся в диапазоне (на основе 1-20, которые они вводят в поле диапазона) из почтового индекса, начинающегося с поиска

например, скажем, я ищу «BB2», я хочу запрос, который выберет всех людей, чей почтовый индекс начинается с «BB2», И всех людей в пределах диапазона BB2 (с шагом 1-20 диапазон в поле их базы данных).

Может ли какой-нибудь математик помочь мне?

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Google показал это - код в PERL, но вы можете понять логику.

Формула и код для расчета расстояния на основе двух широт / долгот

Ниже приведена формула, которую я использую в Perl для расчетов. Perl ожидает, что все углы будут в радиан.

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

Значения, которые я использую для радиуса земля:

3963,1 статутных миль 3443,9 морских миль 6378 км

Чтобы преобразовать десятичные градусы в радианы используют следующий 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);

Для преобразования градусов в минуты и секунды в десятичных градусах используйте следующее формула perl.

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

Наконец, в ACOS нет функции Perl так вот функция, которую я использую. я не помню, где я взял математику для этого.

# 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;
}
0 голосов
/ 08 октября 2009

нет, это говорит о том, что вы можете рассчитывать расстояния на основе координат x, y, а не долготы-широты (используя теорему Пифагора).

для расчета расстояния между 2 точками (x1, y1) & (x2, y2):

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

используя долготу-широту, вы можете увидеть здесь: Рассчитать расстояние, направление и многое другое между двумя точками широты / долготы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...