【发布时间】:2013-05-03 00:49:50
【问题描述】:
我想从 Python 脚本运行 R 脚本。在不同的坐标系中投影经纬度坐标需要 R 脚本。我已经考虑了两种选择来做到这一点。在第一个选项中,我喜欢将 lat 和 lon 坐标解析为如下所示的 R 脚本。然后最后我希望 R 脚本将 x 和 y 返回给 python 脚本,但我不知道该怎么做。
project<-function(lat,lon){
library(sp)
library(rgdal)
xy <- cbind(x = lon, y = lat)
S <- SpatialPoints(xy)
proj4string(S) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
Snew <- spTransform(S, CRS("+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs"))
x <- coordinates(Snew)[1]
y <- coordinates(Snew)[2]
return(x,y)
}
对于我的第二个选项,我考虑使用底部的 R 脚本,其中已经包含 lat 和 lon。我尝试使用 subprocess.Popen('Rscript project.r', shell=True).wait() 从 python 运行它,但这似乎不起作用。它不会写入 xy.txt 文件。但是,如果我从 cmd 行运行它,则 R 脚本可以完成这项工作。谁能帮我解决这两个选项之一?
library(sp)
library(rgdal)
lat <- 52.29999924
lon <- 4.76999998
xy <- cbind(x = lon, y = lat)
S <- SpatialPoints(xy)
proj4string(S) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
Snew <- spTransform(S, CRS("+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs"))
x <- coordinates(Snew)[1]
y <- coordinates(Snew)[2]
cat(x, file="xy.txt",sep="")
cat(y,file="xy.txt",append=TRUE)
【问题讨论】:
-
出于好奇,您是否有理由不使用 Python GDAL 绑定? (pypi.python.org/pypi/GDAL) 好像会容易很多。
-
如果它更容易,那么我肯定想尝试一下。但是,我不熟悉在 python 中使用 gdal。是否有示例代码说明如何使用 gdal 并将坐标从一个坐标系投影到另一个坐标系?
-
我认为它与 R 绑定没有太大区别。如果只需要变换坐标,只需要proj4绑定即可;就这么简单:
import pyproj; p1 = pyproj.Proj("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"); p2 = pyproj.Proj("+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs"); pyproj.transform(p1, p2, 52.3, 4.77)纬度/经度参数可以是列表、元组、numpy 数组或标量。见pyproj.googlecode.com/svn/trunk/docs/index.html
标签: python r parsing cmd subprocess