2013-08-15 3 views
0

Как и в моем предыдущем вопросе here, скажем, я замышляю страны на карте мира с помощью maptools, если бы я планировал построить страну, есть ли способ найти центральной точке этой страны и прокладывать радиальное расстояние от этой точки? Я использую шейп wrld_simpl, который поставляется с maptools, так что если я сюжетом Германия:R: построение радиального расстояния от точки на картографической карте мира

plot(wrld_simpl[wrld_simpl$NAME=='Germany',], col='red', add=T) 

Я хотел бы найти центр Германии и построить круг с этой точкой, который показывает любую область, которая находится в пределах замолвите 100 км расстояние. Опять же, я хочу быть в состоянии сделать это для многих разных стран, поэтому я хотел бы в идеале создать общее решение, а не только для Германии.

ответ

1

Это частичный ответ. Фрагмент кода ниже вычисляет центр тяжести многоугольника, поэтому, если вы можете вытащить данные вершин полигона для интересующей вас страны, это даст вам «центр», после чего тривиально рисовать круг. (polyx и polyy векторы x- и y- координаты

require(pracma) 
pchit <- polyarea(polyx,polyy) 
centx <- centy <- 0 
    for (kk in 1:(length(polyx)-1)) { 
     centx <- centx + (polyx[kk]+polyx[kk+1]) * (polyx[kk]*polyy[kk+1]-polyx[kk+1]*polyy[kk]) 
     centy <- centy + (polyy[kk]+polyy[kk+1]) * (polyx[kk]*polyy[kk+1]-polyx[kk+1]*polyy[kk]) 
    } 
    centx <- -1/pchit/6 * centx 
    centy <- -1/pchit/6 * centy 
+0

Спасибо за совет. Я добавлю векторизованную форму этой функции, как polycenter() в пакете. В '-1'seems быть неверно. Есть ли ссылка для этой формулы? –

+0

Я изменил 'polyarea', который теперь возвращает истинную (ориентированную) область, а не ее абсолютное значение. Это означает, что' -1' больше не требуется. –

+0

@HansWerner Извинения - вы означало знак минуса в последних двух строках, верно? Да, они уходят в зависимости от упорядочения вершин. –