我有两个空间对象,一个是空间多边形对象,另一个是我转变为空间点对象的.csv文件。第一个是智利政府为其中一个公社提供的官方形状文件,另一个是通过HERE API地理编码创建的,同一公社的街道地址。
首先我从{
加载readOGR
的空间多边形对象
quilpue <- readOGR( dsn= getwd() , layer="quilpue-rgdal",
encoding = "UTF-8")
然后我将.csv文件加载到R中,并使用coordinates()
包中的sp
函数将其转换为空间点对象。
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)))
尽管如此,当我使用extent()
包中的raster()
检查两个对象的扩展名时,它们不会重叠。
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
另一个GIS软件上打开了它,并设法自动覆盖它们。我希望能够在R中做同样的事。
答案 0 :(得分:0)
我设法解决问题,但我实际上并不理解为什么会有效。加载.csv文件并使用
后appiumservice.getUrl().toString()
创建空间点对象,我使用coordinates(pointsCoords) <- ~Longitude+Latitude
包中的projection()
函数为其指定投影:
raster
然后,我将空间多边形对象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
添加到"."
在coords
。
pointsCoords
并将修改后的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
然后我可以使用pointsCoords@coords <- dfcoords@coords
并绘制空间对象。
over()
答案 1 :(得分:0)
我认为你已经做了一些不必要的步骤来回答你的问题。
为了将它们绘制在一起,它们只需要在同一个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)