R - Создать ограничивающий прямоугольник, преобразовать в класс Polygon и Plot


11

У меня есть NE lat lngи SW lat lng. Моя цель проста, я использую RStudio, и я хочу создать ограничивающий прямоугольник из двух вышеупомянутых латов и длин, а затем сгенерировать Polygon, и я хочу добавить случайные точки в квадратный многоугольник. У меня есть NELat / Lng и SW-Lat / Lng в CSV-файле, который я могу импортировать в data.frame.

Мне просто нужно небольшое руководство, чтобы начать, я очень плохо знаком с языком R, он действительно отличается от того, к чему я привык.

Пока у меня есть это:

coords = cbind(78.46801, 19.53407)
coordsmax = cbind(78.83157, 19.74557 )
sp = SpatialPoints(coordsmax)
sp2 = SpatialPoints(coords)

r1 = rbind(coords, coordsmax[1, ])  # join
P1 = Polygon(r1)
Ps1 = Polygons(list(P1), ID = "a")
plot(Ps1)

Я только что видел несколько примеров в другом месте, но я не могу построить многоугольник из 4 углов.


У вас есть только одна дублированная координата в r1, это означает, что это будет 'r1 = rbind (координаты, координаты max) `??
mdsumner

Да, исправил это. Это все еще не работает, хотя
user134611

Тщательная проработка проблем - хороший способ найти решение. Я считаю ошибкой то, что Polygon () не дает ошибок при задании только двух или одной координаты, я отметил это в проблемах sp. Для вас д, библиотека (растр); SPs1 <- as (экстент (r1), «Пространственные полигоны»); сюжет (SPs1)
mdsumner

Мне жаль, что я должен использовать функцию ответа от stackexchange, но моя репутация недостаточно высока, чтобы комментировать. @ dof1985 вы используете (x_min, y_min), (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) в качестве координат для создания многоугольника. Я попробовал то же самое, но не получилось. затем я посмотрел ближе на ваш пример и рассмотрел, что вы используете вместо (x_min, y_min), (x_max, y_min), ... follow (x_min, y_min), (x_min, y_max), ... это может быть причина моей ошибки? пожалуйста, исправьте свой пример :)
ExploreR

Ответы:


7

Несколько изменений были внесены в ваш код:

Во-первых, обратите внимание, что я отбросил создание точек. Вы можете сформировать многоугольник без использования SpatialPoints. Хотя, если задействовано много точек, было бы лучше создать многоугольник из точек.

Во-вторых, я написал 5 пар координат в матрице ниже. Каждая пара координат обозначает один угол вашей ограничительной рамки, а пятая повторяет первую точку. А именно, матрица включает в себя: [ (x_min, y_min) , (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) ]

Наконец, я использовал SpatialPolygonsс, espg:4326чтобы сформировать объект в географическом контексте.

library(sp)

coords = matrix(c(78.46801, 19.53407,
               78.46801, 19.74557,
               78.83157, 19.74557,
               78.83157, 19.53407,
               78.46801, 19.53407), 
             ncol = 2, byrow = TRUE)


P1 = Polygon(coords)
Ps1 = SpatialPolygons(list(Polygons(list(P1), ID = "a")), proj4string=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))
plot(Ps1, axes = TRUE)

Вот что произойдет, если я построю ваш код:

Многоугольник, который выглядит как линия

и это после модификаций кода, представленных здесь:

Склеивающая коробка


Это оно! Не могли бы вы прокомментировать немного proj4String? вы определяете характеристики лата и долго через него?
user134611

Нажмите ?is.projectedв R-консоли, чтобы увидеть proj4stringпомощь. Да, он используется для определения класса CRS для пространственного объекта
dof1985

21

Вы можете вложить эту extentфункцию из растровой библиотеки, asчтобы создать объект SpatialPolygons.

library(sp)
e <- as(raster::extent(78.46801, 78.83157, 19.53407, 19.74557), "SpatialPolygons")
proj4string(e) <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
plot(e)

2
это выглядит лучше, чем мой ответ.
dof1985
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.