2013-05-09 3 views
1

Я хочу получить широту и долготу из шейп-файла. До сих пор я знаю только, как читать шейп-файл.Получение широты и долготы с пространственными объектами в R

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

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

+0

Это не ясно, что ваш вопрос включает в себя «GDAL» на всех поскольку readShapePoints находится в maptools (not rgdal), чтобы действительно знать, будет ли решение координат() работать на долготу/широту, нам нужно увидеть больше, например summary (centroids.mp). – mdsumner

+0

Вы правы. Я уже редактировал имя пакета. Прошу прощения. –

+0

Нет функции 'readShapePoints()' в ** rgdal **, поэтому совершенно непонятно, что вы сделали и что вы просите. –

ответ

8

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

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

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"))) 
+0

Это 'pro4string' или' proj4string'?(Получил ошибку на первом) –

+0

proj4string, извините, исправлено сейчас – mdsumner

+0

Спасибо, теперь он отлично работает :) –

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 
#  [.......] 
+0

Я получаю сообщение об ошибке при попытке открыть файл формы с помощью maptools. Это ошибка: «Ошибка в getinfo.shape (filen): ошибка открытия SHP-файла». С Rgdal я могу прочитать файл. Вы знаете, что происходит? –

+0

Нет. Обычно я использую 'readOGR()' из ** rgdal ** для чтения в векторных слоях. Если ** rgdal ** работает, почему бы просто не использовать его и не забыть о ** maptools **? –

+0

Обратите внимание, что это может не быть долготой/широтой, поэтому использование координат() должно включать проверку безопасности на proj4string (xx) - и, если вы используете rgdal, это вполне справедливо может включать преобразование (хотя это делает полностью вообще, вероятно, небезопасно) – mdsumner

 Смежные вопросы

  • Нет связанных вопросов^_^