Аналітика та тестуванняCRM та платформи данихмаркетингові інструменти

Обчисліть або запитайте відстань у великому колі між точками широти та довготи за допомогою формули гаверсинуса (приклади PHP, JavaScript, Java, Python, MySQL, MSSQL)

Цього місяця я досить багато займався програмуванням PHP та MySQL по відношенню до ГІС. Шукаючи в мережі, мені було важко знайти деякі з них Географічні розрахунки щоб знайти відстань між двома місцями, тому я хотів поділитися ними тут.

Карта польотів Європа з великим колом відстані

Простий спосіб обчислення відстані між двома точками - використання формули Піфагора для обчислення гіпотенузи трикутника (A² + B² = C²). Це відомо як Евклідова відстань.

Це цікавий початок, але він не стосується географії, оскільки відстань між лініями широти та довготи не є однаковими. У міру наближення до екватора лінії широти віддаляються один від одного. Якщо ви використовуєте просте рівняння тріангуляції, воно може виміряти відстань точно в одному місці та неправильно в іншому через кривизну Землі.

Відстань великого кола

Маршрути, пройдені на великі відстані навколо Землі, відомі як відстань великого кола. Тобто…найкоротша відстань між двома точками на сфері відрізняється від точок на плоскій карті. Поєднайте це з тим фактом, що лінії широти та довготи не є рівновіддаленими… і ви отримаєте складний розрахунок.

Ось фантастичне відео-пояснення того, як працюють Великі кола.

Формула Гаверсіна

Відстань за допомогою кривизни Землі включається у формулу Гаверсинуса, яка використовує тригонометрію для врахування кривизни Землі. Коли ви знаходите відстань між двома місцями на Землі (по прямій), пряма лінія насправді є дугою.

Це стосується повітряних польотів – ви коли-небудь дивилися на реальну карту польотів і помічали, що вони дугоподібні? Це тому, що політ по арці між двома точками коротший, ніж безпосередньо до місця.

PHP: Обчисліть відстань між 2 точками широти та довготи

Ось формула PHP для розрахунку відстані між двома точками (разом із перетворенням милі в кілометр), округлена до двох знаків після коми.

function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'miles') {
  $theta = $longitude1 - $longitude2; 
  $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); 
  $distance = acos($distance); 
  $distance = rad2deg($distance); 
  $distance = $distance * 60 * 1.1515; 
  switch($unit) { 
    case 'miles': 
      break; 
    case 'kilometers' : 
      $distance = $distance * 1.609344; 
  } 
  return (round($distance,2)); 
}

Змінні:

  • $Latitude1 – змінна широти вашого першого розташування.
  • $Longitude1 – змінна для довготи вашого першого місцезнаходження
  • $Latitude2 – змінна широти вашого другого місцезнаходження.
  • $Longitude2 – змінна для довготи вашого другого місцезнаходження.
  • $одиниця – за замовчуванням миль. Це можна оновити або передати як кілометрів.

Java: обчислення відстані між 2 точками широти та довготи

public static double getDistanceBetweenPointsNew(double latitude1, double longitude1, double latitude2, double longitude2, String unit) {
    double theta = longitude1 - longitude2;
    double distance = 60 * 1.1515 * (180/Math.PI) * Math.acos(
        Math.sin(latitude1 * (Math.PI/180)) * Math.sin(latitude2 * (Math.PI/180)) + 
        Math.cos(latitude1 * (Math.PI/180)) * Math.cos(latitude2 * (Math.PI/180)) * Math.cos(theta * (Math.PI/180))
    );
    if (unit.equals("miles")) {
        return Math.round(distance, 2);
    } else if (unit.equals("kilometers")) {
        return Math.round(distance * 1.609344, 2);
    } else {
        return 0;
    }
}

Змінні:

  • широта1 – змінна широти вашого першого розташування.
  • довгота 1 – змінна для довготи вашого першого місцезнаходження
  • широта2 – змінна широти вашого другого місцезнаходження.
  • довгота 2 – змінна для довготи вашого другого місцезнаходження.
  • блок – за замовчуванням миль. Це можна оновити або передати як кілометрів.

Javascript: обчислення відстані між 2 точками широти та довготи

