Получение широты и долготы с помощью пространственных объектов в R

Я хочу получить широту и долготу из шейп-файла. До сих пор я только умею читать шейп-файл.

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

Но как я могу извлечь широту и долготу из centroids.mp?


person Filipe Ferminiano    schedule 09.05.2013    source источник
comment
Неясно, включает ли ваш вопрос вообще gdal, поскольку readShapePoints находится в maptools (а не в rgdal), чтобы действительно знать, будет ли решение координат () работать для долготы/широты, нам нужно увидеть больше, например, резюме (centroids.mp).   -  person mdsumner    schedule 09.05.2013
comment
Ты прав. Я уже отредактировал имя пакета. Извини за это.   -  person Filipe Ferminiano    schedule 10.05.2013
comment
В rgdal нет функции readShapePoints(), поэтому совершенно неясно, что вы сделали и что вы просите.   -  person Josh O'Brien    schedule 10.05.2013
comment
ты прав. Снова простите. Ареди изменил его.   -  person Filipe Ferminiano    schedule 10.05.2013
comment
Поместите детали о вашем вопросе в вопрос! 1. сделайте proj4string(centroids.mp) и сообщите нам, что это сообщает. 2. идите и прочитайте базовую документацию по sp/rgdal.   -  person mdsumner    schedule 10.05.2013


Ответы (3)


В этом вопросе есть несколько уровней.

Вы запрашиваете долготу и широту, но это может быть не система координат, используемая этим объектом. Вы можете получить координаты, как это

   coordinates(centroids.mp)

Обратите внимание, что «центроидами» будут все координаты, если это SpatialPointsDataFrame, список всех линейных координат, если это SpatialLinesDataFrame, и только центроиды, если это SpatialPolygonsDataFrame.

Координаты могут быть долготой и широтой, но объект может этого не знать. Использовать

   proj4string(centroids.mp) 

Если это «Н/П», то объект не знает (А). Если он включает «+proj=longlat», объект знает, и это долгота/широта (B). Если он включает "+proj=" и какое-то другое имя (не "longlat"), то объект знает, и это не долгота/широта (C).

Если (A), вам придется это выяснить, или это может быть очевидно из значений.

Если (B) вы закончили (хотя вам следует сначала проверить предположения, эти метаданные могут быть неверными).

Если (C) вы можете (довольно надежно, хотя вы должны сначала проверить предположения) преобразовать долготу в широту (на датуме WGS84) следующим образом:

 coordinates(spTransform(centroids.mp, CRS("+proj=longlat +datum=WGS84")))
person mdsumner    schedule 10.05.2013
comment
Это pro4string или proj4string? (Получил ошибку на первом) - person Bhargav Rao; 01.02.2016
comment
proj4string, извините, исправлено - person mdsumner; 01.02.2016

Используйте 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
#       [.......]
person Josh O'Brien    schedule 09.05.2013
comment
Я получаю сообщение об ошибке, когда пытаюсь открыть шейп-файл с помощью maptools. Это ошибка: Ошибка в getinfo.shape(filen): Ошибка при открытии файла SHP. С Rgdal я могу прочитать файл. Вы знаете, что происходит? - person Filipe Ferminiano; 09.05.2013
comment
Неа. Обычно я использую только readOGR() из rgdal для чтения векторных слоев. Если rgdal работает, почему бы просто не использовать его и забыть о maptools? - person Josh O'Brien; 09.05.2013
comment
Обратите внимание, что это может быть не долгота/широта, поэтому использование координат() должно включать проверку безопасности для proj4string(xx) - и при использовании rgdal это может также безопасно включать преобразование (хотя и делает это полностью общим наверное не безопасно) - person mdsumner; 09.05.2013
comment
Ты прав. Я неправильно указал пакеты, которые использую. Я использовал rgdal, а не maptools. Как я могу использовать proj4string(xx) для получения широты и долготы? - person Filipe Ferminiano; 10.05.2013

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)
person avallecam    schedule 02.03.2020