Расчет площади полигона с помощью пакета R geosphere

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

Например. У меня есть многоугольник с этими точками:

lng <- c(-51.74768, -51.74768, -51.74735, -51.74735)
lat <- c(-0.1838690, -0.1840993, -0.1840984, -0.1838682)

и объединить их в фрейм данных

data <- data.frame(lng, lat)

Затем пытаюсь получить площадь:

area <- geosphere::areaPolygon(x = data)

что составляет 326928,8 м ^ 2.

Я ожидал чего-то большего в диапазоне 1000 м ^ 2.

Что странно, так это то, что это работает довольно хорошо примерно для половины ячеек, которые я вычисляю, но не для другой половины.

В аналогичном вопросе StackOverflow отмечены странно маленькие значения из-за точки находятся в неправильном порядке. Однако, когда я рисую, например

plot(data, type="l")

Кажется, что многоугольник отображается правильно.

Кто-нибудь знает, что здесь может быть не так? Спасибо!


person tiffany    schedule 29.12.2016    source источник
comment
Я использую ваш код и данные и получаю [1] 935.2693 ... Вроде нормально :)   -  person PereG    schedule 30.12.2016
comment
Получается, что для получения правильного ответа необходимо округлить лат и lng. (В приведенном выше коде широта / долгота округлены, но в моем наборе данных было больше цифр и было получено очень большое число.) Я не совсем понимаю это, но, похоже, решил мою проблему.   -  person tiffany    schedule 30.12.2016
comment
попробуйте привести пример с неокругленными координатами. возможно, попробуйте использовать больше 7 options(digits = ...)   -  person loki    schedule 05.01.2017


Ответы (1)


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

library(geosphere)
lng <- c(-51.74768, -51.74768, -51.74735, -51.74735)
lat <- c(-0.1838690, -0.1840993, -0.1840984, -0.1838682)
d <- cbind(lng, lat)
geosphere::areaPolygon(d)
#[1] 935.2693

Идея о том, что округление играет роль, кажется надуманной.

person Robert Hijmans    schedule 26.05.2019