真的狗398 2024-04-22 13:55 采纳率: 0%
浏览 8

地理坐标转换行列号问题

img


上次u给的这个函数也用不啊,我是2022 a版本,问题就是转换后出现负值,而且还超出矩阵

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-22 13:55
    关注

    引自免费微信小程序:皆我百晓生

    在MATLAB R2022a版本中,worldToPixel函数可能未包含在标准库中。你需要创建一个自定义函数来实现从经纬度到图像像素坐标的转换。这里提供一个基于UTM(Universal Transverse Mercator)投影的简单示例。首先确保你有proj4库支持,如果没有,请安装它。

    安装 proj4 库:

    !pip install pyproj
    

    然后在MATLAB中使用Python交互式环境调用这个库。下面是一个完整的例子,包括如何将经纬度转换为像素坐标,并处理可能出现的负值和超出矩阵范围的问题。

    function [px, py] = worldToPixel(info, lat, lon)
        % 使用Python交互式环境导入必要的库
        python.eval('import numpy as np')
        python.eval('from osgeo import ogr, osr')
    
        % 创建一个地理坐标系对象
        python.eval('src_srs = osr.SpatialReference()')
        python.eval('src_srs.ImportFromEPSG(4326)') % WGS84地理坐标系
    
        % 获取图像信息中的投影坐标系
        python.eval('dst_srs = osr.SpatialReference()')
        python.eval(['dst_srs.ImportFromWkt("' info.Projection '+")'])
    
        % 创建一个变换对象
        python.eval('transform = osr.CoordinateTransformation(src_srs, dst_srs)')
    
        % 将经纬度转换为UTM投影坐标
        utm_x, utm_y, _ = python.call('transform.TransformPoint', lon, lat)
    
        % 根据info.RefMatrix获取图像的大小
        width = size(info.RefMatrix, 2);
        height = size(info.RefMatrix, 1);
    
        % 计算像素坐标
        px = utm_x * width / info.RefMatrix.RasterXSize + 0.5;
        py = height - (utm_y * height / info.RefMatrix.RasterYSize + 0.5);
    
        % 处理可能出现的负值和超出矩阵范围的问题
        px(px < 1) = 1;
        px(px > width) = width;
        py(py < 1) = 1;
        py(py > height) = height;
    
    end
    

    接下来,你需要在你的代码中使用这个自定义的worldToPixel函数。确保你的info结构体包含了正确的投影信息,例如ProjectionRefMatrix等。以下是使用这个函数的例子:

    [x, y] = worldToPixel(info, lat, lon);
    

    这样应该能解决你的问题。注意,这个方法依赖于Python环境中的pyproj库,如果你没有这个库,你需要先安装。另外,确保你的数据是在合适的投影系统下,这里是基于UTM投影进行转换的。如果你的数据使用了其他投影系统,你需要相应地修改代码中的投影设置。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月22日

悬赏问题

  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥20 白日门传奇少一个启动区服和启动服务器的快捷键,东西都是全的 , 他们说套一个出来就行了 但我就是弄不好,谁看看,
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数