#pragma once #include "stdafx.h" // 情报数据通用结构 #include "QBStru.h" #include using namespace cv; // 经纬度点坐标 结构体 struct GeoCoordinatePoint { double Latitude; // 纬度 double Longitude; // 经度 }; // 功能:地理信息计算 // 作者:王家星 2014/10/20 // 模块一:计算距离和方位 //功能1:计算图像中两点间的距离和方位 //输入: 1. qbData 通用情报数据结构体 // 2. pt1 起点(像素坐标) // 3. pt2 终点(像素坐标) // 4. flags:flags = 0:标识pt1、pt2为几何校正前图像中的点 // flags = 1:标识pt1、pt2为几何校正后图像中的点 // //输出: 1. distance 距离(单位:米) // 2. azAngle 方位,起点到终点(单位:度) // 3. 返回值:计算有效返回true,否则返回false bool QBStruCalTwoPtsDistanceAzimuth(double &distance, double &azAngle, const QBStru *qbData, cv::Point pt1, cv::Point pt2, int flags = 0); //功能2:基于复接数据计算几何校正前图像中两点间的距离和方位 //输入: 1. frameData 复接数据结构体 // 2. pt1 起点(像素坐标) // 3. pt2 终点(像素坐标) // //输出: 1. distance 距离(单位:米) // 2. azAngle 方位,起点点到终点(单位:度) // 3. 返回值:计算有效返回true,否则返回false bool CalTwoPointsDistanceAzimuth(double &distance, double &azAngle, const struQB_FJ *frameData, cv::Point pt1, cv::Point pt2); //功能3:计算图像(几何校正后)中两点间的距离和方位 //输入: 1. img 图像数据结构体指针 // 2. pt1 起点(像素坐标) // 3. pt2 终点(像素坐标) //输出: 1. distance 距离 // 2. azAngle 方位,起点点到终点 // 3. 返回值:计算有效返回true,否则返回false bool ImgStruCalTwoPtsDistanceAzimuth(double &distance, double &azAngle, const ImgStru* img, cv::Point pt1, cv::Point pt2); //功能4:计算图像(几何校正后)中一点的经纬度 //输入: 1. img 图像数据结构体指针 // 2. pt 输入点(像素坐标) //输出: 1. PtLatLon 输入点的经纬度坐标 // 2. 返回值:计算有效返回true,否则返回false bool ImgStruCalOnePtLonLat(GeoCoordinatePoint& PtLatLon, const ImgStru* img, cv::Point pt); // 模块二:计算多边行面积 //功能5:计算图像中多点组成的多边形面积:对凹凸多边形均适用 //输入: 1. qbData 通用情报数据结构体 // 2. pts 指向点坐标的指针 // 3. count: 点数目 // 4. flags:flags = 0:标识points为几何校正前图像中的点 // flags = 1:标识points为几何校正后图像中的点 //输出: 1. area :多边形面积 // 2. 返回值:计算有效返回true,否则返回false bool QBStruCalPolygonArea(double& area, const QBStru *qbData, cv::Point* points, int count, int flags = 0); //功能6:计算图像中多点组成的多边形面积:对凹凸多边形均适用 //输入: 1. frameData 复接数据 // 2. pts 指向点坐标的指针 // 3. count: 点数目 //输出: 1. area :多边形面积 // 2. 返回值:计算有效返回true,否则返回false bool CalPolygonArea(double& area, const struQB_FJ *frameData, cv::Point* pts, int count); // 功能7:计算由一组经纬度点构成的多边形面积:对凹凸多边形均适用 // 输入: 1. pts 指向多个经纬度坐标组的指针 // 2. count 点数目 //输出: 1. area 面积 // 2. 返回值:计算有效返回true,否则返回false //说明: 点为顺时针或逆时针均可; bool CalPolygonArea(double& area, GeoCoordinatePoint* pts, int count); // 功能8:计算由一组平面坐标点构成的多边形面积:对凹凸多边形均适用 // 输入: 1. pts 指向多个点坐标组的指针 // 2. count 点数目 //输出: 1. area 面积 无单位 // 2. 返回值:计算有效返回true,否则返回false //说明: 点为顺时针或逆时针均可; bool CalPolygonArea(double& area, cv::Point2f* pts, int count);