2

我有两个空间对象,一个是空间多边形对象,另一个是我变成空间点对象的 .csv 文件。第一个是智利政府为其一个公社提供的官方形状文件,另一个是使用 HERE API 地理编码创建的同一公社的街道地址。

首先,我从以下位置加载空间多边形对象readOGR

quilpue <- readOGR( dsn= getwd() , layer="quilpue-rgdal", 
                encoding = "UTF-8") 

coordinates()然后我将 .csv 文件加载到 R 中,并使用包中的函数将其转换为空间点对象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分别。

唯一有效的投影pointsCoordsCRS("+init=epsg:3857"). 因此,我将该投影分配给quilpue

proj4string(pointsCoords) <- CRS("+init=epsg:3857")
quilpue_prj <- spTransform(quilpue, CRSobj = CRS(proj4string(pointsCoords)))

extent()尽管如此,当我使用from package检查两个对象的扩展时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 中做同样的事情。

4

2 回答 2

1

我设法解决了这个问题,但我实际上并不明白它为什么会起作用。加载 .csv 文件并使用后

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有 a ,所以我曾经添加到in 。"."gsub"."coordspointsCoords

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()和绘制空间对象。

df_over <- over(quilpue_prj, pointsCoords)
plot(quilpue)
plot(pointsCoords, add = TRUE)

在此处输入图像描述

于 2017-05-08T21:16:26.713 回答
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)
于 2018-05-14T15:27:30.257 回答