我试图绘制纬度& shapefile顶部的经度坐标。我被告知他们有相同的坐标系(NAD27)。在研究之后我尝试了很多方法,但没有任何方法可以完美运行。它们要么映射一个,要么映射两个,但不是两个。以下是阅读它们的示例,但我甚至不知道如何开始绘制,因为我的csv来自sp包,而shp来自maptools包。
pts <- read.csv("locations.csv")
pts <- pts[,4:5]
names(pts) <- c("Latitude", "Longitude")
pts <- pts[complete.cases(pts),]
pts <- SpatialPoints(pts)
border <- maptools::readShapePoly("landman_one shape.shp")
非常感谢任何帮助。
以下是不同的结构。
> str(pts)
Formal class 'SpatialPoints' [package "sp"] with 3 slots
..@ coords : num [1:372, 1:2] 30.9 30.9 31 31 31 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:372] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:2] "Latitude" "Longitude"
..@ bbox : num [1:2, 1:2] 29.5 -105.2 36 -76.1
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:2] "Latitude" "Longitude"
.. .. ..$ : chr [1:2] "min" "max"
..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
.. .. ..@ projargs: chr NA
> str(border)
Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
..@ data :'data.frame': 1 obs. of 2 variables:
.. ..$ Id : int 0
.. ..$ PERIM_GEO: num 998432
.. ..- attr(*, "data_types")= chr [1:2] "N" "F"
..@ polygons :List of 1
.. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
.. .. .. ..@ Polygons :List of 1
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] 922511 545445
.. .. .. .. .. .. ..@ area : num 3.45e+10
.. .. .. .. .. .. ..@ hole : logi FALSE
.. .. .. .. .. .. ..@ ringDir: int 1
.. .. .. .. .. .. ..@ coords : num [1:252, 1:2] 954182 954073 954006 953914 953828 ...
.. .. .. ..@ plotOrder: int 1
.. .. .. ..@ labpt : num [1:2] 922511 545445
.. .. .. ..@ ID : chr "0"
.. .. .. ..@ area : num 3.45e+10
..@ plotOrder : int 1
..@ bbox : num [1:2, 1:2] 819851 386743 1042230 669865
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:2] "x" "y"
.. .. ..$ : chr [1:2] "min" "max"
..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
.. .. ..@ projargs: chr NA
另外,我对预测并不太熟悉,因此任何有关预测的指导都会受到赞赏。此外,如果有一种方法可以使用相同的包装,我会对此持开放态度。
答案 0 :(得分:2)
问题在于,您的空间数据集都没有投影集并且使用不同的坐标系。您可以在@proj4string
行中看到这一点,这两行当前都是NA
。确定坐标系不同的快速方法是@bbox
插槽(&#39;边界框&#39;)。在pts
中,这些是经度/纬度,因为它们分别在-180 / + 180和-90 / + 90之内。另一方面,border
的值具有完全不同的单位(819851 386743 1042230 669865
)。这些都看起来都不在NAD27
坐标系中。
要解决此问题,首先我会使用rgdal::readOGR()
或sf::read_sf()
来读取您的border
形状文件。如果存在这些函数,这些函数将加载到投影中,因此这应该告诉您此数据的投影内容。
其次,要设置pts
的预测,您可以使用proj4string()
:
proj4string(pts) = CRS("+init=epsg:4326")
pts
和border
都有投影集后,您可以使用spTransform()
将其转换为另一个坐标系。由于我不知道border
的CRS /投影是什么,我将其转换为WGS84(pts
的投影),但只是交换它们以转换pts
一旦你知道它的CRS就会与border
相同的投影。
border = spTransform(border, CRS("+init=epsg:4326"))
一旦进入相同的投影,他们应该一起绘制。您可以确认他们的预测符合:
proj4string(border) == proj4string(pts)