Вибір правильного значення для proj4string для читання формфайлу в R?


14

У мене є форм-формат полігонів та ще один файл CSV, який містить список точок як пари (Lat, Lng).

Я хочу перевірити для кожної пари (лат, lng) з файлу CSV, який багатокутник він потрапляє всередину ..

Файл форми проектується, а файл proj читає так:

PROJCS["Transverse_Mercator",GEOGCS["GCS_OSGB 1936",
DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]]

Мій план такий:

  1. Прочитайте файл форми за допомогою readShapePolyфункції в MapToolsпакеті R.
  2. Прочитайте координати точок з файлу CSV у кадр даних та перетворіть його в SpatialPointsDataFrame
  3. Використовуйте overфункцію, щоб визначити, до якого многокутника він потрапляє всередину.

Для цього мені потрібно вказати proj4stringчас завантаження файлу форми на кроці 1, а також перетворити координати з файлу CSV в ту саму систему проекцій, використовуючи spTransformфункцію перед застосуванням overфункції на кроці 3, оскільки це вимагає, щоб точки і полігони повинні бути за тією ж системою проекцій.

Будь-яке уявлення про те, яким має бути правильне значення вмісту файлу proj, показаного вище?


Якщо у ваших файлах форм вже визначена проекція, використовуйте "readOGR" в пакеті rgdal. Цей пакет є обгорткою для GDAL і дійсно витісняє функцію читання / запису формфайлу у maptools. Ця функція обробляє всі типи топології та зберігає інформацію про проекцію.
Джефрі Еванс

Коли я намагаюся загрузити файл форми за допомогою readOGRфункції, я завжди отримую Не можу відкрити помилку файлу
Moustafa Alzantot

Гаразд, тепер я зміг прочитати файл за допомогою readOGR .. використання summaryфункції SpatialPolygonDataFrameоб’єкта дало мені правильне значення дляproj4string
Moustafa Alzantot

Ну, без деталей про те, як ви використовуєте функцію, вам важко допомогти! Частина синтаксису - це каталог, в якому перебувають дані, і розширення .shp у імені файлу вам не потрібно. Щось на зразок readOGR (getwd (), "YourShape") має працювати, якщо у вас робочий каталог встановлений на тому самому місці, де і ваш шепфіл.
Джефрі Еванс

Дякую @JeffreyEvans, він працював зараз, і я використовував його, щоб отримати proj4string
Moustafa Alzantot

Відповіді:


14

Proj4string є дійсним рядком PROJ4 crs.

див. Як я можу отримати рядок proj4 або EPSG-код з файлу .prj? та Shapefile PRJ до таблиці пошуку PostGIS SRID?

коротко:

  • Ви можете використовувати gdalinfo, як у першій посилання, або GDAL Python прив'язки, як у другій посиланні.

Або

  • перейти до Prj2EPSG (простий сервіс для перетворення відомої інформації проекцій тексту з файлів .prj у стандартні коди EPSG)
  • Введіть вміст файлу prj

введіть тут опис зображення

  • результат - EPSG: 27700, тому перша версія рядка PROJ4 є

    " + init = epsg: 27700 "

`Або

введіть тут опис зображення

  • натисніть на Proj4 і весь рядок PROJ4:

    " + proj = tmerc + lat_0 = 49 + lon_0 = -2 + k = 0,9996012717 + x_0 = 400000 + y_0 = -100000 + ellps = airy + date = OSGB36 + units = m + no_defs "


10

Ось дуже зручний веб-сайт для отримання коду EPSG для заданої проекції. У вашому випадку проекція - "EPSG: 27700". Якщо для файлу форми визначені проекції, ви можете призначити проекцію під час створення SpatialPointsDataFrame, а потім використовувати визначення проекції з імпортованого файлу форм. Використання "readOGR" з пакету rgdal збереже визначення проекції. Ось приклад призначення та витягування рядків координат на даних класу sp.

require(sp)
require(rgdal)

# Use meuse dataset
data(meuse)

# Coerce into SpatialPointsDataframe
coordinates(meuse) <- ~x+y

# Assign projection
proj4string(meuse) <- CRS("+init=epsg:28992")

# Pull some observations and transform to Lat/Long
meuse.geo <- meuse[sample(dim(meuse)[1],10),]
  prj.LatLong <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")
    meuse.geo <- spTransform(meuse.geo, prj.LatLong)

# Pull projection string from meuse.geo and use in spTransform
#   to reproject meuse to lat/long  
( prj <- proj4string(meuse.geo) )   
meuse <- spTransform(meuse, CRS(prj))   
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.