【问题标题】:Obtaining Latitude and Longitude with from Spatial objects in R从R中的空间对象获取纬度和经度
【发布时间】:2013-05-03 23:01:27
【问题描述】:

我想从 shapefile 中获取纬度和经度。到目前为止,我只知道如何读取 shapefile。

library(rgdal)
centroids.mp <- readOGR(".","35DSE250GC_SIR")

但是如何从 centroids.mp 中提取纬度和经度?

【问题讨论】:

  • 不清楚您的问题是否包含“gdal”,因为 readShapePoints 在 maptools(不是 rgdal)中,要真正知道坐标()解决方案是否适用于经度/纬度,我们需要查看更多,例如摘要(centroids.mp)。
  • 你是对的。我已经编辑了包名。对此感到抱歉。
  • rgdal中没有readShapePoints()函数,所以超级不清楚你做了什么,你要求什么。
  • 你是对的。再次抱歉。 Aready 改变了它。
  • 将您的问题的详细信息放入问题中! 1. 执行 proj4string(centroids.mp) 并告诉我们报告的内容。 2. 去阅读一些 sp/rgdal 的基本文档。

标签: r gdal rgdal


【解决方案1】:

这个问题有几个层次。

您要求提供经度和纬度,但这可能不是该对象使用的坐标系。可以这样获取坐标

   coordinates(centroids.mp)

请注意,如果这是 SpatialPointsDataFrame,“质心”将是所有坐标,如果这是 SpatialLinesDataFrame,则将是所有线坐标的列表,如果这是 SpatialPolygonsDataFrame,则只是质心。

坐标可能是经度和纬度,但对象可能不知道。使用

   proj4string(centroids.mp) 

如果那是“NA”,那么对象不知道 (A)。如果它包含“+proj=longlat”,则该对象确实知道并且它们是经度/纬度 (B)。如果它包含“+proj=”和其他名称(不是“longlat”),那么该对象确实知道并且它不是经度/纬度 (C)。

如果 (A) 您必须找出答案,或者从值中可以明显看出。

如果 (B) 你完成了(虽然你应该先检查假设,这些元数据可能不正确)。

如果(C)你可以(相当可靠,虽然你应该先检查假设)转换为经度纬度(在基准 WGS84 上),如下所示:

 coordinates(spTransform(centroids.mp, CRS("+proj=longlat +datum=WGS84")))

【讨论】:

  • pro4string 还是proj4string? (第一个有错误)
  • proj4string,抱歉,现在修复
【解决方案2】:

使用coordinates(),像这样:

library(maptools)
xx <- readShapePoints(system.file("shapes/baltim.shp", package="maptools")[1])
coordinates(xx)
#     coords.x1 coords.x2
# 0       907.0     534.0
# 1       922.0     574.0
# 2       920.0     581.0
# 3       923.0     578.0
# 4       918.0     574.0
#       [.......]

【讨论】:

  • 尝试使用 maptools 打开形状文件时出现错误。这是错误:“getinfo.shape(filen) 中的错误:打开 SHP 文件时出错”。使用 Rgdal 我可以读取文件。你知道发生了什么吗?
  • 不。我通常只使用 rgdal 中的readOGR() 来读取矢量图层。如果 rgdal 有效,为什么不直接使用它而忘记 maptools
  • 请注意,它可能不是经度/纬度,因此使用坐标()应该包括对 proj4string(xx)的安全检查 - 如果使用 rgdal,这可以相当安全地包括转换以及(尽管完全通用可能并不安全)
  • 你是对的。我以错误的方式指定了我正在使用的软件包。我使用 rgdal 而不是 maptools。如何使用 proj4string(xx) 获取纬度和经度?
【解决方案3】:

st_coordinates 解决了这个问题,但是它从 sf 对象中删除了与坐标相关的协变量。如果您需要,我在这里分享一个替代方案:

# useful enough
sites_sf %>%
  st_coordinates()
#>           X        Y
#> 1 -80.14401 26.47901
#> 2 -80.10900 26.83000

# alternative to keep covariates within a tibble/sf
sites_sf %>%
  st_coordinates_tidy()
#> Joining, by = "rowname"
#> Simple feature collection with 2 features and 3 fields
#> geometry type:  POINT
#> dimension:      XY
#> bbox:           xmin: -80.14401 ymin: 26.479 xmax: -80.109 ymax: 26.83
#> epsg (SRID):    4326
#> proj4string:    +proj=longlat +datum=WGS84 +no_defs
#> # A tibble: 2 x 4
#>   gpx_point     X     Y             geometry
#>   <chr>     <dbl> <dbl>          <POINT [°]>
#> 1 a         -80.1  26.5 (-80.14401 26.47901)
#> 2 b         -80.1  26.8      (-80.109 26.83)

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2019-03-25
    • 2016-09-29
    • 1970-01-01
    相关资源
    最近更新 更多