R 将不同类型的纬度转换为十进制形式
我在数据库中有很多不同类型的坐标:R 将不同类型的纬度转换为十进制形式,r,range,decimal,coordinates,R,Range,Decimal,Coordinates,我在数据库中有很多不同类型的坐标: x$lat = c("41°39'","41°; 42°; 43°", "41°39'-43°39'", '42°', "36.458", "42°-44°","36.452 - 37.254", "42°39', 43°39'") 我需要将它们全部转换为十进制度数(其中一些已经转换为十进制度数) 但是,我也有一个坐标范围(例如41°39'-43°39'),在这种情况下,我需要首先找到一个平均值,然后将该平均值转换为十进制形式。类似地,我有一个坐标列表(“4
x$lat = c("41°39'","41°; 42°; 43°", "41°39'-43°39'", '42°', "36.458", "42°-44°","36.452 - 37.254", "42°39', 43°39'")
我需要将它们全部转换为十进制度数(其中一些已经转换为十进制度数)
但是,我也有一个坐标范围(例如41°39'-43°39'),在这种情况下,我需要首先找到一个平均值,然后将该平均值转换为十进制形式。类似地,我有一个坐标列表(“41°;42°;43°”或42°39',43°39')-我还需要首先找到一个平均值,然后将其放入十进制形式
我知道两种选择:对于41°39':
x$latdec = gsub('°', ' ', x$lat)
对于42°类型:
x$latdec = gsub('°', x$lat)
对于36.458,就让它保持原样吧
问题在于范围(“41°39'-43°39'),我知道我可以通过以下方式将范围分为两部分:
out <- strsplit(as.character(x$lat),'-')
do.call(rbind, out)
out
对不起,我的代码看起来很难看,但这是我想到的
#将LAT或LON转换为十进制
等级=c(1:7)
西=摄氏度(“41°39'”、“41°;42°”、“41°39'-43°39'、“42°”、“36.458”、“42°-44°”、“36.452-37.254”)
id=规格
dff=数据帧(cbind(id,west))
df
对不起,我的代码看起来很难看,但这是我想到的
#将LAT或LON转换为十进制
等级=c(1:7)
西=摄氏度(“41°39'”、“41°;42°”、“41°39'-43°39'、“42°”、“36.458”、“42°-44°”、“36.452-37.254”)
id=规格
dff=数据帧(cbind(id,west))
df可能是一个可能的副本,为什么在转换为十进制之前需要找到平均值?我需要在地图上绘制点(然后也将点分解为光栅单元,并用颜色填充)。我不知道如何在光栅地图上绘制一系列坐标(特别是如果我的纬度是41°39'-43°39',经度是43°39',如果你的纬度和经度都是lat和lon,你可以画一条线或一个方框…但这比转换为十进制要复杂一些,因为你必须手动处理每种情况,可能是重复的,可能是重复的,为什么你需要在转换之前找到平均值我需要在地图上绘制点(也被分解成光栅单元,并用颜色填充)。我不知道如何在光栅地图上绘制坐标范围(特别是如果我的纬度是41°39'-43°39',经度是43°39',如果你的范围是lat和lon,你可以画一条线或一个方框……但这比转换为十进制要复杂一些,因为你必须手动处理每种情况
#CONVER LAT or LON TO DECIMAL
spec= c(1:7)
west = c("41°39'","41°; 42°, 43°", "41°39'-43°39'", '42°', "36.458", "42°-44°","36.452 - 37.254")
id= spec
dff= data.frame(cbind(id, west))
df <- dff[!(is.na(dff$west)) ,]
#subset everything that has degree sign in it
p1 <- '°'
p2 <- '-'
p3 <- "'"
p4 <- '"'
p5 = ","
# work with coordinates that have ranges
# all that have ranges in it
df11 <- subset(df, grepl(p2, df$west) )
# omit everything with comma (list of ranges)
df11a = subset(df11, grepl(p5, df11$west))
#everything with comma
df1= df11[!(df11$id %in% df11a$id),]
out <- strsplit(as.character(df1$west),'-')
# break range into two columns
out2= data.frame(do.call(rbind, out))
df1$west_lower_limit=out2$X1
df1$west_upper_limit=out2$X2
#UPPER LIMIT
#if we have seconds
df0_1 = subset (df1, grepl(p4, df1$west_upper_limit))
# were we have range- degrees and -deg+min
df1_1 <- subset(df1, grepl(p1, df1$west_upper_limit) )
# where only range - decimals
df1_2 <- df1[!(df1$id %in% df1_1$id),]
# subset df1_1 for only degrees and deg+min
# range- degrees+ min
df1_1a <- subset(df1_1, grepl(p3, df1_1$west_upper_limit) )
# convert range- deg+min into dec
df1_1a$west_upper_limit = gsub('°', ' ', as.factor(df1_1a$west_upper_limit))
df1_1a$west_upper_limit = gsub("'", ' ', as.factor(df1_1a$west_upper_limit))
df1_1a$long_upper_limit = conv_unit(df1_1a$west_upper_limit, from = 'deg_dec_min', to = 'dec_deg')
# range- degrees
df1_1b <-df1_1[!(df1_1$id %in% df1_1a$id),]
#convert range- deg
df1_1b$west_upper_limit = gsub('°', ' ', df1_1b$west_upper_limit)
df1_1b$long_upper_limit = df1_1b$west_upper_limit
#convert range- decimals
df1_2$long_upper_limit =df1_2$west_upper_limit
# LOWER LIMIT
# were we have range- degrees and -deg+min
df1_1l <- subset(df1, grepl(p1, df1$west_lower_limit) )
# where only range - decimals
# subset df1_1 for only degrees and deg+min
df1_2l <- df1[!(df1$id %in% df1_1$id),]
# range- degrees+ min
df1_1al <- subset(df1_1l, grepl(p3, df1_1l$west_lower_limit) )
# range- degrees
# convert range- deg+min into dec
df1_1bl <-df1_1[!(df1_1l$id %in% df1_1a$id),]
df1_1al$west_lower_limit = gsub('°', ' ', df1_1al$west_lower_limit)
df1_1al$west_lower_limit = gsub("'", ' ', df1_1al$west_lower_limit)
df1_1al$long_lower_limit = conv_unit(df1_1al$west_lower_limit, from = 'deg_dec_min', to = 'dec_deg')
#convert range- deg
df1_1bl$west_lower_limit = gsub('°', ' ', df1_1bl$west_lower_limit)
df1_1bl$long_lower_limit = df1_1bl$west_lower_limit
#convert range- decimals
df1_2l$long_lower_limit = df1_2l$west_lower_limit
# combine all with ranges
df1_1_dec1= rbind(df1_1a,df1_1b,df1_2)
df1_1_dec2= rbind(df1_1al,df1_1bl,df1_2l)
df1dec1 <- merge(df1_1_dec1,df1_1_dec2,by=c("id"))
df1dec= df1dec1[,c("id","long_lower_limit","long_upper_limit")]
----------
# NO RANGES IN COORDINATES
# all that dont have range in it
df2= df[!(df$id %in% df11$id),]
# were we have no range- degrees and -deg+min and deg-min-sec
df2_1 <- subset(df2, grepl(p1, df2$west) )
# were we have no range -deg+min
df2_1a <- subset(df2_1, grepl(p3, df2_1$west) )
#were we have no range -deg+min+sec
df2_1aa<- subset(df2_1a, grepl(p4, df2_1a$west) )
df2_1aa$west = gsub('°', ' ', df2_1aa$west)
df2_1aa$west = gsub("'", ' ', df2_1aa$west)
df2_1aa$west = gsub('"', ' ', df2_1aa$west)
df2_1aa$lat = conv_unit(df2_1aa$west, from = 'deg_min_sec', to = 'dec_deg')
#where no sec
df2_1ab = df2_1a[!(df2_1a$id %in% df2_1aa$id),]
df2_1ab$west = gsub('°', ' ', df2_1ab$west)
df2_1ab$west = gsub("'", ' ', df2_1ab$west)
df2_1ab$lat = conv_unit(df2_1ab$west, from = 'deg_dec_min', to = 'dec_deg')
#no range- deg
df2_1b <- df2_1[!(df2_1$id %in% df2_1a$id),]
df2_1b$west = gsub('°', ' ', df2_1b$west)
df2_1b$lat = conv_unit(df2_1b$west, from = 'dec_deg', to = 'dec_deg')
#where no degrees present
df2_2= df2[!(df2$id %in% df2_1$id),]
df2_2$lat= df2_2$west
#bind non ranges data
df2_dec1= rbind(df2_1aa,df2_1ab,df2_1b, df2_2)
df2_decN =data.frame( "id"= df2_dec1$id, "dec_lat"=df2_dec1$lat)