การเลือกค่าที่ถูกต้องสำหรับ proj4string สำหรับการอ่าน shapefile ใน R


14

ฉันมีรูปร่างเป็นรูปหลายเหลี่ยมและไฟล์ CSV อีกไฟล์หนึ่งซึ่งมีรายการคะแนนเป็นคู่ (Lat, Lng)

ฉันต้องการตรวจสอบแต่ละคู่ (lat, lng) จากไฟล์ CSV ซึ่งมีรูปหลายเหลี่ยมอยู่ภายใน ..

shapefile ถูกฉายและไฟล์ 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. อ่าน shapefile โดยใช้readShapePolyฟังก์ชั่นในMapToolsแพ็คเกจR
  2. อ่านพิกัดจุดจากไฟล์ CSV ลงใน dataframe และแปลงเป็น SpatialPointsDataFrame
  3. ใช้overฟังก์ชันเพื่อกำหนดรูปหลายเหลี่ยมที่มันอยู่ข้างใน

ในการดำเนินการดังกล่าวฉันต้องระบุproj4stringขณะที่โหลดรูปร่างไฟล์ในขั้นตอนที่ 1 และเปลี่ยนพิกัดจากไฟล์ CSV เป็นระบบฉายภาพเดียวกันโดยใช้spTransformฟังก์ชั่นก่อนที่จะใช้overฟังก์ชั่นในขั้นตอนที่ 3 เนื่องจากต้องการจุดและรูปหลายเหลี่ยม อยู่ภายใต้ระบบการฉายเดียวกัน

แนวคิดใดเกี่ยวกับค่าที่ถูกต้องสำหรับเนื้อหาไฟล์ proj ที่แสดงด้านบน?


หาก shapefile ของคุณมีการฉายที่กำหนดไว้ให้ใช้ "readOGR" ในแพ็คเกจ rgdal แพคเกจนี้เป็น wrapper สำหรับ GDAL และแทนที่ฟังก์ชั่นการอ่าน / เขียน shapefile จริง ๆ ใน maptools ฟังก์ชันนี้จัดการทอพอโลยีทุกประเภทและเก็บข้อมูลการฉายภาพไว้
เจฟฟรีย์อีแวนส์

เมื่อฉันลองโหลดไฟล์รูปร่างโดยใช้readOGRฟังก์ชั่นฉันจะได้รับข้อผิดพลาดไม่สามารถเปิดไฟล์ได้
Moustafa Alzantot

ตกลงตอนนี้ฉันสามารถอ่านไฟล์โดยใช้ readOGR .. การใช้summaryฟังก์ชั่นสำหรับSpatialPolygonDataFrameวัตถุทำให้ฉันมีค่าที่ถูกต้องสำหรับproj4string
Moustafa Alzantot

ดีโดยไม่มีรายละเอียดเกี่ยวกับวิธีการใช้ฟังก์ชั่นมันยากที่จะช่วยคุณ! ส่วนหนึ่งของไวยากรณ์คือไดเรกทอรีที่มีข้อมูลอยู่และคุณไม่ต้องการนามสกุล. shp ในชื่อไฟล์ บางอย่างเช่น readOGR (getwd (), "YourShape") ควรใช้งานได้หากคุณตั้งค่าไดเรกทอรีงานไว้ที่เดิม shepfile ของคุณคือ
Jeffrey Evans

ขอบคุณ @JeffreyEvans มันใช้งานได้แล้วและฉันใช้มันเพื่อรับproj4string
Moustafa Alzantot

คำตอบ:


14

proj4string เป็นสตริงPROJ4 ที่ถูกต้อง

ดูฉันจะรับสตริง proj4 หรือรหัส EPSG จากไฟล์ shapefile .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 + datum = OSGB36 + หน่วย = m + no_defs "


10

นี่คือเว็บไซต์ที่มีประโยชน์มากสำหรับการดึงรหัส EPSG สำหรับการฉายภาพที่กำหนด ในกรณีของคุณการฉายภาพคือ "EPSG: 27700" หากคุณมีการฉายภาพที่กำหนดไว้สำหรับ shapefile คุณสามารถกำหนดการฉายภาพเมื่อคุณสร้าง 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))   
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.