Answers:
直接使用shapefile。您可以使用rgdal
或sf
包轻松完成此操作,然后读取对象中的形状。对于这两个软件包,您都需要提供dsn
-数据源,在shapefile的情况下是目录,以及layer
-在shapefile的名称后减去扩展名:
# Read SHAPEFILE.shp from the current working directory (".")
require(rgdal)
shape <- readOGR(dsn = ".", layer = "SHAPEFILE")
require(sf)
shape <- read_sf(dsn = ".", layer = "SHAPEFILE")
(对于rgdal,在OSX或Linux中,您不能将主目录的'〜'速记用作数据源(dsn
)目录-否则,您将收到无用的“无法打开数据源”消息。该sf
软件包不会有此限制,还有其他一些优点。)
这将为您提供一个Spatial * DataFrame(点,线或面)的对象-然后可以使用与普通数据框相同的方式(即shape$ID
ID列)来访问属性表的字段。
如果要使用导入的ASCII文件,则只需将文本(字符)x和y字段转换为数字,例如:
shape$x <- as.numeric(as.character(shape$x))
shape$y <- as.numeric(as.character(shape$y))
coordinates(shape) <- ~x + y
编辑2015-01-18:请注意,rgdal比maptools(我最初在这里建议)要好一些,主要是因为它自动读写投影信息。
笔记:
as.numeric(as.character())
函数-如果将您的ASCII文本(可能)读取为一个因子,则可确保您获得数值而不是因子级别。rgdal
并且sf
具有访问不同文件和数据库类型的令人困惑的方式(例如,对于GPX文件,dsn是文件名,并且对各个组件(如航点,航迹点等)进行分层),并且需要仔细阅读在线示例。as.character
来解决问题。
dsn="directory where the shapefile, projection file, etc are located"
layer="name of the file without .shp extention"
dsn
参数不应包含斜杠-例如dsn = "C:/Users/Downloads/"
应为dsn = "C:/Users/Downloads"
。希望这能解决某人的挫败感
我同意Simbamangu的观点,并在保留shapefile方面感到困惑,但希望将您的注意力特别导向rgdal库。遵循gissolved为NCEAS建议的链接,并按照rgdal的说明进行操作。将其安装在某些机器上可能具有挑战性,但在投影方面可以大大改善结果。
maptools库非常出色,可让您为正在读取的shapefile定义投影,但是要做到这一点,您需要知道如何以proj4格式指定该投影。一个例子可能看起来像:
project2<-"+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80
+datum=NAD83 +units=m +no_defs" #USA Contiguous Equidistant Conic Projection
data.shape<-readShapePoly("./MyMap.shp",IDvar="FIPS",proj4string=CRS(project2))
plot(data.shape)
如果您想走这条路,那么我建议使用http://spatialreference.org作为找出proj4格式的投影效果的地方。如果您觉得麻烦,rgdal可以通过读取ESRI shapefile的.prj文件(该文件包含shapefile的ESRI投影定义的文件)来简化操作。要在同一文件上使用rgdal,您只需编写以下代码:
library(rgdal)
data.shape<-readOGR(dsn="C:/Directory_Containing_Shapefile",layer="MyMap")
plot(data.shape)
如果您只使用单个shapefile,则可能无需执行此操作即可滑行,但是一旦开始查看多个数据源或将其与Google Maps叠加,则保持投影形状良好就变得至关重要。
有关R中空间数据的一些有用的演练,包括有关导入和使用点模式的大量内容,请访问https://csde.washington.edu/workshop/point-patterns-and-raster在线获取一些旧课程资料-surfaces /(可以在此处找到更多的讲习班),可以帮助您了解这些方法在实际中的比较方式。
我认为您不应该将shapefile转换为ASCII,而是直接将shapefile与空间扩展之一一起使用。在这里,您可以找到三种读取和写入shapefile的方法http://www.nceas.ucsb.edu/scicomp/usecases/ReadWriteESRIShapeFiles。R空间项目可能也会使您感兴趣http://cran.r-project.org/web/packages/sp/index.html。
库中的shapefile()
函数是2017年的一个简单解决方案raster
。
#Load library
library(raster)
#Load shapefile
shp <- shapefile("myshapefile")
更新:这在2019年仍然是一个不错的选择。
另一种选择是使用fastshp库,该库提供:
处理大型ESRI shapefile(.shp)的例程。这包括读取,细化点以及将点与包含的形状进行匹配。此程序包的主要目的是提供支持大型shapefile(数百万个点)的速度。它比其他一些shapefile包快几个数量级的maginute。
这是我在SE上关于如何与ggplot2结合使用的问题: