Вы можете попробовать это:
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)
От 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;
$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))'))