【Python&GIS】无人机影像的像素坐标计算图片某点的地理/投影坐标
from osgeo import gdal, osr
def calculate_pixel_coordinates(image_path, geo_x, geo_y):
"""
计算无人机影像中某个地理坐标对应的像素坐标
:param image_path: 无人机影像的文件路径
:param geo_x: 地理坐标中的经度
:param geo_y: 地理坐标中的纬度
:return: 像素坐标 (x, y)
"""
# 打开影像
dataset = gdal.Open(image_path)
if dataset is None:
raise ValueError("无法打开影像文件")
# 获取投影信息
projection = osr.SpatialReference()
projection.ImportFromWkt(dataset.GetProjection())
# 创建地理坐标到投影坐标的转换器
coordinates = osr.CoordinateTransformation(projection, None)
# 转换地理坐标到投影坐标
success, point_osr = coordinates.TransformPoint(geo_x, geo_y, 0)
if not success:
raise ValueError("地理坐标转换为投影坐标失败")
# 计算像素坐标
geo_transform = dataset.GetGeoTransform()
pixel_x = int((point_osr[0] - geo_transform[0]) / geo_transform[1])
pixel_y = int((point_osr[1] - geo_transform[3]) / geo_transform[5])
return pixel_x, pixel_y
# 使用示例
image_path = 'path/to/your/drone/image.tif'
geo_x, geo_y = 116.407, 39.904 # 例如北京天安门的经纬度坐标
pixel_coords = calculate_pixel_coordinates(image_path, geo_x, geo_y)
print(f"像素坐标: ({pixel_coords[0]}, {pixel_coords[1]})")
这段代码首先导入了必要的GDAL模块,然后定义了一个函数calculate_pixel_coordinates
,该函数接受无人机影像的文件路径以及地理坐标,计算出对应的像素坐标。使用示例展示了如何调用这个函数。注意,你需要根据你的无人机影像路径和地理坐标修改示例中的image_path
和geo_x
, geo_y
变量。
评论已关闭