111 lines
2.4 KiB
C++
111 lines
2.4 KiB
C++
#pragma once
|
||
|
||
|
||
#ifndef GEOOPERATOR_H
|
||
#define GEOOPERATOR_H
|
||
|
||
#include "BaseConstVariable.h"
|
||
#include <Eigen/Core>
|
||
#include <Eigen/Dense>
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include <memory.h>
|
||
#include <string.h>
|
||
#include <iostream>
|
||
|
||
/// <summary>
|
||
/// 三维向量,坐标表达
|
||
/// </summary>
|
||
struct Landpoint // 点 SAR影像的像素坐标;
|
||
{
|
||
/// <summary>
|
||
/// 经度x
|
||
/// </summary>
|
||
double lon; // 经度x lon pixel_col
|
||
/// <summary>
|
||
/// 纬度y
|
||
/// </summary>
|
||
double lat; // 纬度y lat pixel_row
|
||
/// <summary>
|
||
/// 高度z
|
||
/// </summary>
|
||
double ati; // 高程z ati pixel_time
|
||
};
|
||
struct Point_3d {
|
||
double x;
|
||
double y;
|
||
double z;
|
||
};
|
||
|
||
/// <summary>
|
||
/// 将经纬度转换为地固参心坐标系
|
||
/// </summary>
|
||
/// <param name="XYZP">经纬度点--degree</param>
|
||
/// <returns>投影坐标系点</returns>
|
||
Landpoint LLA2XYZ(const Landpoint& LLA);
|
||
Eigen::MatrixXd LLA2XYZ(Eigen::MatrixXd landpoint);
|
||
|
||
/// <summary>
|
||
/// 将地固参心坐标系转换为经纬度
|
||
/// </summary>
|
||
/// <param name="XYZ">固参心坐标系</param>
|
||
/// <returns>经纬度--degree</returns>
|
||
Landpoint XYZ2LLA(const Landpoint& XYZ);
|
||
|
||
|
||
Landpoint operator +(const Landpoint& p1, const Landpoint& p2);
|
||
|
||
Landpoint operator -(const Landpoint& p1, const Landpoint& p2);
|
||
|
||
bool operator ==(const Landpoint& p1, const Landpoint& p2);
|
||
|
||
Landpoint operator *(const Landpoint& p, double scale);
|
||
|
||
double getAngle(const Landpoint& a, const Landpoint& b);
|
||
|
||
double dot(const Landpoint& p1, const Landpoint& p2);
|
||
|
||
double getlength(const Landpoint& p1);
|
||
|
||
Landpoint crossProduct(const Landpoint& a, const Landpoint& b);
|
||
|
||
|
||
Landpoint getSlopeVector(const Landpoint& p0, const Landpoint& p1, const Landpoint& p2, const Landpoint& p3, const Landpoint& p4);
|
||
|
||
|
||
|
||
float cross2d(Point_3d a, Point_3d b);
|
||
|
||
Point_3d operator -(Point_3d a, Point_3d b);
|
||
|
||
Point_3d operator +(Point_3d a, Point_3d b);
|
||
|
||
double operator /(Point_3d a, Point_3d b);
|
||
|
||
|
||
|
||
// 矢量计算
|
||
struct Vector3D {
|
||
double x, y, z;
|
||
};
|
||
|
||
// 计算两点之间的距离
|
||
double distance(const Vector3D& p1, const Vector3D& p2);
|
||
// 计算点到直线的最短距离
|
||
double pointToLineDistance(const Vector3D& point, const Vector3D& linePoint, const Vector3D& lineDirection);
|
||
|
||
|
||
struct CartesianCoordinates {
|
||
double x, y, z;
|
||
};
|
||
|
||
struct SphericalCoordinates {
|
||
double r, theta, phi;
|
||
};
|
||
|
||
SphericalCoordinates cartesianToSpherical(const CartesianCoordinates& cartesian);
|
||
|
||
CartesianCoordinates sphericalToCartesian(const SphericalCoordinates& spherical);
|
||
|
||
|
||
#endif |