R语言地理空间分析(一)读写空间数据文件文件

读取shp文件


R包:sf
数据来源:.shp

library(sf)
#st_read()函数可以读取.shp文件
data<-st_read("Income_schooling.shp")

注意:文件路径上不要出现汉字和空格,否则读出的空间数据会出现乱码
查看空间数据data的前几条记录

head(data,n=4)

# Simple feature collection with 4 features and 5 fields
# Geometry type: MULTIPOLYGON
# Dimension:     XY
# Bounding box:  xmin: 379071.8 ymin: 4936182 xmax: 596500.1 ymax: 5255569
# Projected CRS: NAD83 / UTM zone 19N
# NAME Income   NoSchool NoSchoolSE IncomeSE                       geometry
# 1   Aroostook  21024 0.01338720 0.00140696  250.909 MULTIPOLYGON (((513821.1 51...
# 2    Somerset  21025 0.00521153 0.00115002  390.909 MULTIPOLYGON (((379071.8 50...
# 3 Piscataquis  21292 0.00633830 0.00212896  724.242 MULTIPOLYGON (((445039.5 51...
# 4   Penobscot  23307 0.00684534 0.00102545  242.424 MULTIPOLYGON (((472271.3 49...

geometry为多边形的顶点信息
进行可视化表达:

#得到各个属性的可视化表达,若属性值为连续变量,则会自动 调用冷暖色调来做数值区分;如果是类别变量,利用不同的颜色区分
plot(data)

数据框创建空间数据类

有时候我们没有.shp文件,只有点的信息数据。这时候可以利用st_as_sf函数进行创建空间sf类。

df <- data.frame(lon = c(-68.783, -69.6458, -69.7653),
                 lat = c(44.8109, 44.5521, 44.3235),
                 Name= c("Bangor", "Waterville", "Augusta"))

#coords=设置坐标,crs=设置坐标系,4326代表WGS84坐标系
point<-st_as_sf(df, coords = c("lon", "lat"), crs = 4326)
point

读取栅格文件

R包:raster

library(raster)
img<-raster("elev.img")

sf类转换为其他空间数据类

转换函数as()

#data为sp类
data.sp<-as(data,"Spatial")
class(data.sp)
#[1] "SpatialPolygonsDataFrame"

#将sf多边形类转换为owin类
#需要maptools包
library(maptools)
data.owin<-as(data,"owin")

#将sf点数据转换为ppp类,ppp类和spatstat包关联
#需要先把sf类转换为sp类,然后将sp类转为ppp类
#需要maptools包
library(maptools)
data.sp<-as(data,"Spatial")
data.ppp<-as(data.sp,"ppp")

如果sp类转为ppp类时,出现如下错误:

Error in as.ppp.SpatialPointsDataFrame(point) : Only projected coordinates may be converted to spatstat class objects

ppp类与spatstat包相关联,该包是在笛卡尔投影坐标系下进行运算的。错误消息是:地理坐标系不能在该包下运算,因此需将地理坐标系转换为投影坐标系。

data.utm<-st_transform(data,32619)#st_transform()表示坐标系统转换,32619代表epsg代码,utm投影坐标系
data.sp<-as(data.utm,"Spatial")
data.ppp<-as(data.sp,"ppp")

sp类转换为sf

st<-st_as_sf(sp)

空间数据文件导出

st_write(data, "shapefile_out.shp", driver="ESRI Shapefile")
posted @ 2021-08-04 14:12  陈其永  阅读(4575)  评论(0编辑  收藏  举报