R 如何将UTM转换为Lat Long而不将其从更复杂的数据帧中删除?
我在一个包含14列的数据框中有UTM坐标 我正在使用下面的代码:1。将UTM(东距和北距)从形状文件拉入单独的数据框。2.使用proj4将其转换为lat/long。3.使用R 如何将UTM转换为Lat Long而不将其从更复杂的数据帧中删除?,r,latitude-longitude,utm,R,Latitude Longitude,Utm,我在一个包含14列的数据框中有UTM坐标 我正在使用下面的代码:1。将UTM(东距和北距)从形状文件拉入单独的数据框。2.使用proj4将其转换为lat/long。3.使用innerjoin和基于行名称在两个数据帧中创建的列将其连接回原始df 是否有一种更干净的方法来转换坐标,希望不用将坐标数据移入或移出数据帧?proj4似乎只适用于两个列。这是我完成后目前正在看的内容 >higeo=readOGR(dsn=“.”,layer=“ahupuaa”)#在形状文件中读取 带有驱动程序的OGR数据源
innerjoin
和基于行名称在两个数据帧中创建的列将其连接回原始df
是否有一种更干净的方法来转换坐标,希望不用将坐标数据移入或移出数据帧?proj4似乎只适用于两个列。这是我完成后目前正在看的内容
>higeo=readOGR(dsn=“.”,layer=“ahupuaa”)#在形状文件中读取
带有驱动程序的OGR数据源:ESRI Shapefile
资料来源:“.”,图层:“ahupuaa”
拥有725个功能
它有8个字段
> higeo@data$id=行名(sf@data)#将行号添加为列
>higeo.points=fortify(higeo,region=“id”)#从每个“区域”提取点数据
>higeo.df=内部连接(higeo.points,higeo@data,by=“id”)#通过id字段将各个点连接回数据
>higeo.df$rowid=rownames(higeo.df)#再次开始,这次添加“rowid”。
>hicoords proj4string hiconv hiconv.df$rowid=rownames(hiconv.df)#将rownames添加为列
>newhi.df使用hiconv你使用fortify
是因为你想使用ggplot2
?我使用fortify
是因为我知道一些ggplot2
,我想它会做我想做的事情,那就是提取组成形状文件的实际点的值,并将它们放在数据框中。如果我没有使用ggplot2
。有更好的方法吗?请参阅我的更新答案。我有一个重复的例子:我从download.file
中得到一个错误。否则,我想我明白你的意思。手动下载一些形状文件后,我会尝试让它工作,并让您知道。
> higeo= readOGR(dsn=".", layer="ahupuaa") #Read in shape file
OGR data source with driver: ESRI Shapefile
Source: ".", layer: "ahupuaa"
with 725 features
It has 8 fields
> higeo@data$id = rownames(sf@data) #add row numbers as a column
> higeo.points = fortify(higeo, region="id") #pull point data from each “region”
> higeo.df = inner_join(higeo.points, higeo@data, by="id") #join individual points back to data via id field
> higeo.df$rowid = rownames(higeo.df) #begin again, add “rowid” this time.
> hicoords <- data.frame(x=higeo.df$lon, y=higeo.df$lat) #create xy values in new df, because proj4 only handles 2 columns
> proj4string <- "+proj=utm +zone=4 +north +ellps=WGS84 +datum=WGS84 +units=m +no_defs"#define proj4string to contain constants
> hiconv <- project(hicoords, proj4string, inverse=TRUE)#converts to lat long
> hiconv.df$rowid = rownames(hiconv.df)# add rownames as column
> newhi.df <- inner_join(hiconv.df, higeo.df, by="rowid") #rejoin dfs by rowid