2015-07-02 2 views
1

У меня есть кадр данных, который я хочу продвигать к пространственным данным, но он имеет две пары координат в нем - прохождение маршрута Охотничьи координаты сетки и места назначения поездки Рекомендации .Функция R-координат - укажите две пары пространственных координат

Так что я хочу продвинуть структуру данных в пространстве, а затем перепроектировать в WGS84. Я могу сделать это с помощью одной пары координат:

# promote data frame to spatial 
coordinates(myvar) = ~Easting + Northing 
# give it the OS projection 
proj4string(myvar)=CRS("+init=epsg:27700") 
# convert projection to WGS84 as used by osm 
myvar.WGS84 <- spTransform(myvar, CRS("+init=epsg:4326")) 

Но как я могу это сделать с двумя парами?

Edit - я достиг этого путь разделения кадра данных и воссоединиться согласно коду ниже, но, безусловно, должна быть более эффективным и элегантным способом сделать это:

#create separate object for destination and Dest grid refs 
destgridrefs <- mydata %>% select(-Origin_Easting, -Origin_Northing) 
origingridrefs <- mydata %>% select(rowID, Origin_Easting, Origin_Northing) 
#rename the columns 
destgridrefs <- destgridrefs %>% rename(lat=Dest_Easting, long=Dest_Northing) 
origingridrefs <- origingridrefs %>% rename(lat=Origin_Easting, long=Origin_Northing) 
# make data frame 
destgridrefs <- as.data.frame(destgridrefs) 
origingridrefs <- as.data.frame(na.omit(origingridrefs)) 
# promote data frame to spatial 
coordinates(destgridrefs) = ~lat+long 
coordinates(origingridrefs) = ~lat+long 
# give them the OS projection 
proj4string(destgridrefs)=CRS("+init=epsg:27700") 
proj4string(origingridrefs)=CRS("+init=epsg:27700") 
# convert projection to WGS84 
destgridrefs.WGS84 <- spTransform(destgridrefs, CRS("+init=epsg:4326")) 
origingridrefs.WGS84 <- spTransform(origingridrefs, CRS("+init=epsg:4326")) 
# then convert spatial points to a data frame so they can be used by ggplot 
destgridrefs.WGS84.df <- as.data.frame(destgridrefs.WGS84) 
origingridrefs.WGS84.df <- as.data.frame(origingridrefs.WGS84) 
# join them together              
allgridrefs <- inner_join(destgridrefs.WGS84.df, origingridrefs.WGS84.df, by="rowID") 
+0

Просьба привести воспроизводимый пример. Ваше объяснение довольно неясно. –

ответ

1

Вы можете поместить координату пары в объекте . Здесь одна строка является исходной точкой назначения. Следующий код является примером из sp package documentation of SpatialLines:

# from the sp vignette: 
l1 = cbind(c(1,2,3),c(3,2,2)) 
l1a = cbind(l1[,1]+.05,l1[,2]+.05) 
l2 = cbind(c(1,2,3),c(1,1.5,1)) 
Sl1 = Line(l1) 
Sl1a = Line(l1a) 
Sl2 = Line(l2) 
S1 = Lines(list(Sl1, Sl1a), ID="a") 
S2 = Lines(list(Sl2), ID="b") 
Sl = SpatialLines(list(S1,S2)) 
summary(Sl) 
plot(Sl, col = c("red", "blue")) 
+0

спасибо, к сожалению, я не мог следовать вашему методу, чтобы получить то, что мне было нужно, я попробую сделать больше, но тем временем, отредактированный в моем OP, я разделил dataframe, а затем присоединился к нему. – DDD1