Chọn giá trị chính xác cho proj4 chuỗi để đọc shapefile trong R?


14

Tôi đang có một shapefile của đa giác và một tệp CSV khác chứa danh sách các điểm dưới dạng cặp (Lat, Lng) ..

Tôi muốn kiểm tra từng cặp (lat, lng) từ tệp CSV mà đa giác nằm trong đó ..

Shapefile được chiếu và tệp proj đọc như sau:

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

Kế hoạch của tôi như sau:

  1. Đọc shapefile bằng readShapePolyhàm trong MapToolsgói R.
  2. Đọc tọa độ điểm từ tệp CSV vào khung dữ liệu và chuyển đổi nó thành SpatialPointsDataFrame
  3. Sử dụng overchức năng để xác định đa giác nó rơi vào bên trong.

Để làm như vậy, tôi cần chỉ định proj4stringtrong khi tải shapefile ở bước 1 và cũng chuyển đổi tọa độ từ tệp CSV sang cùng một hệ thống chiếu bằng cách sử dụng spTransformchức năng trước khi áp dụng overchức năng trong bước 3 vì nó yêu cầu các điểm và đa giác phải được theo cùng một hệ thống chiếu.

Bất kỳ ý tưởng về giá trị chính xác cho nội dung tệp proj được hiển thị ở trên?


Nếu (các) shapefile của bạn đã có phép chiếu được xác định, hãy sử dụng "readOGR" trong gói rgdal. Gói này là một trình bao bọc cho GDAL và thực sự thay thế chức năng đọc / ghi shapefile trong maptools. Hàm này xử lý tất cả các loại cấu trúc liên kết và giữ lại thông tin chiếu.
Jeffrey Evans

Khi tôi cố gắng loadign file hình sử dụng readOGRchức năng tôi một luôn có được không thể mở tập tin lỗi
Moustafa Alzantot

OK, Bây giờ tôi đã có thể đọc tệp bằng readOGR .. sử dụng summaryhàm cho SpatialPolygonDataFrameđối tượng đã cho tôi giá trị chính xác choproj4string
Moustaha Alzantot

Vâng, không có chi tiết về cách bạn đang sử dụng chức năng, thật khó để giúp bạn! Một phần của cú pháp là thư mục mà dữ liệu cư trú và bạn không cần phần mở rộng .shp trong tên tệp. Một cái gì đó như readOGR (getwd (), "YourShape") sẽ hoạt động nếu bạn có thư mục công việc được đặt ở cùng vị trí shepfile của bạn.
Jeffrey Evans

Cảm ơn @JeffreyEvans, nó đã hoạt động ngay bây giờ và tôi đã sử dụng nó để có được proj4 chuỗi
Moustaha Alzantot

Câu trả lời:


14

Các proj4 chuỗi là một chuỗi crs PROJ4 hợp lệ .

xem Làm cách nào tôi có thể nhận được chuỗi proj4 hoặc mã EPSG từ tệp shapefile .prj? Shapefile PRJ để bảng tra cứu PostGIS SRID?

Nói ngắn gọn:

  • Bạn có thể sử dụng gdalinfo như trong tài liệu tham khảo đầu tiên hoặc các ràng buộc GDAL Python như trong tài liệu tham khảo thứ hai.

Hoặc là

  • đi đến Prj2EPSG (một dịch vụ đơn giản để chuyển đổi thông tin trình chiếu văn bản nổi tiếng từ các tệp .prj thành mã EPSG tiêu chuẩn)
  • Nhập nội dung của tệp prj của bạn

nhập mô tả hình ảnh ở đây

  • kết quả là EPSG: 27700, vì vậy phiên bản đầu tiên của chuỗi PROJ4 là

    " + init = epsg: 27700 "

`Hoặc

nhập mô tả hình ảnh ở đây

  • nhấp vào Proj4 và chuỗi PROJ4 hoàn chỉnh là:

    " + proj = tmerc + lat_0 = 49 + lon_0 = -2 + k = 0.9996012717 + x_0 = 400000 + y_0 = -100000 + ellps = airy + datum = OSGB36 + đơn vị = m + no_defs "


10

Đây là một trang web rất tiện dụng để lấy mã EPSG cho một phép chiếu nhất định. Trong trường hợp của bạn, phép chiếu là "EPSG: 27700". Nếu bạn có các phép chiếu được xác định cho shapefile, bạn có thể chỉ định phép chiếu khi bạn tạo SpatialPointsDataFrame và sau đó sử dụng định nghĩa phép chiếu từ shapefile đã nhập của bạn. Sử dụng "readOGR" từ gói rgdal sẽ giữ lại các định nghĩa chiếu. Dưới đây là một ví dụ về việc gán và kéo các chuỗi tọa độ trên dữ liệu lớp 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))   
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.