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")