python逐像素获取栅格经纬度分别保存在两个矩阵中(代码收藏)

 更新时间:2024年01月23日 09:54:16   作者:悟矣言兮 科研萌新  
这篇文章主要介绍了python逐像素获取栅格经纬度分别保存在两个矩阵中的实现示例,建议收藏代码总会用到,有需要的朋友可以借鉴参考下,希望能够有所帮助

python逐像素获取栅格经纬度

需求目的

使用python逐像素获取栅格经纬度,并将经度和纬度分别保存为矩阵,两个矩阵像素分别记录栅格对应像素位置的经度和纬度。

需求分析

如果仅需要map产生迭代器,速度最快,但是将迭代器转换为list,array等过程速度很慢,没有for循环直接产生列表矩阵速度快。

实现示例

# -*- coding: utf-8 -*-
"""
任何问题联系邮箱:
chinesevoice@163.com
"""
from osgeo import gdal
import numpy as np
from itertools import product
from functools import partial
# import multiprocessing as mp
import time
gdal.AllRegister
dataset = gdal.Open('218-2020-07-01-2020-10-01.tif',gdal.GA_ReadOnly)
trans = dataset.GetGeoTransform()
proj = dataset.GetProjection()
rows = dataset.RasterYSize
cols = dataset.RasterXSize
print('坐标六参数:',trans)
print('投影参数:',proj)
print('行列数:',rows,cols)
#==========第一种方法===========
#行列转经纬度
def rowcol2lonlat(extend,xsize,ysize):
    #xsize表示列
    lon = extend[0] + xsize * extend[1] + ysize * extend[2] + extend[1]/2
    lat = extend[3] + xsize * extend[4] + ysize * extend[5] + extend[5]/2
    return lon,lat
#分别获取两个矩阵
def get_lon_lat_array(row,col,tran):
    lon_array = np.repeat(np.nan, row*col).reshape(row,col)
    lat_array = np.repeat(np.nan, row*col).reshape(row,col)
    for r in range(0,row):
        for c in range(0,col):
            lon_array[r,c],lat_array[r,c] = rowcol2lonlat(tran,c,r)
    return lon_array,lat_array
ts = time.time()
lon_array,lat_array = get_lon_lat_array(rows,cols,trans)
# print(lon_array.shape,lat_array.shape)
# print(lon_array.view())
te = time.time()
print('第一种方法用时:',te-ts)
#==========第二种方法===========
def get_lon_lat_array_2(row,col,tran):
    rowlst = np.arange(0, row,step = 1)
    collst = np.arange(0, col,step = 1)
    #rc_comb = product(rowlst,collst)
    rc2lon = lambda rowcol,tran:tran[0] + rowcol[1] * tran[1] + rowcol[0] * tran[2] + tran[1]/2
    rc2lat = lambda rowcol,tran:tran[3] + rowcol[1] * tran[4] + rowcol[0] * tran[5] + tran[5]/2
    # lon_array = np.array(list(map(partial(rc2lon,tran = trans),product(rowlst,collst)))).reshape(row,col)
    # lat_array = np.array(list(map(partial(rc2lat,tran = trans),product(rowlst,collst)))).reshape(row,col)
    # lon_array = np.fromiter(map(partial(rc2lon,tran = trans),product(rowlst,collst)),dtype=np.float64).reshape(row,col)
    # lat_array = np.fromiter(map(partial(rc2lat,tran = trans),product(rowlst,collst)),dtype=np.float64).reshape(row,col)
    lon_array = [*map(partial(rc2lon,tran = trans),product(rowlst,collst))]
    lat_array = [*map(partial(rc2lat,tran = trans),product(rowlst,collst))]
    return lon_array,lat_array
ts2 = time.time()
lon_array2,lat_array2 = get_lon_lat_array_2(rows,cols,trans)
# print(lon_array2.shape,lat_array2.shape)
# print(lon_array2.view())
te2 = time.time()
print('第二种方法用时:',te2-ts2)

以上就是python逐像素获取栅格经纬度分别保存在两个矩阵中(代码收藏)的详细内容,更多关于python栅格经纬度获取保存的资料请关注脚本之家其它相关文章!

相关文章

  • NumPy 通用函数(ufunc)的实现

    NumPy 通用函数(ufunc)的实现

    本文主要介绍了NumPy 通用函数(ufunc)的实现,包括数学运算类、统计与聚合类和数组操作类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-01-01
  • 在python的类中动态添加属性与生成对象

    在python的类中动态添加属性与生成对象

    这篇文章给大家介绍了如何在python的类中动态添加属性和生成对象,文中通过几个方面来进行介绍,对这感兴趣的朋友们可以学习学习。
    2016-09-09
  • python机器学习实战之最近邻kNN分类器

    python机器学习实战之最近邻kNN分类器

    这篇文章主要介绍了python机器学习实战之最近邻kNN分类器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Python中字典的相关操作介绍

    Python中字典的相关操作介绍

    大家好,本篇文章主要讲的是Python中字典的相关操作介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • python单例设计模式实现解析

    python单例设计模式实现解析

    这篇文章主要介绍了python单例设计模式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java编程迭代地删除文件夹及其下的所有文件实例

    Java编程迭代地删除文件夹及其下的所有文件实例

    这篇文章主要介绍了Java编程迭代地删除文件夹及其下的所有文件实例,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 基于PyTorch实现EdgeCNN的实战教程

    基于PyTorch实现EdgeCNN的实战教程

    本文我们将使用PyTorch来简易实现一个EdgeCNN,不使用PyG库,让新手可以理解如何PyTorch来搭建一个简易的图网络实例demo,感兴趣的朋友跟随小编一起看看吧
    2023-02-02
  • python常见的占位符总结及用法

    python常见的占位符总结及用法

    在本篇文章里小编给大家整理的是一篇关于python常见的占位符总结及用法,有兴趣的朋友们可以跟着学习参考下。
    2021-07-07
  • Python中一个函数返回多个值的实现方法

    Python中一个函数返回多个值的实现方法

    在Python编程中,我们经常遇到需要从一个函数中返回多个值的情况,虽然许多编程语言只允许函数返回单个值,但Python提供了多种优雅的方式来解决这个问题,本文将详细介绍Python中函数返回多个值的各种实现方法,需要的朋友可以参考下
    2026-05-05
  • Pandas 数据框增、删、改、查、去重、抽样基本操作方法

    Pandas 数据框增、删、改、查、去重、抽样基本操作方法

    下面小编就为大家分享一篇Pandas 数据框增、删、改、查、去重、抽样基本操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04

最新评论