반응형
DB에서 점의 가장 가까운 점을 가져옵니다.
Hibernate를 사용하여 대량의 포인트(위도와 경도)를 저장하는 MariaDB 데이터베이스를 사용합니다.jts.geom.Point
type. 데이터베이스에 저장된다.geometry
유형.
어떻게 하면 10점에 가장 근접할 수 있는지 알고 싶어요.SQL 쿼리를 사용하여 이를 수행하려면 어떻게 해야 합니까?또는 백엔드의 쿼리와 포스트 코드일 수도 있습니다.
감사합니다!
예를 들어 다음과 같은 작업을 수행할 수 있습니다.
create table t (loc point);
insert into t (loc) values
(POINT(10, 0)),
(POINT(15, 20)),
(POINT(50, 50));
다음으로 (49, 49)에 가장 가까운 두 점을 찾을 수 있습니다.
select *,
st_distance_sphere(loc, POINT(49, 49)) as dist
from t
order by st_distance_sphere(loc, POINT(49, 49))
limit 2 -- only the closest two points
결과:
loc dist
--------------- -----------------
{"x":50,"y":50} 132584.0664606239
{"x":15,"y":20} 4416195.256674154
이 방법은 효과가 있지만, 수백만 개의 행이 있으면 그다지 효율적이지 않습니다.인덱스를 사용할 수 있도록 "렉탕글" 또는 "면적"을 사용하여 프리필터링해야 합니다.
마리아 편집DB
MariaDB의 구문은 약간 다릅니다.아래를 참조해 주세요.
select ST_AsText(t.loc) as point,
ST_Distance(loc, POINT(49, 49)) as dist
from t
order by ST_Distance(loc, POINT(49, 49))
limit 2;
결과:
point dist
------------ ------------------
POINT(50 50) 1.4142135623730951
POINT(15 20) 44.68780594300866
db<>fiddle의 실행 예를 참조해 주세요.
복잡성과 퍼포먼스가 다른5가지 알고리즘을 다음에 나타냅니다.그리고 Haversine 코드.
http://mysql.rjweb.org/doc.php/find_nearest_in_mysql
언급URL : https://stackoverflow.com/questions/62823829/get-closest-points-of-a-point-from-a-db
반응형
'IT' 카테고리의 다른 글
중단된 쿼리가 있는 Mysql 프로세스 목록이 너무 깁니다. (0) | 2023.01.31 |
---|---|
Java에서의 어레이 길이 (0) | 2023.01.31 |
JavaScript에 개체가 있는지 확인합니다. (0) | 2023.01.31 |
MariaDB/MySQL에서 = 대신 <=>을(를) 사용하지 않는 경우 (0) | 2023.01.31 |
MariaDB - my.cnf를 통해 max_connections를 설정할 수 없습니다. (0) | 2023.01.31 |