У меня есть SpatialLinesDataFrame из многих разрезов, которые я хотел бы буферизировать только на северной стороне линии, используя R. Кто-нибудь знает инструмент, который имитирует параметр «Боковой тип» для инструмента «Буфер» в arcgis ? Благодаря!Буферная пространственная линия с одной стороны
ответ
Если ваши разрезы - это сегменты линии, которые монотонно увеличиваются в X (а если нет, я не знаю, как вы можете определить, что такое север и что находится к югу от линии), вы можете использовать этот код. В основном он создает буфер с gBuffer
и пересекает его с многоугольником, созданным путем расширения сегмента линии на юг.
northbuff <- function(l1, width){
if(length(l1)!=1){
stop("line is not a single line element")
}
lines = [email protected]
if(length([email protected])!=1){
stop("line element is not a single line string")
}
bb = bbox(l1)
xy = coordinates([email protected][[1]])[[1]]
if(any(diff(xy[,1])<=0)){
stop("x coord not monotone increasing")
}
xy = xy[order(xy[,1]),]
nx = nrow(xy)
xm = bb[1,1]-width*2
ym = bb[2,1]-width*2
xp = bb[1,2] + width*2
coords = rbind(xy,
c(xp,xy[nx,2]),
c(xp,ym),
c(xm,ym),
c(xm,xy[1,2]),
c(xy[1,1],xy[1,2])
)
p = SpatialPolygons(list(Polygons(list(Polygon(coords)),ID=1)))
b = gBuffer(l1, capStyle="FLAT", width=width)
gDifference(b,p)
}
Тест:
> require(sp)
> require(rgeos)
> l1 = readWKT("LINESTRING(0 0,1 5,4 5,5 2,8 2,9 4)")
> plot(northbuff(l1,.2))
> plot(l1,add=TRUE,col="blue",lwd=2)
Вам придется перебрать фрейме данных, чтобы сделать это для каждого компонента.
Если ваши разрезы представляют собой сегменты одной линии (то есть прямую линию от x, y до x ', y'), то ее тривиальная и выполнимая без rgeos
. Если ваши разрезы не будут строго возрастать в координатах x, вам нужно будет выяснить, как определить север и юг линии. Этот код можно было бы легко модифицировать, чтобы создать два полигона в качестве вывода, которые затем можно было бы ввести в функцию, чтобы решить, что больше «Север».
- 1. CSS горизонтальная линия с одной стороны текста
- 2. буферная функция с матрицей
- 3. «UIObjects» с одной стороны UIView
- 4. Масштаб многоугольника с одной стороны
- 5. Два меню с одной стороны
- 6. Нарисуйте многоугольник с дугой вдоль одной стороны
- 7. Горизонтальная линия по заголовку правой стороны
- 8. Tableview подпрыгивая только с одной стороны верхней стороны
- 9. PHP imagecopyresampled() создает границу изображения с одной стороны
- 10. Буферная коррупция в netty
- 11. Линия с левой стороны экрана до конца центрированного div
- 12. Entity Framework Mapping с одной стороны
- 13. sipml5 клиент с одной стороны не висит
- 14. Отзывчивый заголовок с углом одной стороны
- 15. Yii2 добавить как, где с одной стороны,%
- 16. ОриентDb край только соединен с одной стороны
- 17. Удалить тень CardView с одной стороны
- 18. JPA @ManyToMany только с одной стороны?
- 19. Вставка Box Shadow только с одной стороны?
- 20. Графический градиент CSS с одной стороны?
- 21. Пунктирной границу с одной стороны, для JPanel
- 22. Сделать параллелограмм с одной стороны в CSS3
- 23. Как отрезать круг с одной стороны
- 24. Содержимое прошивки NSPopover с одной стороны
- 25. Сделайте прямоугольник с одной стороны изогнутой
- 26. Плагин для Android с одной стороны
- 27. tokbox-opentok передается только с одной стороны
- 28. фон квадратный с одной стороны под углом
- 29. Как отключить раскладку ящика с одной стороны?
- 30. div переполнение с одной стороны только?
Пожалуйста, добавьте дополнительную информацию, SO действительно не нравится эти открытые вопросы ... –
Я не против отвечать им. Я хотел бы знать, есть ли у меня хоть какой-то ответ. – Spacedman