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