R'de şekil dosyası okuması için proj4string için doğru değeri seçme?


14

Çokgenler bir şekil dosyası ve (Lat, Lng) çiftleri olarak puan listesi içeren başka bir CSV dosyası yaşıyorum ..

Ben çokgen içine düşüyor CSV dosyasından her (lat, lng) çifti kontrol etmek istiyorum ..

Şekil dosyası yansıtılır ve proj dosyası şu şekilde okunur:

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]]

Planım şöyledir:

  1. readShapePolyR MapToolspaketindeki işlevi kullanarak şekil dosyasını okuyun .
  2. CSV dosyasından veri koordinatlarına puan koordinatlarını okuyun ve SpatialPointsDataFrame'e dönüştürün
  3. overHangi poligonun içine düşeceğini belirlemek için işlevi kullanın .

Bunu yapmak için, proj4stringadım 1'deki şekil dosyasını yüklerken belirtmem ve ayrıca noktalar ve çokgenlerin gerektirdiği için 3. adımdaki işlevi spTransformuygulamadan önce işlevi kullanarak CSV dosyasından koordinatları aynı projeksiyon sistemine dönüştürmem overgerekir. aynı projeksiyon sistemi altında olmak.

Yukarıda gösterilen proj dosyası içeriği için doğru değerin ne olması gerektiği hakkında bir fikriniz var mı?


Şekil dosyalarınızda zaten tanımlanan projeksiyon varsa, rgdal paketinde "readOGR" kullanın. Bu paket GDAL için bir sarıcıdır ve maptools'ta şekil dosyası okuma / yazma işlevinin yerini alır. Bu işlev tüm topoloji tiplerini işler ve projeksiyon bilgilerini tutar.
Jeffrey Evans

Şekil dosyasını readOGRişlevini kullanarak yüklemeyi denediğimde her zaman dosya hatası açılamıyorum
Moustafa Alzantot

Tamam, şimdi ben readOGR kullanarak dosyayı okumak mümkün .. nesne summaryiçin işlevini kullanarak SpatialPolygonDataFramebana doğru değeri verdiproj4string
Moustafa Alzantot

İşlevi nasıl kullandığınızla ilgili ayrıntılar olmadan size yardımcı olmak zordur! Sözdiziminin bir kısmı, verilerin bulunduğu dizindir ve dosya adında .shp uzantısına ihtiyacınız yoktur. Çalışma dizininizi shepfile dosyanızla aynı yere ayarladıysanız, readOGR (getwd (), "YourShape") gibi bir şey çalışmalıdır.
Jeffrey Evans

Teşekkürler @JeffreyEvans, şimdi çalıştı ve proj4string
Moustafa Alzantot

Yanıtlar:


14

Proj4string geçerli bir PROJ4 crs dizesidir.

bkz . Bir shapefile .prj dosyasından proj4 dizesini veya EPSG kodunu nasıl alabilirim? ve Şekil dosyası PRJ PostGIS SRID arama tablosu?

Kısacası:

  • Sen kullanabilirsiniz gdalinfo ilk başvuru veya ikinci referans olarak GDAL Python bağlamaları gibi.

Veya

  • Prj2EPSG'ye gidin (iyi bilinen metin projeksiyon bilgilerini .prj dosyalarından standart EPSG kodlarına dönüştürmek için basit bir hizmet)
  • Prj dosyanızın içeriğini girin

resim açıklamasını buraya girin

  • sonuç EPSG: 27700 olur, böylece PROJ4 dizesinin ilk sürümü

    " + init = epsg: 27700 "

`Ya

resim açıklamasını buraya girin

  • Proj4'e tıklayın ve PROJ4 dizesinin tamamı:

    " + proj = tmerc + lat_0 = 49 + lon_0 = -2 + k = 0.9996012717 + x_0 = 400000 + y_0 = -100000 + ellps = havadar + veri = OSGB36 + birim = m + no_defs "


10

İşte belirli bir projeksiyon için EPSG kodunu almak için çok kullanışlı bir web sitesi . Sizin durumunuzda projeksiyon "EPSG: 27700" şeklindedir. Şekil dosyası için tanımlanmış projeksiyonlarınız varsa, SpatialPointsDataFrame oluşturduğunuzda ve sonra içe aktarılan şekil dosyanızdan projeksiyon tanımını kullandığınızda projeksiyonu atayabilirsiniz. Rgdal paketinden "readOGR" kullanılması projeksiyon tanımlarını korur. Aşağıda, sp sınıfı verilerinde koordinat dizeleri atama ve çekme örneği verilmiştir.

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))   
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.