计算某个点与英国海岸之间的最小距离

2023-12-23

我一直在遵循所示的示例here https://stackoverflow.com/questions/21295302/calculating-minimum-distance-between-a-point-and-the-coast,但对于英国来说。因此,我使用 EPSG:27700 的英国 CRS,它具有以下投影字符串:

"+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs"

但是,我不确定要遵循的 wgs.84 代码。目前我正在使用:

"+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"

还尝试使用 datum=OSGB36 和 +ellps=airy 。

完整代码如下:

library(rgeos)
library(maptools)
library(rgdal)

epsg.27700 <- '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000    +ellps=airy +datum=OSGB36 +units=m +no_defs'
wgs.84    <- '+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0'

coast <- readShapeLines("ne_10m_coastline",CRS(wgs.84)) #have tried other shapefiles with the same issue
MAD   <- readWKT("POINT(-0.1830372 51.1197467)",p4s=CRS(wgs.84)) #Crawley, West Sussex
gDistance(MAD,coast)

[1] 0.28958
Warning messages:
1: In RGEOSDistanceFunc(spgeom1, spgeom2, byid, "rgeos_distance") :
  Spatial object 1 is not projected; GEOS expects planar coordinates
2: In RGEOSDistanceFunc(spgeom1, spgeom2, byid, "rgeos_distance") :
  Spatial object 2 is not projected; GEOS expects planar coordinates
3: In RGEOSDistanceFunc(spgeom1, spgeom2, byid, "rgeos_distance") :
  spgeom1 and spgeom2 have different proj4 strings

当尝试完成投影线时,会显示错误。

coast.proj <- spTransform(coast,CRS(Epsg.27700))

non finite transformation detected:
 [1] 111.01051  19.68378       Inf       Inf
