2015-04-10 3 views
1

Я пытаюсь получить псевдобарицентр для многоугольников в пространственном полигональном фрейме. Сегодня я наткнулся на функцию coordinates, которая фактически возвращает что-то для SpatialPolygonsDataFrame.Значение координат() для объекта SpatialPolygonsDataFrame?

К сожалению, я ничего не нашел при помощи coordinates о значении для SpatialPolygonsDataFrame. Может ли кто-нибудь сказать мне, что это за координаты?

+0

это центроид, только геометрическая середина, не гарантируется пересечение многоугольника – mdsumner

+0

@mdsumner у вас есть какая-либо ссылка на то, как он вычисляется? – cmbarbu

ответ

3

Это многоугольник центроида. Исходный код найден here, ищите функцию FindCG. Вычисленные уравнения эквивалентны найденным на wikipedia, но дополнительно относятся к частному случаю полигонов с (около) нулевой областью и нормализуют координаты полигона по первой точке (чтобы увеличить числовую точность и/или избежать переполнения).

+0

Вы, вероятно, имеете в виду findCG? Также как вы выяснили, что этот конкретный фрагмент кода определяет слот для лабиринта? – cmbarbu

+0

Да. Функции-конструкторы на некотором этапе вызывают там C-копию, например. функция 'Polygon' R вызывает' .Call (Polygon_c, coords, n, ihole) ', который вызывает основную функцию C' Polygon_c'; они затем вызывают другие C-функции. Я поддерживаю sp, и автор его больших частей, хотя и не эти части. –

+0

Отлично, можете ли вы исправить свой ответ, добавив, что к нему, особенно к коррекции? Также я просто разместил этот вопрос, который был бы очень признателен, посмотрев на: http://stackoverflow.com/q/29629049/1174052 – cmbarbu

0

Чтение определения координат для SpatialPolygonsDataFrame я могу видеть, что это на самом деле то же самое, чем getSpPPolygonsLabptSlots, как он извлекает слот labpt, то есть удобная точка поставить метку для полигона.

> selectMethod("coordinates",signature="SpatialPolygonsDataFrame") 
Method Definition: 

function (obj, ...) 
{ 
    .local <- function (obj) 
    { 
     ret = t(sapply(slot(obj, "polygons"), function(i) slot(i, 
      "labpt"))) 
     dimnames(ret) = list(sapply(slot(obj, "polygons"), function(i) slot(i, 
      "ID")), NULL) 
     ret 
    } 
    .local(obj, ...) 
}