2017-01-29 12 views
1

Я хотел бы создать aa .shp файл или таблицу данных координат, где функции выходных точек - это то, где конечные точки линии касаются точки на границе полигона и где пересекаются линии границы полигона. На выходе не образуются точки, где прямые лежат непосредственно вдоль границ полигона.Многоугольник и линейный вход для точечного вывода (в R)

See

Может ли это быть сделано в R?

Like the intersect tool in Esri?

У меня есть оба класса (в R) ...

  1. SpatialLines
  2. SpatialPolygons

Я просто не могу показаться, чтобы найти инструмент/пакет, который делает это ...

(я новичок)

+1

Вы ищете что-то вроде этого? http://gis.stackexchange.com/questions/154689/how-to-find-the-coordinates-of-the-intersection-points-between-two-spatiallines –

ответ

0


Вы можете сделать это с помощью spatstat пакета, но вам нужно конвертировать из и SpatialPolygons к psp (плоскостной сегмента образца) и owin (смотровое окно - это многоугольник в плоскости), используя maptools пакета.

Поскольку вы не предоставили пример данные я первый построить SpatialPolygons и SpatialLines объектов выгляжу как ваша графика:

library(maptools) 
#> Loading required package: sp 
#> Checking rgeos availability: TRUE 
library(spatstat) 
#> Loading required package: nlme 
#> Loading required package: rpart 
#> 
#> spatstat 1.48-0.029  (nickname: 'Alternative Facts') 
#> For an introduction to spatstat, type 'beginner' 
A <- owin(c(1,3), c(2,5)) 
B <- owin(c(4,7), c(1,5)) 
p <- union.owin(A,B) 
p <- as(p, "SpatialPolygons") 
l <- psp(c(0.5, 0.5), c(2, 4), c(4, 6), c(2, 4), window = owin(c(0,7), c(0,5))) 
l <- as(l, "SpatialLines") 
plot(p) 
plot(l, col = "green", add = TRUE, lwd = 3) 

Теперь, чтобы сделать то, что вы просите вам преобразовать кромки полигона до psp и найдите, где линии пересекают эти края (возвращаются как плоская точка модель):

l <- as(l, "psp") 
p <- as(p, "owin") 
e <- edges(p) 
x <- crossing.psp(l, e) 
x 
#> Planar point pattern: 4 points 
#> window: rectangle = [1, 6] x [2, 4] units 

Добавление точек на графиках показывает, что мы нашли:

plot(p, main = "") 
plot(l, col = "green", add = TRUE, lwd = 3) 
plot(x, add = TRUE, col = "red", pch = 20, cex = 3) 

+0

Это работает и отличное объяснение! Спасибо огромное! –

 Смежные вопросы

  • Нет связанных вопросов^_^