首先提几个设定:
(1)设空间坐标系的横轴为x轴,纵轴为y轴;
(2)若数据为地理坐标,则数值表示为经纬度,若数据为投影坐标,则数值表示为方里网;
(3)像元宽度:单个像素在地理坐标系x轴上的长度;
(4)像元高度:单个像素在地理坐标系y轴上的长度;
(5)影像指向:地图的绘制方向,通常x轴上向东为正方向,y轴上向北为正方向。
一、GeoTIFF
利用Package osgeo :: Module gdal :: Class Dataset :: Function GetGeoTransform,可以获取GeoTIFF中的空间参考。参考代码如下:
# -*- coding:utf-8 -*-
from osgeo import gdal
# this allows GDAL to throw Python Exceptions
gdal.UseExceptions()
gtif_path = r'D:\GIS\Samples\Lhasa.tif'
# open dataset
gtif = gdal.Open(gtif_path)
gtrans = gtif.GetGeoTransform()
print(gtrans)
输出结果为:
(10139107.183347218, 11.779945786963165, 0.0, 3464923.0918, 0.0, -11.779945786963165)
共6个参数,其代表的意义如下:
[0]左上角点x值(最小x值);
[1]像元宽度;
[2]影像东西指向,通常指东,为0;
[3]左上角点y值(最大y值);
[4]影像南北指向,通常指北,为0;
[5]像元高度。
二、Shapefile
利用Package osgeo :: Module ogr :: Class Geometry :: Function GetEnvelope可获取Shapfile文件中Geomtry的地理参考。参考代码如下:
# -*- coding:utf-8 -*-
from osgeo import ogr
shp_path = r'D:\GIS\Samples\Shapefile\gadm36_AUS_shp\gadm36_AUS_2.shp'
driver = ogr.GetDriverByName('ESRI Shapefile')
shp = driver.Open(shp_path, 0) # 0 means read-only. 1 means writeable.
lyr = shp.GetLayer()
feat = lyr.GetNextFeature()
geom = feat.GetGeometryRef()
ext = geom.GetEnvelope()
print(ext)
输出结果为:
(122.96166992187511, 123.55563354492188, -12.532129287719727, -12.237127304077092)
共4个参数,其代表的意义如下:
[0]最左(小)x值;
[1]最右(大)x值;
[2]最下(小)y值;
[3]最上(大)y值。
三、World File
World File为Esri公司制定的给普通栅格图片添加空间参考的纯文本文件格式,可以使用记事本直接打开。World File文件名和主图片文件名一致,后缀名一般为3个字符,由主图片后缀名缩写加上字符w(如pgw、tfw、jgw等)。虽后缀名各有不同,但其读写方式与其他纯文本文件格式(如txt)一致。参考代码如下:
# -*- coding:utf-8 -*-
wf_path = r'D:\GIS\Samples\PNG\Arraial do Cabo.pgw'
with open(wf_path, 'r') as f:
lines = f.readlines()
lines = [x.strip() for x in lines if x.strip()!='']
print(lines)
输出结果为:
['4.13411458699533529', '0', '0', '-4.13411458699533529', '-4680100.27214270643889904', '-2627341.84841968351975083']
共6个参数,其代表的意义如下:
[0]像元宽度;
[1]影像东西指向,通常指东,为0;
[2]影像南北指向,通常指北,为0;
[3]像元高度;
[4]左上角点x值(最小x值);
[5]左上角点y值(最大y值)。
PS:GeoTranform与World File之间的映射关系
GeoTranform -> World File
0->4, 1->0, 2->1, 3->5, 4->2, 5->3
World File -> GeoTranform
0->1, 1->2, 2->4, 3->5, 4->0, 5->3