weixin_48115164 2022-01-13 17:39 采纳率: 66.7%
浏览 27
已结题

我想将这个读取点shp位置像素值的函数修改为读取面shp范围的像素值

我想将这个读取点shp位置像素值的函数修改为读取面shp范围的像素值


from osgeo import ogr
from osgeo import gdal
from osgeo.gdalconst import *
import os, sys, time
import numpy as np
from sklearn.svm import SVC
import pickle

# 获取样本点及其领域的值
def getPixels(shp, img):
    driver = ogr.GetDriverByName('ESRI Shapefile')
    ds = driver.Open(shp, 0)

    layer = ds.GetLayer()
    xValues = []
    yValues = []
    feature = layer.GetNextFeature()
    while feature:
        geometry = feature.GetGeometryRef()
        x = geometry.GetX()
        y = geometry.GetY()
        xValues.append(x)
        yValues.append(y)
        feature = layer.GetNextFeature()

    gdal.AllRegister()
    ds = gdal.Open(img, gdal.GA_ReadOnly)
    if ds is None:
        print('Could not open image')
        sys.exit(1)

    rows = ds.RasterYSize
    cols = ds.RasterXSize
    bands = ds.RasterCount
    transform = ds.GetGeoTransform()
    xOrigin = transform[0]
    yOrigin = transform[3]
    pixelWidth = transform[1]
    pixelHeight = transform[5]
    values = []
    for i in range(len(xValues)):
        x = xValues[i]
        y = yValues[i]
        xOffset = int((x - xOrigin) / pixelWidth)
        yOffset = int((y - yOrigin) / pixelHeight)
        s = str(int(x)) + ' ' + str(int(y)) + ' ' + str(xOffset) + ' ' + str(yOffset) + ' '
        pt = []
        for j in range(bands):
            band = ds.GetRasterBand(j + 1)
            data = band.ReadAsArray(xOffset - 5, yOffset - 5, 10, 10)  
            value = data
            value = value.flatten()
            pt.append(value)

        temp = []
        pt = array_change(pt, temp)
        values.append(pt)

    temp2 = []
    all_values = array_change(values, temp2)
    all_values = np.asarray(all_values)
    temp3 = []
    result_values = array_change2(all_values, temp3)
    result_values = np.asarray(result_values)
    return result_values


if __name__ == '__main__':
    img_p = 'G:/test/image/马尔康1.tif'  # 大影像的位置
    shp_path = 'G:/test/shp/'  # 样本点位置,这个样本点文件夹是0.shp,1.shp...这样的矢量文件,对应每个类别,和预测结果的0,1...一一对应
    temp_path = 'G:/test/temp/'  # 临时文件存放路径
    model_path = 'G:/test/model/model2017.pickle'  # 模型路径
    re_path = "G:/test/wangjiangxian_2017_s.tif"  # 结果路径

    time1 = time.time()
    class_list = []
    for shp in os.listdir(shp_path):
        if shp[-4:] == '.shp':
            shp_full_path = os.path.join(shp_path, shp)
            class_type = getPixels(shp_full_path, img_p)
            class_list.append(class_type)

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2022-01-17 10:05
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月21日
  • 创建了问题 1月13日

悬赏问题

  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决