使用R中的Spatial对象获取纬度和经度

时间:2013-05-09 12:54:18

标签: r gdal rgdal

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

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

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

3 个答案:

答案 0 :(得分:8)

这个问题有几个层次。

您要求经度和纬度,但这可能不是此对象使用的坐标系。你可以得到像这样的坐标

   coordinates(centroids.mp)

请注意,如果这是一个SpatialPointsDataFrame,则“centroids”将是所有坐标,如果这是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")))

答案 1 :(得分:4)

使用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
#       [.......]

答案 2 :(得分:1)

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)