Получение пользователями браузеров геолокации значений lat lng и поиск ближайшего lat lng в базе данных mysql? [Дубликат]

class A 
{ 
    int x; 
};  

class B 
{ 
    B( ) : x(1), c('a') { } 
    int x; 
    char c; 
};  

int main( ) 
{ 
    A a; 
    B b; 
    a = b;     // b.c == 'a' is "sliced" off
    return 0; 
}
29
задан Andrew Hall 30 August 2013 в 10:13
поделиться

7 ответов

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

Это лучший запрос

18
ответ дан Nightfirecat 22 August 2018 в 00:30
поделиться
  • 1
    расстояние 25 здесь в милях ?? – Sripaul 2 December 2012 в 19:37
  • 2
    Да. 3959 - Мили, 6371 - Километры – Paulius Vindzigelskis 6 August 2013 в 12:40
  • 3
    @ Кришна Карки, это вернет lat и lon, если я включу его в функцию? – The_Martian 7 September 2015 в 21:49
  • 4
    Расстояние от места? – MarceloBarbosa 7 February 2016 в 22:44
  • 5
    можете ли вы рассказать нам, если эта работа прекрасна для тысяч записей. спасибо – usama 10 August 2017 в 20:15

Чтобы найти ближайшее место, вы можете использовать класс геокодирования. Поскольку у вас есть Геопотоки (широта и долгота), можно использовать обратное геокодирование. Обратное геокодирование - это процесс преобразования координаты (широты, долготы) в (частичный) адрес. Для получения дополнительной информации см. этот .

3
ответ дан Ankit Saxena 22 August 2018 в 00:30
поделиться
SELECT latitude, longitude, SQRT(
    POW(69.1 * (latitude - [startlat]), 2) +
    POW(69.1 * ([startlng] - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM TableName HAVING distance < 25 ORDER BY distance;

, где [starlat] и [startlng] - это позиция, в которой начать измерять расстояние, а 25 - расстояние в км.

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

0
ответ дан Himanshu Upadhyay 22 August 2018 в 00:30
поделиться

Когда метод должен выполнить, лучше сначала фильтровать по широте и долготе, а затем вычислить квадратное расстояние, приближенное. Для стран Северной Европы он будет составлять около 0,3 процента в пределах 1000 км.

Таким образом, вместо вычисления на расстоянии:

dist_Sphere = r_earth * acos ( sin (lat1) * sin (lat2) + cos(lat1)*cos(lat2)*cos(lon 2 - lon 1)

можно вычислить приблизительное значение (предположим, что lat = lat 1 близок к lat 2) как

const cLat2 = cos lat ^ 2
const r_earth2 = r_earth ^ 2
dist_App ^2 = r_earth2 * ((lat 2 - lat 1) ^2 + clat2 *(lon 2 - lon 1) ^2)

Order by Dist_App 2, а затем просто вытащите квадратный корень из результата.

0
ответ дан Jesper Kleis 22 August 2018 в 00:30
поделиться
sesach : ( 3959 * acos( cos( radians('.$_REQUEST['latitude'].') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('.$_REQUEST['longitude'].') ) + sin( radians('.$_REQUEST['latitude'].') ) * sin( radians( latitude ) ) ) ) <='.$_REQUEST['mile'];
0
ответ дан Nilesh Prajapati 22 August 2018 в 00:30
поделиться

Поиск местоположений рядом с MySQL

Вот оператор SQL, который найдет ближайшие 20 местоположений, находящихся в радиусе 25 миль от координаты 37, -122. Он вычисляет расстояние, основанное на широте / долготе этой строки и целевой широте / долготе, а затем запрашивает только строки, где значение расстояния меньше 25, заказывает весь запрос по расстоянию и ограничивает его до 20 результатов. Чтобы выполнить поиск по километрам вместо миль, замените 3959 на 6371.

Структура таблицы:

id,name,address,lat,lng

ПРИМЕЧАНИЕ. Здесь широта = 37 & amp; долгота = -122. Итак, вы просто передаете свои собственные.

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * 
cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * 
sin( radians( lat ) ) ) ) AS distance FROM your_table_name HAVING
distance < 25 ORDER BY distance LIMIT 0 , 20;

Здесь вы можете найти подробности здесь .

72
ответ дан Pang 22 August 2018 в 00:30
поделиться
  • 1
    Также пройдите этот. Это объясняет все красиво. developers.google.com/maps/articles/phpsqlsearch – Scorpion 20 June 2012 в 05:54
  • 2
    Большое вам спасибо за запрос. Мне нужно найти ближайшее место из Сурхета, ширина которого составляет 28,6, а долгота - 81,6. Как включить этот пункт в этот запрос .. Пожалуйста, предложите мне .. :) – Krishna Karki 20 June 2012 в 06:06
  • 3
    См. Примечание. Я отредактировал свой ответ. Вам нужно передать свой лат и amp; lng вместо 37 & amp; -122, – Scorpion 20 June 2012 в 06:15
  • 4
    Это работает для вас? И также имейте в виду, что я использовал 3959, он будет искать мили. Если вы хотите выполнить поиск по km, измените его на 6371. – Scorpion 20 June 2012 в 06:41
  • 5
    SELECT address, lng, SQRT (POW (69.1 * (lat -21.0486), 2) + POW (69.1 * (76.5344 - lng) * COS (lat / 57.3), 2)) AS distance FROM partner_locations HAVING distance & lt; 25000 ORDER BY distance Я нашел этот запрос .. Он работает нормально .. Но я не уверен в расстоянии единицы .. это километр или мили ... Можете ли вы предложить мне, пожалуйста – Krishna Karki 20 June 2012 в 08:16

У SQL проблемы. В таблице, подобной:

`ubicacion` (
  `id_ubicacion` INT(10) NOT NULL AUTO_INCREMENT ,
  `latitud` DOUBLE NOT NULL ,
  `longitud` DOUBLE NOT NULL ,
  PRIMARY KEY (`id_ubicacion`) )

Изменение id_ubicacion при использовании:

SELECT  `id_ubicacion` , ( 3959 * ACOS( COS( RADIANS( 9.053933 ) ) * COS( RADIANS( latitud ) ) * COS( RADIANS( longitud ) - RADIANS( - 79.421215 ) ) + SIN( RADIANS( 9.053933 ) ) * SIN( RADIANS( latitud ) ) ) ) AS distance
FROM ubicacion
HAVING distance <25
ORDER BY distance
LIMIT 0 , 20
0
ответ дан user2142645 22 August 2018 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: