СуперСортировка точек по расстоянию друг от друга
-
- Участник
- Сообщения: 66
- Зарегистрирован: 08 июл 2013, 15:31
- Репутация: 1
СуперСортировка точек по расстоянию друг от друга
Основная задача, найти все точки, расположенные ближе, чем в 1 м друг от друга. "Друг от друга" - ключевое условие. Есть ли готовый инструмент для этого и как им пользоваться ? К примеру "Анализ близости" в аркгис ??
Если нет такого инструмента, то:
Есть файл. В нем номера точек N и прямоугольные координаты каждой из них (X, Y). Нужно их отсортировать по степени их удаленности друг от друга. Очевидно, что проще всего отсортировать все возможные пары точек! [Всего таких пар будет, видимо, N*(N-1) ]
заголовки:........N....X..Y ............................. N_пары .... D --(расстояние между точками в паре)
на входе:........ А = (0, 1).............на выходе.... A,B ........ d_1
.................... В = (10, 4) .............................B,D........ d_2
.................... C = (1, 0)...............................C,A ........d_3
.....................D = (10, 5) .............................B,C.........d_4
................................................................С,D ........d_5
т.е. пары точек должны быть сортированы по убыванию от расстояния. лучше, но не критично, чтобы А,B и B,A не дублировались.
Если нет такого инструмента, то:
Есть файл. В нем номера точек N и прямоугольные координаты каждой из них (X, Y). Нужно их отсортировать по степени их удаленности друг от друга. Очевидно, что проще всего отсортировать все возможные пары точек! [Всего таких пар будет, видимо, N*(N-1) ]
заголовки:........N....X..Y ............................. N_пары .... D --(расстояние между точками в паре)
на входе:........ А = (0, 1).............на выходе.... A,B ........ d_1
.................... В = (10, 4) .............................B,D........ d_2
.................... C = (1, 0)...............................C,A ........d_3
.....................D = (10, 5) .............................B,C.........d_4
................................................................С,D ........d_5
т.е. пары точек должны быть сортированы по убыванию от расстояния. лучше, но не критично, чтобы А,B и B,A не дублировались.
Последний раз редактировалось qssaka 30 сен 2013, 13:59, всего редактировалось 2 раза.
-
- Гуру
- Сообщения: 4170
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: СуперСортировка точек по расстоянию друг от друга
1) инструмент есть, называется Rqssaka писал(а):Основная задача, найти все точки, расположенные ближе, чем в 1 м друг от друга. "Друг от друга" - ключевое условие. Есть ли готовый инструмент для этого и как им пользоваться ?
2) если точек мало, то считаем матрицу взаимных расстояний dist(), переводим ее в векторный вид, и выбираем нужные пары
3) если много, для точного решения используем k-d дерево, в R вроде так реализован поиск соседей, деталей не помню, давно было.
4) если не нашли готового, то строим пространственный индекс - на сетке с шагом 1км нужно брать только точки из соседних 8 ячеек и из нее самой, делаем цикл по ячейкам сетки, объединяем результаты (ну и там всякие граничные эффекты учитываем).
-
- Участник
- Сообщения: 66
- Зарегистрирован: 08 июл 2013, 15:31
- Репутация: 1
Re: СуперСортировка точек по расстоянию друг от друга
я не такой профи как вы, опыта в R нету совсем: а) не понятно как туда импортировать свои данные (1500 точек); b) не понятно, что такое k-d дерево и как его "строить"; c) не понятно, "если не нашли готового" ?решения?, "то строим пространственный индекс" - каким образом?
-
- Гуру
- Сообщения: 4170
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: СуперСортировка точек по расстоянию друг от друга
read.table(), читаем helpqssaka писал(а):а) не понятно как туда импортировать свои данные (1500 точек);
поскольку мало точек, то используем план (а)b) не понятно, что такое k-d дерево и как его "строить"; c) не понятно, "если не нашли готового" ?решения?, "то строим пространственный индекс" - каким образом?
Код: Выделить всё
p<-read.table("my_data.dat",header=TRUE)
p.dist<-as.double(as.matrix(dist(p[,c("X","Y")])))
p.xy<-expand.grid(1:nrow(p),1:nrow(p))
p.all<-data.frame(Id1=p.xy[,1],Id2=p.xy[,2],dist=p.dist)
ind<-(p.dist<1000) & (p.all$Id1 != p.all$Id2) # assume coord in meters
p.1km<-p.all[ind,]
write.table(p.1km,"res.dat",row.names=FALSE,quote=FALSE)
-
- Активный участник
- Сообщения: 185
- Зарегистрирован: 26 июл 2010, 08:54
- Репутация: 30
- Откуда: Ногинск
Re: СуперСортировка точек по расстоянию друг от друга
Нанести точки на карту (геокодирование), построить вокруг них буферные зоны радиусом 1м и найти пересечения этих зон.
Я думаю, такой инструментарий есть в разных ГИС.
Я думаю, такой инструментарий есть в разных ГИС.
-
- Участник
- Сообщения: 66
- Зарегистрирован: 08 июл 2013, 15:31
- Репутация: 1
Re: СуперСортировка точек по расстоянию друг от друга
to gamm Спасибо, все получилось !
------------------------------------------------------------------
тем не менее, вопрос не снят. как в аркгис просто и быстро реализавать тоже через тулбокс ?
------------------------------------------------------------------
тем не менее, вопрос не снят. как в аркгис просто и быстро реализавать тоже через тулбокс ?
-
- Гуру
- Сообщения: 4170
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: СуперСортировка точек по расстоянию друг от друга
про кнопки не скажу, потому как Аркой не пользуюсь (надобности нет). А идеологически написано постом выше: строим буфер в отдельный слой, и делаем overlay (point-in-region)qssaka писал(а):тем не менее, вопрос не снят. как в аркгис просто и быстро реализавать тоже через тулбокс ?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя