R 如何将数据帧转换为空间坐标

R 如何将数据帧转换为空间坐标,r,gis,geospatial,R,Gis,Geospatial,我一直在研究具有lat-long值的地震数据,我想将这些lat-long值转换为空间坐标 假设我有以下数据集df: longitude latitude 128.6979 -7.4197 153.0046 -4.7089 104.3261 -6.7541 124.9019 4.7817 126.7328 2.1643 153.2439 -5.650

我一直在研究具有lat-long值的地震数据,我想将这些lat-long值转换为空间坐标

假设我有以下数据集
df

longitude          latitude
        128.6979    -7.4197
        153.0046    -4.7089
        104.3261    -6.7541
        124.9019    4.7817
        126.7328    2.1643
        153.2439    -5.6500
        142.8673    23.3882
        152.6890    -5.5710
我想把它转换成空间点。 大概是这样的:

 lon        lat  
[1,] 2579408.24 1079721.15
[2,] 2579333.69 1079729.18
[3,] 2579263.65 1079770.55
[4,] 2579928.04 1080028.46
[5,] 2579763.65 1079868.92
[6,] 2579698.00 1079767.97
我使用了以下代码:

library(sp)
df.sp<-df
coordinates(df.sp)<-~x+y

首先,获取
lon
lat
列,并为
coord
创建一个对象。然后,从原始数据帧中减去它们并创建一个新对象。最后使用
SpatialPointsDataFrame()
创建
SpatialPointsDataFrame
。创建
空间点数据框时,需要指定
proj4string
。选择一个适合你的

在您的情况下,除了
lon
lat
之外,没有任何其他列,该方法将不起作用。我故意留下了
lon
lat
@数据

资料

mydf

转换为空间点数据帧的步骤

coordinates(df) <- cbind(df$longitude , df$latitude)
将空间点数据帧反向处理为原始df

df <- data.frame(longitude = coordinates(df)[,1], latitude = coordinates(df)[,2])

df或使用
sf
而不是
sp
对象(查看有关
sp
或从
sf
迁移到
sf
的更多信息):

库(sf)
#上述给定数据

my.df与上面的相反。我要将空间点数据帧xy坐标转换为LAT LON?谢谢@M.Qasim如果您使用上面的示例,似乎以下两种方法允许您提取lon和lat。
spdf@data
,它是一个数据帧,或
spdf@coords
,这是一个矩阵。@jazzurro,假设您拥有所有的lat,一个城市的边界多边形是否可以生成类似于的边界多边形?如果没有,创建一个类似于链接中发送的边界多边形还需要哪些其他信息集?@MHOOS我看了一下这个问题。恐怕我不知道你怎么能画出这样的多边形。我能想到的所有想法都已经在答案中了。这是一个过时的解决方案,因为
sf
是一种新的方式。请参阅此线程或此处的其他答案:
structure(list(longitude = c(128.6979, 153.0046, 104.3261, 124.9019, 
126.7328, 153.2439, 142.8673, 152.689), latitude = c(-7.4197, 
-4.7089, -6.7541, 4.7817, 2.1643, -5.65, 23.3882, -5.571)), .Names = c("longitude", "latitude"), class = "data.frame", row.names = c(NA, -8L))
coordinates(df) <- cbind(df$longitude , df$latitude)
proj4string(df) = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")
df <- data.frame(longitude = coordinates(df)[,1], latitude = coordinates(df)[,2])
library(sf)

# the given data above
my.df <- read.table(text="
                    longitude    latitude
                    128.6979    -7.4197
                    153.0046    -4.7089
                    104.3261    -6.7541
                    124.9019    4.7817
                    126.7328    2.1643
                    153.2439    -5.6500
                    142.8673    23.3882
                    152.6890    -5.5710",
                    header=TRUE)

# Convert data frame to sf object
my.sf.point <- st_as_sf(x = my.df, 
                        coords = c("longitude", "latitude"),
                        crs = "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")

# simple plot
plot(my.sf.point)

# interactive map:
library(mapview)
mapview(my.sf.point)

# convert to sp object if needed
my.sp.point <- as(my.sf.point, "Spatial")