MySQL Great Circle Distance (формула Haversine)

Вы можете попробовать это:

Pattern pattern = Pattern.compile("\"_id\"\\s*:\\s*\"(.*?)\"");
Matcher matcher = pattern.matcher(json);
List<String> ids = new ArrayList<>();

while(matcher.find()) {
    ids.add(matcher.group(1));
}

Объяснение -

\"_id\" проверяет предыдущий раздел "_id",
\\s*:\\s* проверяет ноль или больше пробелов, двоеточие : и снова ноль или больше пробелов (возможно, я мог бы пропустить часть пробелов, но я не знаком с JSON, поэтому я не знал, может ли быть несколько пробелов или нет) [1110 ]
\"(.*?)\" создает группу 1 , которая содержит нужный идентификатор, заключенный в "" (если вы хотите использовать двойные кавычки в вашем массиве, используйте регулярное выражение \"_id\"\\s*:\\s*(.*?))
[ 1111]

Наконец, когда мы находим совпадение с регулярным выражением, мы добавляем содержимое группы 1 в ArrayList, используя matcher.group(1)

181
задан JakeGould 1 January 2014 в 05:50
поделиться

2 ответа

От Google Code FAQ - Создание Локатора Хранилища с PHP, MySQL & Google Maps:

Вот SQL-оператор, который найдет самые близкие 20 мест, которые являются в радиусе 25 миль к 37,-122 координатам. Это вычисляет расстояние на основе широты/долготы той строки и целевой широты/долготы, и затем просит только строки, где значение расстояния - меньше чем 25, заказывает целый запрос расстоянием и ограничивает его 20 результатами. Для поиска километрами вместо миль замените 3959 6 371.

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;
346
ответ дан Yahel 23 November 2019 в 06:08
поделиться

$greatCircleDistance = acos( cos($latitude0) * cos($latitude1) * cos($longitude0 - $longitude1) + sin($latitude0) * sin($latitude1));

с широтой и долготой в радиане.

так

SELECT 
  acos( 
      cos(radians( $latitude0 ))
    * cos(radians( $latitude1 ))
    * cos(radians( $longitude0 ) - radians( $longitude1 ))
    + sin(radians( $latitude0 )) 
    * sin(radians( $latitude1 ))
  ) AS greatCircleDistance 
 FROM yourTable;

Ваш SQL-запрос

, чтобы получить Ваши результаты в км или милях, умножить результат со средним радиусом Земли (3959 мили, 6371 км или 3440 морские мили)

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

SELECT 
  id
FROM spatialEnabledTable
WHERE 
  MBRWithin(ogc_point, GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'))
31
ответ дан Jacco 23 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

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