function getDistanceBetweenPoints(latitude1, longitude1, latitude2, longitude2, unit = 'miles') {
    let theta = longitude1 - longitude2;
    let distance = 60 * 1.1515 * (180/Math.PI) * Math.acos(
        Math.sin(latitude1 * (Math.PI/180)) * Math.sin(latitude2 * (Math.PI/180)) + 
        Math.cos(latitude1 * (Math.PI/180)) * Math.cos(latitude2 * (Math.PI/180)) * Math.cos(theta * (Math.PI/180))
    );
    if (unit == 'miles') {
        return Math.round(distance, 2);
    } else if (unit == 'kilometers') {
        return Math.round(distance * 1.609344, 2);
    }
}

Змінні:

  • широта1 – змінна широти вашого першого розташування.
  • довгота 1 – змінна для довготи вашого першого місцезнаходження
  • широта2 – змінна широти вашого другого місцезнаходження.
  • довгота 2 – змінна для довготи вашого другого місцезнаходження.
  • блок – за замовчуванням миль. Це можна оновити або передати як кілометрів.

Python: обчислити відстань між 2 точками широти та довготи

У будь-якому випадку, ось формула Python для обчислення відстані між двома точками (разом із перетворенням милі в кілометр), округлена до двох знаків після коми. Слава моєму синові, Біллу Карру, який працює в області Data Scientist OpenINSIGHTS, для коду.

from numpy import sin, cos, arccos, pi, round

def rad2deg(radians):
    degrees = radians * 180 / pi
    return degrees

def deg2rad(degrees):
    radians = degrees * pi / 180
    return radians

def getDistanceBetweenPointsNew(latitude1, longitude1, latitude2, longitude2, unit = 'miles'):
    
    theta = longitude1 - longitude2
    
    distance = 60 * 1.1515 * rad2deg(
        arccos(
            (sin(deg2rad(latitude1)) * sin(deg2rad(latitude2))) + 
            (cos(deg2rad(latitude1)) * cos(deg2rad(latitude2)) * cos(deg2rad(theta)))
        )
    )
    
    if unit == 'miles':
        return round(distance, 2)
    if unit == 'kilometers':
        return round(distance * 1.609344, 2)

Змінні:

  • широта1 – змінна для вашого першого розташування широта.
  • довгота 1 – змінна для вашого першого розташування довготи
  • широта2 – змінна для вашого другого розташування широта.
  • довгота 2 – змінна для вашого другого розташування довготи.
  • блок – за замовчуванням миль. Це можна оновити або передати як кілометрів.

MySQL: отримання всіх записів у межах діапазону шляхом обчислення відстані в милях за допомогою широти та довготи

Також можна використовувати SQL для обчислення всіх записів на певній відстані. У цьому прикладі я надсилаю запит MyTable у MySQL, щоб знайти всі записи, які менше або дорівнюють змінній $distance (у милях) до мого місцезнаходження на $latitude і $longitude:

Запит на отримання всіх записів у межах певного відстань шляхом обчислення відстані в милях між двома точками широти та довготи складають:

$query = "SELECT *, (((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` WHERE distance <= ".$distance."

Вам потрібно буде налаштувати це:

  • $ довготи - це змінна PHP, де я передаю довготу точки.
  • $ широта - це змінна PHP, де я передаю довготу точки.
  • $ відстань - це відстань, на яку ви хотіли б знайти всі записи, менші або рівні.
  • таблиця - це таблиця ... ви захочете замінити її на ім'я вашої таблиці.
  • широта - це поле вашої широти.
  • довготи - це поле вашої довготи.

MySQL: отримання всіх записів у межах діапазону шляхом обчислення відстані в кілометрах за допомогою широти та довготи

І ось запит SQL із використанням кілометрів у MySQL:

$query = "SELECT *, (((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 * 1.609344) as distance FROM `table` WHERE distance <= ".$distance."

Вам потрібно буде налаштувати це:

  • $ довготи - це змінна PHP, де я передаю довготу точки.
  • $ широта - це змінна PHP, де я передаю довготу точки.
  • $ відстань - це відстань, на яку ви хотіли б знайти всі записи, менші або рівні.
  • таблиця - це таблиця ... ви захочете замінити її на ім'я вашої таблиці.
  • широта - це поле вашої широти.
  • довготи - це поле вашої довготи.

Я використав цей код на корпоративній платформі картографування, яку ми використали для роздрібного магазину з понад 1,000 місць по всій Північній Америці, і він працював чудово.

Географічна відстань Microsoft SQL Server: STDistance

Якщо ви використовуєте Microsoft SQL Server, вони пропонують власні функції, STDistance для обчислення відстані між двома точками за допомогою типу даних Географія.

DECLARE @g geography;  
DECLARE @h geography;  
SET @g = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326);  
SET @h = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);  
SELECT @g.STDistance(@h);  

Наконечник капелюха Манашу Саху, віце-президенту та архітектору Highbridge.

Douglas Karr

Douglas Karr є засновником Martech Zone і визнаний експерт з цифрової трансформації. Дуглас допоміг створити кілька успішних стартапів MarTech, допоміг у проведенні належної перевірки понад 5 мільярдів доларів у придбанні та інвестиціях Martech, а також продовжує запускати власні платформи та послуги. Він є співзасновником Highbridge, консалтингова компанія з цифрової трансформації. Дуглас також є опублікованим автором посібника для чайників і книги про лідерство в бізнесі.

Статті по темі

78 Коментарі

  1. Дуже дякую, що поділилися. Це було легке копіювання та вставлення, і воно чудово працює. Ви заощадили мені багато часу.
    FYI для тих, хто переносить на C:
    подвійний deg2rad (подвійний град) {повернутий градус * (3.14159265358979323846 / 180.0); }

  2. Дуже гарний шматок допису - працював дуже приємно - мені довелося лише змінити назву таблиці, що тримає довжину лат. Це працює досить швидко, щоб .. У мене досить мала кількість довжин (<400), але я думаю, що це було б гарно. Хороший сайт - я щойно додав його до свого облікового запису del.icio.us і регулярно перевірятиму.

    1. Радий допомогти, рейку, друже!

      Зараз я шукаю функцію PHP у полігоні, яка буде приймати масив послідовних координат широти та довготи та з’ясувати, чи є інша точка всередині чи поза полігону.

  3. я думаю, що ваш SQL потребує наявності заяви.
    замість WHERE відстань <= $ відстань вам може знадобитися
    використовуйте HAVING distance <= $ distance

    інакше дякую, що заощадили купу купу часу та енергії.

  4. Дуже дякую, що поділилися цим кодом. Це заощадило мені багато часу на розробку. Крім того, дякую вашим читачам за те, що ви звернули увагу на те, що оператор HAVING необхідний для MySQL 5.x. Дуже корисний.

  5. Наведена вище формула економить мені багато часу. Велике спасибі.
    Мені також потрібно перемикатися між форматом NMEA та градусами. Я знайшов формулу за цією URL-адресою внизу сторінки. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html

    Хтось знає, як це перевірити?

    Дякую!
    Гаррі

  6. Я також виявив, що WHERE не працює для мене. Змінив його на HAVING, і все працює ідеально. Спочатку я не читав коментарі та переписав його за допомогою вкладеного вибору. Обидва працюватимуть чудово.

  7. Неймовірно корисно, велике спасибі! У мене були деякі проблеми з новим “HAVING”, а не “WHERE”, але одного разу, коли я прочитав тут коментарі (приблизно через півгодини розчарувавши зуби = P), я змусив це працювати гарно. Дякую ^ _ ^

  8. Майте на увазі, що вибране твердження, подібне до цього, буде дуже обчислювальним, а отже, повільним. Якщо у вас багато цих запитів, це може досить швидко завалити ситуацію.

    Набагато менш інтенсивний підхід полягає у виконанні першого (грубого) вибору з використанням області SQUARE, визначеної обчисленою відстанню, тобто «вибрати * з назви таблиці, де широта між lat1 і lat2 і довгота між lon1 і lon2». lat1 = targetlatitude – latdiff, lat2 = targetlatitude + latdiff, подібно до lon. latdiff ~= відстань / 111 (для км), або відстань / 69 для миль, оскільки 1 градус широти становить ~ 111 км (незначна зміна, оскільки земля злегка овальна, але достатньо для цієї мети). londiff = відстань / (abs(cos(deg2rad(latitude))*111)) — або 69 для миль (ви можете взяти трохи більший квадрат, щоб врахувати варіації). Потім візьміть результат і передайте його в радіальний вибір. Тільки не забудьте врахувати координати поза межами, тобто діапазон прийнятної довготи становить від -180 до +180, а діапазон прийнятної широти – від -90 до +90, якщо ваш latdiff або londiff виходить за межі цього діапазону . Зауважте, що в більшості випадків це може бути незастосовним, оскільки воно впливає лише на обчислення лінії через Тихий океан від полюса до полюса, хоча вона перетинає частину Чукотки та частину Аляски.

    Ми цим досягаємо значного зменшення кількості балів, щодо яких ви робите цей розрахунок. Якщо у вас є мільйон глобальних точок у базі даних, розподілених приблизно рівномірно і ви хочете шукати в межах 100 км, то ваш перший (швидкий) пошук займає площу 10000 кв. Км і, ймовірно, дасть близько 20 результатів (на основі рівномірного розподілу по площа близько 500 млн. кв. км), що означає, що ви виконуєте складний розрахунок відстані 20 разів для цього запиту замість мільйона разів.

      1. Чудова порада! Я справді працював із розробником, який написав функцію, яка витягувала внутрішній квадрат, а потім рекурсивну функцію, яка створювала «квадрати» по периметру, щоб включити та виключити решту точок. Результат був неймовірно швидким – він міг оцінити мільйони балів за мікросекунди.

        Мій підхід вище, безумовно, «грубий», але дієвий. Знову дякую!

        1. Дуг,

          Я намагався використовувати mysql і php, щоб оцінити, чи розташована довга точка в межах багатокутника. Чи знаєте ви, чи публікував ваш друг-розробник приклади виконання цього завдання? Або чи знаєте ви хороші приклади. Заздалегідь спасибі.

  9. Привіт усім, це мій тестовий вираз SQL:

    SELECT DISTINCT area_id, (
    (
    (
    acos( sin( ( 13.65 * pi( ) /180 ) ) * sin( (
    `lat_dec` * pi( ) /180 ) ) + cos( ( 13.65 * pi( ) /180 ) ) * cos( (
    `lat_dec` * pi( ) /180 )
    ) * cos( (
    ( 51.02 - `lon_dec` ) * pi( ) /180 )
    )
    )
    ) *180 / pi( )
    ) *60 * 1.1515 * 1.609344
    ) AS distance
    FROM `post_codes` WHERE distance <= 50

    і Mysql каже мені, що відстань не існує як стовпець, я можу використовувати порядок за, я можу зробити це без ДЕ, і це працює, але не з ним ...

  10. Це чудово, проте так само, як птахи літають. Було б чудово спробувати якось включити API Google Maps до цього (можливо, за допомогою доріг тощо), лише щоб дати ідею, використовуючи інший вид транспорту. Я ще не створив змодельовану функцію відпалу в PHP, яка могла б запропонувати ефективне рішення проблеми мандрівного продавця. Але я думаю, що, можливо, я зможу повторно використати для цього деякі ваші коди.

  11. Гарна стаття! Я знайшов багато статей, в яких описувалося, як обчислити відстань між двома точками, але я справді шукав фрагмент SQL.

  12. 2 дні досліджень, щоб нарешті знайти цю сторінку, яка вирішує мою проблему. Схоже, мені краще вибити мою WolframAlpha і розібратися з моєю математикою. Перехід від WHERE до HAVING мій сценарій справний. ДЯКУЮ

  13. Я хотів би, щоб це була перша сторінка, яку я знайшов на цьому. Спробувавши безліч різних команд, це була єдина, яка працювала належним чином і з мінімальними змінами, необхідними для власної бази даних.
    Спасибі велике!

  14. Я хотів би, щоб це була перша сторінка, яку я знайшов на цьому. Спробувавши безліч різних команд, це була єдина, яка працювала належним чином і з мінімальними змінами, необхідними для власної бази даних.
    Спасибі велике!

  15. дякую за розміщення цієї корисної статті,  
    але я чомусь хотів би запитати
    як отримати відстань між кордами всередині mysql db та кордами, вставленими користувачем у php?
    для більш чіткого опису:
    1. користувач повинен вставити [id] для вибору вказаних даних з баз даних і власних координат користувача
    2. PHP-файл отримує цільові дані (координати) за допомогою [id], а потім обчислює відстань між користувачем та цільовою точкою

    або можете просто отримати відстань від коду нижче?

    $ qry = “ВИБРАТИ *, (((acos (sin ((“. $ latitude. ”* pi () / 180)) * sin ((` Latitude` * pi () / 180)) + cos ((„. $ широта. "* pi () / 180)) * cos ((` Latitude` * pi () / 180)) * cos (((". $ longitude." - "Longitude`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) як відстань ВІД `MyTable` WHERE відстань> =". $ Distance. " >>>> чи можу я “вийняти” відстань звідси?
    знову дякую,
    Тіммі С.

  16. добре, все, що я спробував, не працює. Я маю на увазі те, що у мене працює, але відстань далеко.

    Хтось міг би побачити, що не так з цим кодом?

    if (isset ($ _ POST ['submit'])) {$ z = $ _POST ['поштовий індекс']; $ r = $ _POST ['радіус']; ехо “Результати для“. $ z; $ sql = mysql_query (“ВИБЕРИТЕ ВИЗНАЧЕНИЙ m.zipcode, m.MktName, m.LocAddSt, m.LocAddCity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1. місто, z1.state ВІД mrk m, zip z1, zip z2 ДЕ m.zipcode = z1.zipcode І z2.zipcode = $ z AND (3963 * acos (усіка (sin (z2.lat / 57.2958) * sin (m. y1 / 57.2958) + cos (z2.lat / 57.2958) * cos (m.y1 / 57.2958) * cos (m.x1 / 57.2958 - z2.lon / 57.2958), 8))) <= $ r ") або померти (mysql_error ()); while ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName']. ""; $ store = $ row ['LocAddSt']. ""; $ store. = $ row ['LocAddCity']. ",". $ row ['LocAddState']. " ". $ Row ['zipcode']; $ latitude1 = $ row ['lat']; $ longitude1 = $ row ['lon']; $ latitude2 = $ row ['y1']; $ довгота2 = $ рядок ['x1']; $ city = $ row ['city']; $ state = $ row ['state']; $ dis = getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi'); // $ dis = відстань ($ lat1, $ lon1, $ lat2, $ lon2); $ перевірено = $ рядок ['перевірено']; if ($ verify == '1') {echo “”; echo “”. $ store. ””; echo $ dis. ”Милі (милі)”; ехо “”; } else {echo “”. $ store. ””; echo $ dis. ”Милі (милі)”; ехо “”; }}}

    мої функції.php код
    функція getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi') {$ theta = $ longitude1 - $ longitude2; $ відстань = (sin (deg2rad ($ latitude1)) * * sin (deg2rad ($ latitude2))) + (cos (deg2rad ($ latitude1)) * cos (deg2rad ($ latitude2)) * cos (deg2rad ($ theta)) ); $ відстань = acos ($ відстань); $ відстань = rad2deg ($ відстань); $ відстань = $ відстань * 60 * 1.1515; перемикач ($ одиниця) {case 'Mi': break; справа 'Km': $ відстань = $ відстань * 1.609344; } return (раунд ($ відстань, 2)); }

    Заздалегідь спасибі

  17. Гей, Дуглас, чудова стаття. Я знайшов ваше пояснення географічних понять і коду справді цікавим. Єдиною моєю пропозицією було б розмістити та відступити код для відображення (наприклад, Stackoverflow). Я розумію, що ви хочете заощадити простір, але звичайний інтервал / відступ коду значно полегшить мені, програмісту, читання та розбір. У всякому разі, це дрібниця. Продовжуйте велику роботу.

  18. здається швидшим (mysql 5.9) використовувати подвійну формулу в select та де:
    $ формула = “(((acos (sin ((“. $ latitude. ”* pi () / 180)) * sin ((` Latitude` * pi () / 180)) + cos ((„. $ latitude. ”* Pi () / 180)) * cos ((` Latitude` * pi () / 180)) * cos ((((“. $ Longitude.” - `Longitude`) * pi () / 180)))) * 180 / пі ()) * 60 * 1.1515 * 1.609344) ”;
    $ sql = 'ВИБЕРІТЬ *,'. $ формула. ' як відстань від таблиці ДЕ '.. $ формула.' <= '. $ відстань;

  19. Велике спасибі за зріз цієї статті. Це дуже корисно.
    Спочатку PHP був створений як проста скриптова платформа під назвою “Персональна домашня сторінка”. В наш час PHP (скорочення від Hypertext Preprocessor) є альтернативою технології Active Server Pages (ASP) Microsoft.

    PHP - це мова з відкритим кодом на стороні сервера, яка використовується для створення динамічних веб-сторінок. Його можна вбудувати в HTML. PHP зазвичай використовується спільно з базою даних MySQL на веб-серверах Linux / UNIX. Це, мабуть, найпопулярніша мова сценаріїв.

  20. Я виявив, що вищевказане рішення не працює належним чином.
    Мені потрібно змінити на:

    $ qqq = “ВИБРАТИ *, (((acos (sin ((“. $ latitude. ”* pi () / 180)) * sin ((` latt` * pi () / 180)) + cos ((”. $ широта. "* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos (((". $ longitude." - `longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) як відстань ВІД `реєстру`“;

  21. Привіт, будь ласка, мені дійсно знадобиться ваша допомога у цьому.

    Я зробив запит на отримання свого веб-сервера
    53.47792 = широта $
    -2.23389 = довгота $
    і 20 = відстань, яку я хочу отримати

    Однак, використовуючи формулу, вона отримує всі рядки в моїй базі даних

    $results = DB::select( DB::raw(“SELECT *, (((acos(sin((“.$latitude.”)pi()/180)) * sin((латpi()/180))+cos((“.$latitude.”pi()/180)) * cos((латpi()/180)) * cos(((“.$longitude.”- lng)пі()/180))))180/pi())601.1515*1.609344) як відстань ВІД маркерів HAVING distance >= “.$distance ));

    [{"Id": 1, "name": "Frankie Johnnie & Luigo Too", "address": "939 W El Camino Real, Mountain View, CA", "lat": 37.386337280273, "lng": - 122.08582305908, ”Distance”: 16079.294719663}, {“id”: 2, “name”: ”Піцерія на східному узбережжі Амічі”, “address”: ”790 Castro St, Mountain View, CA”, “lat”: 37.387138366699, “lng”: -122.08323669434, "відстань": 16079.175940152}, {"id": 3, "name": "Pizza Bar & Grill Kapp's", "address": "191 Castro St, Mountain View, CA", "lat": 37.393886566162, ”Lng”: - 122.07891845703, “відстань”: 16078.381373826}, {“id”: 4, “name”: ”Піца круглого столу: Маунтін-В’ю”, “адреса”: ”570 N Shoreline Blvd, Mountain View, CA”, ”Lat”: 37.402652740479, “lng”: - 122.07935333252, “distance”: 16077.420540582}, {“id”: 5, “name”: ”Піца та паста Тоні і Альби”, “address”: ”619 Escuela Ave, Mountain Вид, Каліфорнія ”,” lat ”: 37.394012451172,“ lng ”: - 122.09552764893,“ distance ”: 16078.563225154}, {“ id ”: 6,“ name ”:” Піца з дерев’яною пічкою ”,“ address ”:” 4546 El Camino Real, Лос-Альтос, Каліфорнія ”,” lat ”: 37.401725769043,“ lng ”: - 122.11464691162,“ distance ”: 16077.937560795}, {“ id ”: 7,” name ”:“ Бари та грилі ”,“ address ”:” 24 Whiteley Street, Manchester ”,“ lat ”: 53.485118865967,“ lng ”: - 2.1828699111938,“ distance ”: 8038.7620112314}]

    Я хочу отримати лише рядки з 20 милями, але це приносить всі рядки. Будь ласка, що я роблю не так

  22. Я шукаю подібний запит, але трохи збільшився - коротше, це згрупувати всі координати в радіусі 2 милі від кожної координати, а потім порахувати, скільки координат у кожній групі, і вивести лише одну групу, яка має найбільшу кількість координат - навіть якщо у вас є більше однієї групи серед груп, які мають найбільшу кількість координат - просто виведіть випадкову групу з груп з однаковим найбільшим числом -

Що ви думаєте?

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.