рассчитать расстояние

Я проектирую базу данных по подбору персонала, и мне нужно, чтобы она выполняла несколько задач, которые все включают интеграцию способа вычисления расстояния:

1) рассчитать расстояние, на которое кандидат живет от клиента?

2) рассчитать клиентов в радиусе кандидатов, доступных для работы в любой день?

3) подсчет количества кандидатов с правильной квалификацией для вакансии в радиусе клиента.

Как вы можете видеть, мне нужно рассчитать расстояние двумя основными способами: 1) радиусом 2) по прямой линии, я бы предпочел точное расстояние, но первое подойдет. я знаю, что могу интегрировать карты Google или другие веб-карты, но я хочу, чтобы система была автономной, чтобы она могла функционировать без подключения к Интернету. система будет иметь внешний интерфейс HTML5, а внутренний - на Mysql и PHP.

спасибо Biagio

 eggyal03 мая 2012 г., 11:10
На SO уже есть сотни вопросов такого рода. Вы пытались искать?
 Rowland Shaw05 мая 2017 г., 16:24
Радиусis как ворона летит ...

Ответы на вопрос(3)

радиус фактически не является «вороной». расстояние от клиента до кандидатов? В любом случае ... вам нужно будет найти алгоритм для вычисления того, что вам нужно, исходя из расстояния между точками.

Если вы хотите, чтобы система была автономной, вам понадобятся значения координат (широта, долгота) точек. Для этого вам, вероятно, понадобится и интернет-соединение, и использование такого сервиса, как Google Maps, для поиска координат на основе адресов точек. Но как только вы сохраните в своей базе данных, вам не понадобится подключение к интернету.

Есть формула для вычисления расстояния между двумя точками на основе координат, вы легко ее найдете :)

 Biagio04 мая 2012 г., 11:21
Дорогие, все спасибо за ваши ответы, у меня есть формула, и да, часть того, что я ищу, это как мухи. (радиус) вторая часть в БД рассчитывает расстояние от клиента так, чтобы кандидаты подходили в правильном порядке. что я искал сценарий программирования для этого процесса в PHP или что-нибудь? этот сайтfreemaptools.com/map-tools.htm получил именно то, что мне нужно, но мне нужно кодирование для процесса и способ получить бесплатную карту, которую я могу вставить в БД и использовать для построения информации, какие-либо идеи?
Решение Вопроса

6371*acos(cos(LatitudeA)*cos(LatitudeB)*cos(longitudeB-longitudeA)+sin(LatitudeA)*sin(latitudeB))

Конечно, это "вороны" приближение в км.

Который можно перевести на php:

$longA     = 2.3458*(M_PI/180); // M_PI is a php constant
$latA     = 48.8608*(M_PI/180);
$longB     = 5.0356*(M_PI/180);
$latB     = 47.3225*(M_PI/180);

$subBA       = bcsub ($longB, $longA, 20);
$cosLatA     = cos($latA);
$cosLatB     = cos($latB);
$sinLatA     = sin($latA);
$sinLatB     = sin($latB);

$distance = 6371*acos($cosLatA*$cosLatB*cos($subBA)+$sinLatA*$sinLatB);
echo $distance ;

При этом вы можете вычислить расстояние между двумя точками (людьми) и, конечно, определить, находится ли точка в радиусе другой.

 03 мая 2012 г., 12:09
Что означает 6371?
 03 мая 2012 г., 13:45
Между нами земля - это не просто сфера. Но я тебя прощу. +1.
 03 мая 2012 г., 13:40
6371 - радиус Земли в км. Это среднее значение, потому что, конечно, земля не идеальная сфера. Посмотрите в Википедии для получения дополнительной информации об этом:en.wikipedia.org/wiki/Earth_radius
 03 мая 2012 г., 13:45
Смотрите мои правки об этом;)

если ваши клиенты и кандидаты живут в очень ограниченной области, я бы использовал прямоугольную карту и вводил значения x и y для всех городов в этой области в базе данных.

Благодаря теореме Пифагора, вы можете сказать:

расстояние & # XB2; = (клиент x-value - кандидат x-value) & # xB2; + (клиент y-значения - кандидат y-значения) & # xB2;

Ваш ответ на вопрос