gpt4 book ai didi

r - 如何使用 SpatialLinesDataFrame 计算行缓冲区

转载 作者:行者123 更新时间:2023-12-03 02:24:18 25 4
gpt4 key购买 nike

我想在具有 wgs84 坐标的线形文件周围创建一个缓冲区。

我准备了一个包含单线段和基准的形状文件:D_WGS_1984。之后,我使用“readOGR”命令将 .shp 加载到 R 中。

之后我尝试了 rgeos-package 中的 gBuffer 方法来计算缓冲区:

gBuffer(l2, width=1.0, quadsegs=5, capStyle="ROUND", joinStyle="ROUND", mitreLimit=0.01)) 
Warning:
In gBuffer(l2, width = 1, quadsegs = 5, capStyle = "ROUND", joinStyle = "ROUND", :
Spatial object is not projected; GEOS expects planar coordinates

显然该命令的坐标有问题。我尝试了一些方法,但没有找到解决方案。

我发现的围绕点的缓冲区的另一个示例如下,但我不确定如何在我的情况下使用它: http://r-sig-geo.2731867.n2.nabble.com/compute-buffer-from-point-shapefile-to-have-shapefile-td4574666.html

有什么想法吗?

最诚挚的问候,斯特凡

//更新:

简化为相关部分,代码如下:

require("rgeos")
require("rgdal")

l2=readOGR(dsn="C:/Maps", layer="osm_ms")

proj4string(l2) <- CRS("+proj=longlat")
l2.trans <- spTransform(l2, CRS("+proj=longlat"))
summary(l2.trans)

> Object of class SpatialLinesDataFrame
> Coordinates:
> min max
> x 7.478942 7.772171
> y 51.840318 52.058856
> Is projected: FALSE
> proj4string : [+proj=longlat +ellps=WGS84]
> Data attributes:

plot(l2.trans)
plot(gBuffer(l2.trans, width=1.0, quadsegs=5, capStyle="ROUND", joinStyle="ROUND", mitreLimit=0.01))

大概是这样的:

Is projected: FALSE is the reason for the problem, but i'm not sure how to use the spTranform and how to find the correct projection.

最佳答案

考虑一下您的缓冲区大小为 1.0 单位。以经纬度计算,即 1.0 度。这没有多大意义,因为 1 度 N-S 与 1 度 E-W 不同。 GEOS 试图阻止您做一些它认为有点奇怪的事情。

因此,您可以通过为它分配几乎任何投影坐标 CRS 字符串、执行缓冲区,然后将其分配回来来欺骗它。基本数字不会改变。例如,如果您这样做:

 proj4string(l2) = CRS("+init=epsg:27700")

您向系统撒谎,称这些数字是英国网格米。然后你进行缓冲,并给出你知道的真正度数的单位。 GEOS 使用数字进行计算,假设点位于网格(而不是球体)上。然后你只需将 CRS 设置回来即可。数字不会改变。

实际上,似乎有一个适合投影经纬度的 ESPG 代码,因此请忽略上一行,然后执行以下操作:

 proj4string(l2) = CRS("+init=epsg:3395") 

EPSG 代码数据库位于:http://www.epsg-registry.org/ - 请注意 epsg:3395 详细信息中的“范围”是“非常小比例的映射”。

如果您确实想要以米为单位的缓冲区,那么您必须使用 spTransform 转换为公制投影(在英国工作时我总是使用 epsg:27700),这确实会更改基础数字。

关于r - 如何使用 SpatialLinesDataFrame 计算行缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9735466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com