Error in .spTransform_Line(input[[i]], to_args = to_args, from_args = from_args,  : 
 failure in Lines 22 Line 1 points 1
In addition: Warning message:
In .spTransform_Line(input[[i]], to_args = to_args, from_args = from_args,  :
 671 projected point(s) not finite

我无法理解我在这里做错了什么。


AFAICT 你没有做错任何事。错误消息告诉您全球海岸线形状文件中的某些坐标映射到Inf。我不确定为什么会发生这种情况,但通常期望特定区域的平面投影在全球范围内工作并不是一个好主意(尽管它确实在另一个问题中起作用......)。一种解决方法是将海岸线形状文件剪切到特定投影的边界框,然后转换剪切的形状文件。可以找到 EPSG.27700 的边界框here http://spatialreference.org/ref/epsg/osgb-1936-british-national-grid/.

# use bounding box for epsg.27700
# found here: http://spatialreference.org/ref/epsg/osgb-1936-british-national-grid/
bbx <- readWKT("POLYGON((-7.5600 49.9600, 1.7800 49.9600, 1.7800 60.8400, -7.5600 60.8400, -7.5600 49.9600))",
               p4s=CRS(wgs.84)) 
coast <- gIntersection(coast,bbx)  # just coastlines within bbx
# now transformation works
coast.proj   <- spTransform(coast,CRS(epsg.27700))
MAD.proj     <- spTransform(MAD,CRS(epsg.27700))
dist.27700   <- gDistance(MAD.proj,coast.proj)   # distance in sq.meters
dist.27700
# [1] 32153.23

所以最近的海岸线距离是32.2公里。我们还可以确定这是在海岸的什么地方

# identify the closest point
th     <- seq(0,2*pi,len=1000)
circle <- cbind(1.00001*dist.wgs84*cos(th)+MAD$x,1.00001*dist.wgs84*sin(th)+MAD$y)
sp.circle <- SpatialLines(list(Lines(list(Line(circle)),ID="1")),proj4string=CRS(wgs.84))
sp.pts <- gIntersection(sp.circle,coast)
sp.pts
# SpatialPoints:
#            x        y
# 1 -0.2019854 50.83079
# 1 -0.1997009 50.83064
# Coordinate Reference System (CRS) arguments: +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 

最后我们可以绘制结果。你应该always做这个。

# plot the results: plot is in CRS(wgs.84)
plot(coast, asp=1)
plot(bbx,add=T)
plot(MAD,add=T, col="red", pch=20)
plot(sp.circle,add=T, col="blue", lty=2)
lines(c(MAD$x,sp.pts$x),c(MAD$y,sp.pts$y),col="red")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算某个点与英国海岸之间的最小距离 的相关文章

  • 如何按用户定义(例如非字母顺序)对数据框进行排序[重复]

    这个问题在这里已经有答案了 给定一个数据框dna gt dna chrom start chr2 39482 chr1 203918 chr1 198282 chrX 7839028 chr17 3874 以下代码重新排序dna by ch
  • 多个动态滤镜更新闪亮

    我希望能够让 UI 输入闪亮 并根据用户之前的选择进行自我更新 因此 在下面的示例中 预期的行为是用户选择cyl vsor carb那么这将 过滤数据集mtcars用于创建绘图 即用户根据过滤条件调整绘图并 更新其他过滤器中的剩余输入选择
  • `dplyr::_join` 函数的命名向量“by”参数[重复]

    这个问题在这里已经有答案了 我正在写一个函数dplyr join两个数据框by不同的列 第一个数据帧的列名称动态指定为函数参数 我相信我需要使用rlang准引用 元编程 但未能找到可行的解决方案 我很感激任何建议 library dplyr
  • `as.matrix` 和 `as.data.frame` S3 方法与 S4 方法

    我注意到定义as matrix or as data frame作为 S4 类的 S3 方法 使例如lm formula objS4 and prcomp object 开箱即用 如果它们被定义为 S4 方法 则这不起作用 为什么将方法定义
  • 行对名称中具有特定模式的列求和

    我有一个像这样的数据表 DT lt ata table data table ref rep 3L 4L nb 12 15 i1 c 3 1e 05 0 044495 0 82244 0 322291 i2 c 0 000183 0 155
  • R ggplot 中的柯尔莫哥洛夫-斯米尔诺夫图

    我正在尝试在 r 中绘制 KS 图 一切似乎都很顺利 除了我只能使用颜色来可视化两个不同的样本而不是线型这一事实 我已经尝试过以下方法 sample1 lt SD13009 sample2 lt SD13009PB group lt c r
  • 更新 R6 对象实例中的方法定义

    如何更新 R6 类实例的方法定义 正如我所期望的 S3 使用当前的方法定义 对于 R5 参考类 我可以使用 myInstance myInstance copy 在 R6 中 我尝试了 myInstance myInstance clone
  • data.table 抛出“找不到对象”错误[重复]

    这个问题在这里已经有答案了 我有一个数据表 library data table mydt lt data table index 1 10 当我在全局环境中尝试它时 我可以让它工作 但当我在调试器中或在包测试中使用它时却无法工作 问题是我
  • 如何根据 ggplot2 中的汇总数据创建堆积条形图

    我正在尝试使用 ggplot 2 创建堆积条形图 我的宽格式数据如下所示 每个单元格中的数字是响应的频率 activity yes no dontknow Social events 27 3 3 Academic skills works
  • 当将遗传算法与 lme4 一起使用时,glmulti 无限期运行

    我在 R 中使用 glmulti 进行模型平均 我的模型中有大约 10 个变量 使得详尽的筛选不切实际 因此我需要使用遗传算法 GA 调用 method g 我需要包含随机效应 因此我使用 glmulti 作为 lme4 的包装器 此处提供
  • R 中 SVG 图形的最佳设备? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想从 R 导出 SVG 图形 似乎有两种选择 RSvgDevice 和 Cairo 有人可以对这些包发表评论吗 是默认的还是明显比另一个
  • 如何像在facet_grid中一样在facet_wrap中定位条带标签

    我想在使用时删除多余的条带标签facet wrap 并用两个变量进行分面 并且都是自由尺度的 例如 这个facet wrap下图的版本 library ggplot2 dt lt txhousing txhousing year in 20
  • 在 R 上安装 TDA 包时出错:目标“diag.o”的配方失败

    使用 Ubuntu 16 04 和 R 3 4 1 安装 R 包 TDA 时收到错误消息 它似乎与制作 CGAL diag cpp 和 或 diag o 最后的完整错误打印输出 有关 我仔细看了这个 在 R 上安装 TDA 包时出错 htt
  • R 数据结构的运算效率

    我想知道是否有任何关于操作效率的文档R 特别是那些与数据操作相关的 例如 我认为向数据框添加列是有效的 因为我猜您只是向链接列表添加一个元素 我想添加行会更慢 因为向量保存在数组中C level你必须分配一个新的长度数组n 1并将所有元素复
  • 是否有weighted.median()函数?

    我正在寻找类似形式的东西weighted mean 我通过搜索找到了一些解决方案 这些解决方案写出了整个函数 但希望有一些更用户友好的解决方案 以下软件包都有计算加权中位数的函数 aroma light isotone limma cwhm
  • 安装 2.15 后 ggplot2 中的 alpha 通道不起作用

    更新到 R 2 15 后 ggplot 中的 alpha 通道似乎不再起作用 plot rnorm 100 rnorm 100 bg cc000055 pch 21 工作得很好但是 qplot rnorm 100 rnorm 100 col
  • 使用data.table进行聚合

    经过 SO 用户的多次建议后 我终于尝试将我的代码转换为使用data table library data table DT lt data table plate paste0 plate rep 1 2 each 5 id rep c
  • 将 Excel 文件读入 R 并锁定单元格

    我有一个 Excel 电子表格要读入 R 它受密码保护并锁定了单元格 我可以使用 excel link 导入受密码保护的文件 但我不知道如何解锁 取消保护单元格 excel link 给了我这个错误 gt
  • 如何在R中分离两个图?

    每当我运行这段代码时 第一个图就会简单地覆盖前一个图 R中有没有办法分开得到两个图 plot pc title main abc xlab xx ylab yy plot pcs title main sdf xlab sdf ylab x
  • 如何在R中实现countifs函数(excel)

    我有一个包含 100000 行数据的数据集 我尝试做一些countifExcel 中的操作 但速度慢得惊人 所以我想知道R中是否可以完成这种操作 基本上 我想根据多个条件进行计数 例如 我可以指望职业和性别 row sex occupati

随机推荐

  • JBoss 7:JNDI 查找

    一段时间后 我远程访问了在 JBoss 7 1 1 下运行的无状态 EJB 使用属性对象 Properties jndiProps new Properties jndiProps put Context INITIAL CONTEXT F
  • Windows镜像如何使用Dockerfile的ARG指令

    我想在 dockerfile 中传递一个参数来构建我的 docker 映像 我在其他帖子和 Docker 手册中看到了如何执行此操作 但在我的情况下不起作用 这是我使用我的论点的代码摘录 ARG FirefoxVersion RUN pow
  • 在 Symfony2 中访问与 Bundle 相关的文件

    在 Symfony2 应用程序的路由配置中 我可以引用如下文件 somepage prefix someprefix resource SomeBundle Resources config config yml 有什么方法可以访问控制器或
  • libphp5.so 缺失

    我使用以下命令安装了 php 5 2 17 configure make make install 安装顺利 但我找不到 libphp5 so 文件 任何人都可以建议我出了什么问题以及如何修复此错误 尝试 libapache2 mod ph
  • 如何使用 mongoexport 导出排序数据?

    我在 mongo 中有一个集合 其中包含名称和计数字段 name myName count 5 是否可以使用 mongoexport 按计数对数据进行排序并导出为 json 从 MongoDB 2 6 开始 您可以通过 sort to mo
  • 使用 标签代替 图标有哪些优点/缺点?

    Facebook 的 HTML 和 Twitter Bootstrap HTML v3 之前 都使用 i 标签来显示图标 然而 从HTML5 规范 http www w3 org International questions qa b a
  • 使用 F# 中的 Applicative 功能构建记录

    假设有一个type r A int B string C int D string 和一些值 let aOptional int option let bOptional string option let cOptional int op
  • 相当于张量流中的 numpy.digitize

    我正在研究一个使用的自定义损失函数numpy digitize 内部 对于一组参数 损失最小化bins数字化方法中使用的值 为了使用tensorflow优化器 我想知道是否有等效的实现digitize in tensorflow 如果没有
  • Google 图表背景颜色不适用于示例代码

    我使用的代码来自示例页面 https developers google com chart interactive docs gallery barchart创建水平条形图 选项backgroundColor适用于其他图表类型 例如thi
  • MooTools 的 Function.prototype.overloadSetter() 是做什么的?

    我正在浏览 MooTools 源代码来尝试理解它 implement and extend 公用事业 每个的定义指的是这样定义的函数 var enumerables true for var i in toString 1 enumerab
  • 禁用 RStudio 中的所有断点

    有没有办法禁用 RStudio 中的所有断点 我查看了 RStudio 文档并进行了谷歌搜索 但找不到方法 我也很好奇 特别想了解断点的概述 I ran grep在我的项目文件夹中 这是我发现的 首先 打开 RStudio 后 断点不会显示
  • swift 中的 T.Type 是什么

    谁能告诉我什么是T Type当我使用JSONDecoder decode 我认为它是解码我编码的数据的类型 很多例子都使用上面的方法 如下所示 JSONEncoder decode People self from data 如果我检查该方
  • 插件“react”中的错误与之间发生冲突

    我在我的主 React 应用程序中使用另一个 React 存储库 我们称之为设计 作为 git 子模块 我使用 webpack 来构建主应用程序 将子模块集成到应用程序中后 我在 webpack 构建过程中收到以下错误 ERROR in P
  • 如何使用 widgets.SelectMultiple() 交互地选择要绘制的系列?

    背景 类似的问题已被问到here https stackoverflow com questions 12891860 interactive selection of series in a matplotlib plot 但不是很具体
  • Angular 6 库共享样式表

    如何设置 index scss 并将变量 混合等的全局样式表导入到 Angular 6 库中 Angular CLI 生成一个带有根组件和组件 scss 的 lib 但添加或导入到根组件的样式不可用于子组件 默认情况下 封装样式是有意义的
  • 在 SQL Server Management Studio 中将持久计算列标记为 NOT NULL

    在 SQL Server 2005 中可以创建一个既持久又定义为 NOT NULL 不能包含空值 的计算列 当使用像 Linq2Sql 这样的库时 如果我们想避免大量的手动工作来确保我们的代码列 始终 具有值 那么第二个属性非常重要 使用直
  • Android 1.5 Gradle Sync 从未完成

    我最近升级到 Android Studio 1 5 然而 更新后 Gradle 陷入 正在刷新 项目 Gradle 项目 并且永远不会停止 以前版本的 Android Studio 运行得很好 我该如何解决这个问题 我使用的是 Ubuntu
  • 在轴上手动定位刻度 - D3

    我正在使用 d3 制作图表 我想将刻度线放在 xAxis 上我指定的位置 例如 如果我想要以下位置的刻度线 11 0 11 18 30 42 我该怎么做 Thanks 请参阅文档 axis tickValues https github c
  • 如何限制仅从 NLB 对 EC2 的访问

    Question 有没有办法确保访问仅来自特定的 NLB 在目前NLB的限制下 不知道有没有办法 局限性 AWS Network Load Balancer NLB 没有安全组 SG 因此无法使用 SG 来验证源是否为 NLB NLB 实例
  • 计算某个点与英国海岸之间的最小距离

    我一直在遵循所示的示例here https stackoverflow com questions 21295302 calculating minimum distance between a point and the coast 但对