R에서 shapefile을 읽기 위해 proj4string에 올바른 값을 선택 하시겠습니까?


14

다각형의 shapefile과 (Lat, Lng) 쌍으로 점 목록을 포함하는 다른 CSV 파일이 있습니다.

CSV 파일에서 각 다각형 (lat, lng) 쌍을 확인하고 싶습니다.

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. readShapePolyR MapTools패키지 의 함수를 사용하여 shapefile을 읽으십시오 .
  2. CSV 파일에서 점 좌표를 데이터 프레임으로 읽고이를 SpatialPointsDataFrame으로 변환하십시오.
  3. over어떤 폴리곤이 내부에 들어가는 지 결정하는 기능을 사용하십시오 .

이렇게하려면 proj4string1 단계에서 shapefile을로드 하는 동안 을 지정하고 3 단계 spTransformover함수를 적용하기 전에 점과 다각형이 있어야하므로 함수를 사용하여 CSV 파일의 좌표를 동일한 투영 시스템으로 변환 해야합니다. 동일한 프로젝션 시스템 아래에 있어야합니다.

위에 표시된 proj 파일 내용의 올바른 값은 무엇입니까?


shapefile에 이미 투영이 정의되어 있으면 rgdal 패키지에서 "readOGR"을 사용하십시오. 이 패키지는 GDAL의 래퍼이며 maptools의 shapefile 읽기 / 쓰기 기능을 대체합니다. 이 기능은 모든 토폴로지 유형을 처리하고 프로젝션 정보를 유지합니다.
Jeffrey Evans

readOGR함수를 사용하여 모양 파일을로드하려고 하면 항상 파일을 열 수 없음 오류
Moustafa Alzantot

자, 이제 readOGR을 사용하여 파일을 읽을 수있었습니다. 객체에 summary대한 함수를 사용 SpatialPolygonDataFrame하여proj4string
Moustafa Alzantot

글쎄, 당신이 기능을 사용하는 방법에 대한 세부 사항없이 당신을 돕기가 어렵습니다! 구문의 일부는 데이터가있는 디렉토리이며 파일 이름에 .shp 확장자가 필요하지 않습니다. 작업 디렉토리가 shepfile과 같은 위치로 설정되어 있으면 readOGR (getwd (), "YourShape")과 같은 것이 작동해야합니다.
Jeffrey Evans

감사 @JeffreyEvans는, 지금 근무하고 나는 얻기 위해 그것을 사용 proj4string
무스타파 Alzantot

답변:


14

proj4string은 유효한 PROJ4 crs 문자열입니다.

shapefile .prj 파일에서 proj4 문자열 또는 EPSG 코드를 얻는 방법을 참조하십시오 . Postfile SRID 조회 테이블에 Shapefile PRJ?

한마디로 :

  • 첫 번째 참조 에서처럼 gdalinfo 를 사용 하거나 두 번째 참조에서와 같이 GDAL Python 바인딩을 사용할 수 있습니다 .

또는

  • 이동 Prj2EPSG (표준 EPSG 코드로 .PRJ 파일에서 잘 알려진 텍스트 투영 정보를 변환하는 간단한 서비스)
  • 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 + units = m + no_defs "


10

다음은 주어진 투영에 대한 EPSG 코드를 검색 할 수있는 매우 편리한 웹 사이트 입니다. 귀하의 경우 투영은 "EPSG : 27700"입니다. 쉐이프 파일에 대해 투영이 정의 된 경우 SpatialPointsDataFrame을 생성 할 때 투영을 할당 한 다음 가져온 쉐이프 파일에서 투영 정의를 사용할 수 있습니다. rgdal 패키지에서 "readOGR"을 사용하면 투영 정의가 유지됩니다. 다음은 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.