加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

命令行记录-初始Proj4包以及栅格数据投影转换

发布时间:2020-12-15 07:29:40 所属栏目:Java 来源:网络整理
导读:1、本篇内容包含两个部分,一是使用PROJ4包对点进行投影转换,二是栅格数据投影转换的示例 2、 #3另外一个投影包PROJ4 from pyproj import Proj,Geod,transform #projection1:UTM zone15,grs80 ellipse,NAD83 datum #(defined by epsg code 26915) p1=Proj(

1、本篇内容包含两个部分,一是使用PROJ4包对点进行投影转换,二是栅格数据投影转换的示例

2、

#3另外一个投影包PROJ4
from pyproj import Proj,Geod,transform

#projection1:UTM zone15,grs80 ellipse,NAD83 datum
#(defined by epsg code 26915)
p1=Proj(init=‘epsg:26915‘)
#projection2:UTM zone 15,clrk66 ellipse,NAD27 datum
p2=Proj(init=‘epsg:26715‘)
#find x,y of Jefferson City,MO.
x1,y1=p1(-92.199881,38.56694)
#transform this point to projection 2 coordinates.
x2,y2=transform(p1,p2,x1,y1)

‘%9.3f %11.3f‘ % (x1,y1)

输出:‘569704.566 4269024.671‘
‘%9.3f %11.3f‘ % (x2,y2)

输出:‘569722.342 4268814.028‘
‘%8.3f %5.3f‘ % p2(x2,y2,inverse=True)

输出:‘ -92.200 38.567‘

#process 3 points at a time in a tuple
lats = (38.83,39.32,38.75) # Columbia,KC and StL Missouri
lons = (-92.22,-94.72,-90.37)
x1,y1 = p1(lons,lats)
x2,y2 = transform(p1,y1)
xy=x1+y1%这里类似于配对
‘%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f‘ % xy

输出:‘567703.344 351730.944 728553.093 4298200.739 4353698.725? 4292319.005‘
xy = x2+y2
‘%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f‘ % xy

输出:‘567721.149 351747.558 728569.133 4297989.112 4353489.645? 4292106.305‘
lons,lats = p2(x2,inverse=True)
xy = lons+lats
‘%8.3f %8.3f %8.3f %5.3f %5.3f %5.3f‘ % xy
输出:‘ -92.220? -94.720? -90.370 38.830 39.320 38.750‘
# test datum shifting,installation of extra datum grid files.
p1 = Proj(proj=‘latlong‘,datum=‘WGS84‘)
x1 = -111.5; y1 = 45.25919444444
p2 = Proj(proj="utm",zone=10,datum=‘NAD27‘)
x2,y1)
"%s %s" % (str(x2)[:9],str(y2)[:9])
输出:‘1402291.0 5076289.5‘


#4栅格数据投影转换
from osgeo import gdal,osr
from osgeo.gdalconst import *
#源图像投影,目标图像投影
sr1=osr.SpatialReference()
sr1.ImportFromEPSG(32650) #WGS84/UTM ZONE 50
sr2=osr.SpatialReference()
sr2.ImportFromEPSG(3857) #Google,Web Mercator
coordTrans=osr.CoordinateTransformation(sr1,sr2)

#打开源图像文件
ds1=gdal.Open("fdem.tif")
#insr=ds1.GetProjection()#WGS84/UTM ZONE 50
mat1=ds1.GetGeoTransform()
#print(mat1)
#(409294.88696681266,27.376482012944024,0.0,4423871.083377095,-27.376482012944006)

#源图像的左上角与右下角像素,在目标图像中的坐标
(ulx,uly,ulz)=coordTrans.TransformPoint(mat1[0],mat1[3])
(lrx,lry,lrz)=coordTrans.TransformPoint(mat1[0]+mat1[1]*ds1.RasterXSize,
??????????????????????????????????????? mat1[3]+mat1[5]*ds1.RasterYSize)

#创建目标图像文件(空白图像),行列数、波段数以及数值类型仍等同原图像
driver=gdal.GetDriverByName("GTiff")
ds2=driver.Create("fdem_lonlat.tif",ds1.RasterXSize,ds1.RasterYSize,1,GDT_UInt16)


resolution=(int)((lrx-ulx)/ds1.RasterXSize)#分辨率
mat2=[ulx,resolution,-resolution]#输出图像的6个仿射变换系数
ds2.SetGeoTransform(mat2)
ds2.SetProjection(sr2.ExportToWkt())#投影,文本方式

#投影转换与重采样(gdal.GRA_NearestNeighbour,gdal.GRA_Cubic,gdal.GRA_Bilinear)
gdal.ReprojectImage(ds1,ds2,sr1.ExportToWkt(),sr2.ExportToWkt(),gdal.GRA_Bilinear)

#关闭
ds1=None
ds2=None

3、投影转换结果

?

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读