我有两个空间对象,一个是空间多边形对象,另一个是.csv文件,我将其转换为空间点对象。第一个是智利政府为其一个公社创建的官方形状文件,另一个是通过使用HERE API地理编码创建的,这里是同一公社的街道地址。
首先,我使用readOGR从加载了空间多边形对象:
quilpue <- readOGR( dsn= getwd() , layer="quilpue-rgdal",
encoding = "UTF-8") 然后,我将.csv文件加载到R中,并使用sp包中的coordinates()函数将其转换为空间点对象。
pointsCoords<- read.csv("../quilpueR/quilpueLayer.csv", header = TRUE)
coordinates(pointsCoords) <- ~Longitude+Latitude然后我检查了每个物体的投影。
proj4string(quilpue)
proj4string(pointsCoords)"+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"和NA。
唯一适用于pointsCoords的投影是CRS("+init=epsg:3857")。因此,我将该投影分配给了quilpue
proj4string(pointsCoords) <- CRS("+init=epsg:3857")
quilpue_prj <- spTransform(quilpue, CRSobj = CRS(proj4string(pointsCoords)))尽管如此,当我使用raster()包中的extent()检查这两个对象的扩展时,它们并不重叠。
extent(quilpue_prj)
class : Extent
xmin : -7957703
xmax : -7946463
ymin : -3907594
ymax : -3898059
extent(pointsCoords)
class : Extent
xmin : -71498550
xmax : -71334950
ymin : -33133030
ymax : -32769810 因此,当我尝试将它们绘制在一起时,它们不会重叠。我只得到我选择绘制的第一个对象的绘图。
plot(quilpue_prj)
plot(pointsCoords, add = TRUE) 为了检查shapefile或.csv文件是否有问题,我在另一个地理信息系统软件Maptitude上打开了这两个文件,它会设法自动覆盖它们。我希望在R中也能做到这一点。
发布于 2017-05-09 05:16:27
我设法解决了这个问题,但我真的不明白它为什么会起作用。加载.csv文件并使用
coordinates(pointsCoords) <- ~Longitude+Latitude 为了创建空间points对象,我使用了raster包中的projection()函数来为它分配一个投影:
projection(pointsCoords) = "+init=epsg:4326"然后,我先将空间多边形对象quilpue的投影转换为"+init=epsg:3857",然后再转换为"+init=epsg:4326":
quilpue <- spTransform(quilpue,
CRSobj = CRS("+init=epsg:3857"))
quilpue <- spTransform(quilpue,
CRSobj = CRS("+init=epsg:4326"))使用bbox(),我检查每个空间对象的范围:
bbox(pointsCoords)
min max
Longitude -71498550 -71334950
Latitude -33133030 -32769810
bbox(quilpue)
min max
x -71.48526 -71.38429
y -33.09254 -33.02075请注意,它们非常相似,并且pointsCoords包含在quilpue中。唯一需要注意的是,quilpue coords在前两位数字后有一个".",所以我使用gsub将"."添加到pointsCoords中的coords中。
dfcoords <- as.data.frame(pointsCoords@coords)
dfcoords$Longitude <- as.numeric(gsub("([[:digit:]]{6,6})$", ".\\1",
dfcoords$Longitude))
dfcoords$Latitude <- as.numeric(gsub("([[:digit:]]{6,6})$", ".\\1",
dfcoords$Latitude))
coordinates(dfcoords) <- ~Longitude+Latitude并将修改后的coords分配给原始And。
pointsCoords@coords <- dfcoords@coords然后我就可以使用over()并绘制空间对象了。
df_over <- over(quilpue_prj, pointsCoords)
plot(quilpue)
plot(pointsCoords, add = TRUE)

发布于 2018-05-14 23:27:30
为了回答你的问题,我认为你已经经历了一些不必要的步骤。
为了将它们绘制在一起,它们只需要在相同的CRS中:
library(rgdal)
quilpue <- spTransform(quilpue, CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")) #or any CRS you wish to use
pointsCoords <- spTransform(pointsCoords, CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"")) #or any CRS you wish to use
plot(quilpue)
plot(pointsCoords, add = T)还有一件很有帮助的事情,就是检查你的特征的范围,以确保它们对齐。有时,有问题的功能会出现在相同的CRS中,但由于处理或许多转换,它们最终会以扭曲的范围结束。请使用以下命令进行检查:
extent(quilpue)
extent(pointsCoords)https://stackoverflow.com/questions/43855406
复制相似问题