R - Створіть обмежувальну скриньку, перетворіть у клас Полігон та Сюжет


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 (coords, coordsmax)` ??
mdsumner

Так, виправили це. Він все ще не працює
користувач134611

Робота над проблемами ретельно один раз - це хороший спосіб знайти рішення. Я вважаю помилкою, що Polygon () не помиляється, коли дається лише дві або одні координати, я це зазначив у sp проблемах. Для вас q, бібліотека (растр); SPs1 <- as (obseg (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), ... наступні (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.