R 端口之间的距离计算器

R 端口之间的距离计算器,r,google-maps,google-maps-api-3,distance,R,Google Maps,Google Maps Api 3,Distance,我有一个端口数据库,其中包含近10k的端口名及其相应的位置。我想找到端口之间的距离 根据我的理解,使用谷歌距离矩阵API,我们只能找到一组特定出行模式(如自行车、驾驶、步行和内部交通)的两点之间的距离 但在我的例子中,我想找出船航行中两个港口之间的距离。如果有人做过类似的工作,请分享你的知识 参考网站:[ 谢谢!我也遇到了同样的问题,并找到了解决办法 1) 首先,您必须创建一个世界地图光栅,其中包含船舶可以到达一个值的所有部分以及无法到达另一个值的所有位置 为此,我从一个所有国家边界的形状文件开

我有一个端口数据库,其中包含近10k的端口名及其相应的位置。我想找到端口之间的距离

根据我的理解,使用谷歌距离矩阵API,我们只能找到一组特定出行模式(如自行车、驾驶、步行和内部交通)的两点之间的距离

但在我的例子中,我想找出船航行中两个港口之间的距离。如果有人做过类似的工作,请分享你的知识

参考网站:[


谢谢!

我也遇到了同样的问题,并找到了解决办法

1) 首先,您必须创建一个世界地图光栅,其中包含船舶可以到达一个值的所有部分以及无法到达另一个值的所有位置

为此,我从一个所有国家边界的形状文件开始,使用QGIS手动添加苏伊士运河和巴拿马运河。然后我还添加了Artic中的冰。 我在R中使用包rgdal、raster和gdistance完成的其余工作

install.packages("rgdal")
install.packages("raster")
install.packages("gdistance")
library(rgdal)
library(raster)
library(gdistance)
我首先创建了一个空光栅:

 new  <- raster(ncol=360*5, nrow= 180*5)
 projection(new) <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"

new我也面临同样的问题,并找到了解决办法

1) 首先,您必须创建一个世界地图光栅,其中包含船舶可以到达一个值的所有部分以及无法到达另一个值的所有位置

为此,我从一个所有国家边界的形状文件开始,使用QGIS手动添加苏伊士运河和巴拿马运河。然后我还添加了Artic中的冰。 我在R中使用包rgdal、raster和gdistance完成的其余工作

install.packages("rgdal")
install.packages("raster")
install.packages("gdistance")
library(rgdal)
library(raster)
library(gdistance)
我首先创建了一个空光栅:

 new  <- raster(ncol=360*5, nrow= 180*5)
 projection(new) <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"

新的这篇文章就是钱。非常感谢详细的解决方案@Jan-Pieter。这个循环可以被
?optimize
的良好使用所取代。或者,这是一个有趣的包,作为你需要的所有工具:这篇文章就是钱。非常感谢详细的解决方案@Jan-Pieter。这个循环可以被一个良好的使用所取代f
?优化
。或者,这是一个有趣的软件包,它提供了您所需的所有工具:
install.packages("doParallel")
install.packages("foreach")
library(foreach)
library(doParallel)
# Create cluster with number of cores of the system.
cl <- makeCluster(detectCores())
registerDoParallel(cl)

i <- 1
nrow_data <- nrow(ports)
results <- foreach(i=icount(nrow_data), .combine='rbind', .packages="gdistance") %dopar% {
        A <- cbind(ports[i,1],ports[i,2])
        r <- matrix(NA, ncol=3,nrow=nrow_data)
        r[,1] <- i
        j <- i+1
        while(j<=nrow_data){
                r[j,2] <- j
                B <- cbind(ports[j,1],ports[j,2])
                tryCatch({
                        path <- shortestPath(p, A,B, output = "SpatialLines")
                        r[j,3] <- SpatialLinesLengths(path ,longlat=TRUE)
                }, error=function(e){})
                j <- j+1
        }
        r[1:nrow_data,]
}