|
|
#pragma once
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
// 情报数据通用结构
|
|
|
#include "QBStru.h"
|
|
|
|
|
|
#include <opencv2\opencv.hpp>
|
|
|
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);
|
|
|
|
|
|
|