python将tif从wgs84转gcj02

# mark: 主要是dem从wgs84转成gcj02,步骤为wgs84的4326转成3857,之后投影进行偏移,再将偏移后的3857转成4326

from osgeo import gdal, osr

# 经纬度转投影
def tif4326To3857(input_file, output_file):
    options = gdal.WarpOptions(format='GTiff', srcSRS='EPSG:4326', dstSRS='EPSG:3857', width=1452)
    gdal.Warp(output_file, input_file, options=options)
    print('转换完成')

# 投影转经纬度
def tif3857To4326(input_file, output_file):
    options = gdal.WarpOptions(format='GTiff', srcSRS='EPSG:3857', dstSRS='EPSG:4326', width=1452)
    gdal.Warp(output_file, input_file, options=options)
    print('转换完成')

# wgs84投影偏移至gcj02
def tifWgs84ToGcj02(input_file, output_file):
    dataset = gdal.Open(input_file)
    im_width = dataset.RasterXSize #栅格矩阵的列数
    im_height = dataset.RasterYSize  # 栅格矩阵的列数
    im_array = dataset.GetRasterBand(1).ReadAsArray()
    im_projection = dataset.GetProjection()
    im_GeoTransform = dataset.GetGeoTransform()
    im_GeoTransform_new = (im_GeoTransform[0]+740.4591671, im_GeoTransform[1], im_GeoTransform[2], im_GeoTransform[3]+24.60901496, im_GeoTransform[4], im_GeoTransform[5])

    # 创建新的tif文件
    driver = gdal.GetDriverByName('GTiff')
    out_tif = driver.Create(output_file, im_width, im_height, 1, gdal.GDT_Float32)
    out_tif.SetGeoTransform(im_GeoTransform_new)
    out_tif.SetProjection(im_projection)  # 给新建图层赋予投影信息
    # # 获取地理坐标系统信息,用于选取需要的地理坐标系统
    # srs = osr.SpatialReference()
    # # 导入tif文件的坐标系
    # srs.ImportFromEPSG(3857)  # 定义输出的坐标系为"WGS 84",AUTHORITY["EPSG","4326"]
    # out_tif.SetProjection(srs.ExportToWkt())  # 给新建图层赋予投影信息

    # 数据写出
    out_tif.GetRasterBand(1).WriteArray(im_array)  # 将数据写入内存,此时没有写入硬盘
    out_tif.FlushCache()  # 将数据写入硬盘
    out_tif = None  # 注意必须关闭tif文件
    print('偏移完成')


if __name__ == '__main__':
    file1 = 'C:\\Users\\ZJZN\\Desktop\\tiff\\4326.tif'
    file2 = 'C:\\Users\\ZJZN\\Desktop\\tiff\\3857.tiff'
    file3 = 'C:\\Users\\ZJZN\\Desktop\\tiff\\3857-gcj02.tiff'
    file4 = 'C:\\Users\\ZJZN\\Desktop\\tiff\\4326-gcj02.tiff'
    tif4326To3857(file1, file2)
    tifWgs84ToGcj02(file2, file3)
    tif3857To4326(file3, file4)

tif4326To3857(file1, file2) 是将wgs84的经纬度转成投影
tifWgs84ToGcj02(file2, file3) 是将投影的进行偏移
tif3857To4326(file3, file4) 再将偏移后的投影转成经纬度

注意:im_GeoTransform_new 中的偏移量是各地根据实际计算得到的。

gcj02-3857投影wgs84-3857投影差值
x12587949.1312587208.67740.4591671
y4337622.2524337597.64324.60901496
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Vue 是一种流行的 JavaScript 框架,用于构建用户界面。它本身并没有提供 WGS84 到 GCJ02 的换功能,但可以通过引入第三方库来实现。 一种常用的第三方库是 `coordtransform`,它是一个 JavaScript 坐标换库,支持将 WGS84 坐标换为 GCJ02 坐标。 首先,你需要安装该库。你可以使用 npm 包管理器,在命令行中运行如下命令: ``` npm install coordtransform ``` 在 Vue 项目中引入 `coordtransform` 库。你可以在需要进行坐标换的组件中,使用如下代码引入: ```javascript import coordtransform from 'coordtransform' ``` 接下来,你可以调用 `coordtransform.wgs84togcj02` 方法来完成 WGS84 到 GCJ02 的换。该方法接受两个参数,分别是经度(longitude)和纬度(latitude),并返回一个包含换后经纬度的数组。 下面是一个 Vue 组件中实现 WGS84 到 GCJ02 换的示例代码: ```javascript import coordtransform from 'coordtransform' export default { data() { return { wgs84Longitude: 0, wgs84Latitude: 0, gcj02Longitude: 0, gcj02Latitude: 0 } }, methods: { convertWgs84ToGcj02() { const result = coordtransform.wgs84togcj02(this.wgs84Longitude, this.wgs84Latitude) this.gcj02Longitude = result[0] this.gcj02Latitude = result[1] } } } ``` 在这个示例中,我们定义了两个输入框 `wgs84Longitude` 和 `wgs84Latitude` 用于输入 WGS84 坐标的经度和纬度。当用户点击换按钮时,`convertWgs84ToGcj02` 方法将会被调用,完成 WGS84 到 GCJ02 的换,并将结果保存在 `gcj02Longitude` 和 `gcj02Latitude` 中。 需要注意的是,由于 GCJ02 是用于中国地区的坐标系统,所以该换只适用于中国地区的坐标换,对于其他地区的坐标换可能不准确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值