Вибір правильного значення для 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.