IT

DB에서 점의 가장 가까운 점을 가져옵니다.

itgroup 2023. 1. 31. 20:44
반응형

DB에서 점의 가장 가까운 점을 가져옵니다.

Hibernate를 사용하여 대량의 포인트(위도와 경도)를 저장하는 MariaDB 데이터베이스를 사용합니다.jts.geom.Pointtype. 데이터베이스에 저장된다.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 Fielen의 실행 예를 참조하십시오.

이 방법은 효과가 있지만, 수백만 개의 행이 있으면 그다지 효율적이지 않습니다.인덱스를 사용할 수 있도록 "렉탕글" 또는 "면적"을 사용하여 프리필터링해야 합니다.

마리아 편집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

반응형