Я использую PostgreSQL, и я использую расширение PostGIS.
Я могу сравнить одну точку с этим запросом:
SELECT st_distance(geom, 'SRID=4326;POINT(12.601828337172 50.5173393068512)'::geometry) as d
FROM pointst1
ORDER BY d
но я хочу сравнивать не одну фиксированную точку, а столбец точек. И я хочу сделать это с помощью какой-то индексации, чтобы это было дешево с вычислительной точки зрения, а не 10000x10000, как перекрестное соединение в этой таблице.
Создать таблицу:
create table pointst1
(
id integer not null
constraint pointst1_id_pk
primary key,
geom geometry(Point, 4325)
);
create unique index pointst1_id_uindex
on pointst1 (id);
create index geomidx
on pointst1 (geom);
Изменить: уточненный запрос (сравнение 10000 точек с их ближайшим соседом, но получение результата самой точки, которая равна 0, а не следующей ближайшей точки:
select points.*,
p1.id as p1_id,
ST_Distance(geography(p1.geom), geography(points.geom)) as distance
from
(select distinct on(p2.geom)*
from pointst1 p2
where p2.id is not null) as points
cross join lateral
(select id, geom
from pointst1
order by points.geom <-> geom
limit 1) as p1;
create table
? - person Jim Jones   schedule 22.06.20184326
- person Jim Jones   schedule 23.06.2018