Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R地图CSV&;小水电_R_Csv_Gis_Shapefile - Fatal编程技术网

R地图CSV&;小水电

R地图CSV&;小水电,r,csv,gis,shapefile,R,Csv,Gis,Shapefile,我试图在一个形状文件的顶部绘制纬度和经度坐标。我听说他们有相同的坐标系(NAD27)。在研究之后,我尝试了很多方法,但没有一种方法是完美的。它们要么映射其中一个,要么映射另一个,但不能同时映射两者。下面是一个读取它们的示例,但我甚至不知道如何开始绘图,因为我的csv来自sp包我的shp来自maptools包 pts <- read.csv("locations.csv") pts <- pts[,4:5] names(pts) <- c("Latitude", "Longitu

我试图在一个形状文件的顶部绘制纬度和经度坐标。我听说他们有相同的坐标系(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")

另外,我对预测也不太熟悉,所以如果有任何关于这方面的指导,我将不胜感激。另外,如果有办法用同一个软件包实现这一点,我愿意接受。

问题是,两个空间数据集都没有投影集,并且使用不同的坐标系。您可以在
@proj4string
行中看到这一点,这两行当前都是
NA
。一种快速确定坐标系不同的方法是使用
@bbox
槽(“边界框”)。在
pts
中,这些是经度/纬度,因为它们分别在-180/+180和-90/+90范围内<另一方面,代码>边框的值采用完全不同的单位(
819851 386743 1042230 669865)。两者都不在
NAD27
坐标系中

为了解决这个问题,首先我将使用
rgdal::readOGR()
sf::read\u sf()
来读取
边框
形状文件。如果存在投影,这些函数将加载到投影中,因此这应该告诉您这些数据在哪个投影中

其次,要设置
pts
的投影,可以使用
proj4string()

一旦
pts
border
都有了投影集,就可以使用
spTransform()
将其中一个坐标系转换为另一个坐标系。因为我不知道
border
的CRS/投影是什么,我将把它转换成WGS84(
pts
的投影),但只要交换它们,一旦你知道它的CRS,就可以将
pts
转换成与
border
相同的投影

border = spTransform(border, CRS("+init=epsg:4326"))
一旦在同一投影中,它们应该一起绘制。您可以确认其投影与以下内容匹配:

proj4string(border) == proj4string(pts)

问题在于,两个空间数据集都没有投影集,并且使用不同的坐标系。您可以在
@proj4string
行中看到这一点,这两行当前都是
NA
。一种快速确定坐标系不同的方法是使用
@bbox
槽(“边界框”)。在
pts
中,这些是经度/纬度,因为它们分别在-180/+180和-90/+90范围内<另一方面,代码>边框的值采用完全不同的单位(
819851 386743 1042230 669865)。两者都不在
NAD27
坐标系中

为了解决这个问题,首先我将使用
rgdal::readOGR()
sf::read\u sf()
来读取
边框
形状文件。如果存在投影,这些函数将加载到投影中,因此这应该告诉您这些数据在哪个投影中

其次,要设置
pts
的投影,可以使用
proj4string()

一旦
pts
border
都有了投影集,就可以使用
spTransform()
将其中一个坐标系转换为另一个坐标系。因为我不知道
border
的CRS/投影是什么,我将把它转换成WGS84(
pts
的投影),但只要交换它们,一旦你知道它的CRS,就可以将
pts
转换成与
border
相同的投影

border = spTransform(border, CRS("+init=epsg:4326"))
一旦在同一投影中,它们应该一起绘制。您可以确认其投影与以下内容匹配:

proj4string(border) == proj4string(pts)

您会将链接发布到数据集,还是使用web链接或特定包中的链接?听起来它们有不同的投影,可能是因为
maptools::readShapePoly()
默认情况下不加载投影,因此必须指定。检查
str(pts)
str(border)
并发布结果。我会尝试将一些东西放在一起,但我的大部分数据都是分类的。您会发布到数据集的链接,还是使用web链接或特定包中的链接?听起来它们有不同的投影,可能是因为
maptools::readShapePoly()
默认情况下不加载投影,因此必须指定。检查
str(pts)
str(border)
并发布结果。我会尝试将一些内容放在一起,但我的大部分数据都是分类的。我已经能够将它们放在同一个系统上,但哪个绘图脚本可以工作?我正在研究如何使用sp@pvic绘制它们。对不起,绘制脚本是什么意思?如果你的意思是你应该如何绘图,那么有大量的教程可以通过快速的谷歌搜索访问。tmap有一个很好的语法。我需要重新加载一些导致绘图无法工作的库。最后我使用了带有add=TRUE属性的sp::plot。谢谢你的帮助,菲尔。我已经能够让他们进入同一个系统,但是哪个绘图脚本可以工作呢?我正在研究如何使用sp@pvic绘制它们。对不起,绘制脚本是什么意思?如果你的意思是你应该如何绘图,那么有大量的教程可以通过快速的谷歌搜索访问。tmap有一个很好的语法。我需要重新加载一些导致绘图无法工作的库。最后我使用了带有add=TRUE属性的sp::plot。谢谢你的帮助,菲尔。