QgsCoordinateReferenceSystem 클래스가 좌표계(Coordinate Reference Systems; CRS)를 캡슐화하고 있습니다. 몇 가지 방법으로 이 클래스의 인스턴스를 생성할 수 있습니다.
좌표계의 ID로 CRS 설정
# PostGIS SRID 4326 is allocated for WGS84
crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.PostgisCrsId)
QGIS는 모든 좌표계를 3가지 형태의 ID로 식별할 수 있습니다.
PostgisCrsId — PostGIS 데이터베이스에서 사용되는 ID
InternalCrsId — QGIS 데이터베이스에서 내부적으로 사용되는 ID
EpsgCrsId — EPSG 기구에서 부여한 ID
앞의 예시에서 두 번째 파라미터를 지정하지 않으면, 기본값인 PostGIS SRID가 사용됩니다.
WKT(well-known text)로 CRS 설정
wkt = 'GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]],'
PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295],'
AXIS["Longitude",EAST], AXIS["Latitude",NORTH]]'
crs = QgsCoordinateReferenceSystem(wkt)
유효하지 않은 CRS를 생성한 다음 create*() 함수 가운데 하나를 써서 초기화하는 방법도 있습니다. 다음은 투영을 초기화하기 위해 Proj4 문자열을 이용하는 예시 코드입니다.
crs = QgsCoordinateReferenceSystem()
crs.createFromProj4("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
좌표계를 성공적으로 생성했는지 (예를 들면 데이터베이스에서 검색한다거나 해서) 확인해보는 것이 좋습니다. isValid() 함수가 True 를 반환해야만 합니다.
좌표계를 초기화하기 위해 QGIS가 내부 데이터베이스인 srs.db 에서 적절한 값을 검색해야 한다는 사실에 주의하십시오. 때문에 독립적인 응용 프로그램을 만드는 경우 QgsApplication.setPrefixPath() 함수로 정확한 경로를 지정하지 않으면 데이터베이스를 찾지 못 할 것입니다. 플러그인을 개발하거나 QGIS 파이썬 콘솔에서 명령어를 실행하는 경우라면 신경 쓸 필요는 없습니다. 모든 것이 이미 설정돼 있으니까요.
좌표계 정보에는 다음과 같이 접근할 수 있습니다.
print "QGIS CRS ID:", crs.srsid()
print "PostGIS SRID:", crs.srid()
print "EPSG ID:", crs.epsg()
print "Description:", crs.description()
print "Projection Acronym:", crs.projectionAcronym()
print "Ellipsoid Acronym:", crs.ellipsoidAcronym()
print "Proj4 String:", crs.proj4String()
# check whether it's geographic or projected coordinate system
print "Is geographic:", crs.geographicFlag()
# check type of map units in this CRS (values defined in QGis::units enum)
print "Map units:", crs.mapUnits()
QgsCoordinateTransform 클래스를 사용하면 서로 다른 공간좌표계간의 상호 변환을 할 수 있습니다. 이 클래스를 이용하는 가장 간단한 방법은 입력 및 출력 CRS를 생성해서 이 좌표계들로 QgsCoordinateTransform 클래스 인스턴스를 생성하는 것입니다. 그런 다음 transform() 함수를 반복 호출해서 변환 작업을 수행하십시오. 기본적으로 정방향으로 변환하지만, 역방향 변환도 가능합니다.
crsSrc = QgsCoordinateReferenceSystem(4326) # WGS 84
crsDest = QgsCoordinateReferenceSystem(32633) # WGS 84 / UTM zone 33N
xform = QgsCoordinateTransform(crsSrc, crsDest)
# forward transformation: src -> dest
pt1 = xform.transform(QgsPoint(18,5))
print "Transformed point:", pt1
# inverse transformation: dest -> src
pt2 = xform.transform(pt1, QgsCoordinateTransform.ReverseTransform)
print "Transformed back:", pt2