概述

地理经纬度是地球表面坐标系统中的两个基本参数,用于唯一确定地球上任何一个点的位置。

经度(Longitude):经度是从本初子午线开始向东或向西计量的角距离。本初子午线通常定义为通过英国伦敦格林尼治天文台旧址的一条经线,被赋予0°经度。经度范围从-180°到+180°,东经为正数(E),西经为负数(W)。比如:中国的北京大约位于116.4074°E。

纬度(Latitude):纬度是地球上一点与赤道之间的角度距离,赤道被定义为0°纬线。纬度范围从0°到90°,北纬为正数(N),南纬为负数(S)。比如:北京的纬度约为39.9042°N。

结合经度和纬度,就可以准确地定位地球上的任何地点。比如:首都北京的具体地理位置可以表示为(39.9042°N, 116.4074°E),魔都上海的具体地理位置可以表示为(31.2304°N, 121.4737°E),霸都合肥的具体地理位置可以表示为(31.8205°N, 117.2272°E)。

超级好用的C++实用库之地理相关接口_地理信息系统


CHP_Geography类

地理相关接口主要涉及计算两个地理点之间的距离、判断某个地理点是否在一个多边形内等功能。CHP_Geography类的头文件,可参考下面的示例代码。

#pragma once

#include <vector>

typedef struct _THPGeoLonLatInfo
{
    _THPGeoLonLatInfo()
    {
        dbLongitude = 0.0;
        dbLatitude = 0.0;
    }

    double dbLongitude;
    double dbLatitude;
}THPGeoLonLatInfo;

typedef std::vector<THPGeoLonLatInfo> TGeoLonLatInfoVector;

class CHP_Geography
{
public:
    static double GetDistance(const THPGeoLonLatInfo &geoSrc, const THPGeoLonLatInfo &geoDest);

    static double GetRoughDistance(const THPGeoLonLatInfo &geoSrc, const THPGeoLonLatInfo &geoDest);

    static bool IsPointInPolygon(const THPGeoLonLatInfo &geo, const TGeoLonLatInfoVector &vctGeo);

private:
    CHP_Geography();
    ~CHP_Geography();

    static double GetRadian(double dbAngle);
};

CHP_Geography类是一个接口类,不需要实例化。因此,我们将构造函数和析构函数声明成了私有的,并提供了3个静态函数。此外,我们还声明了结构体THPGeoLonLatInfo,用于表示双精度浮点类型的经度和纬度。

下面,我们将分别介绍这几个导出的公共接口。

GetDistance:计算两个地理点之间的距离,本接口计算更准确,但耗时稍多。参数geoSrc为起始地理点,参数geoDest为目的地理点,返回值为两个地理点之间的距离,单位为米。

GetRoughDistance:计算两个地理点之间的大致距离,本接口计算更粗略,但耗时稍少。参数geoSrc为起始地理点,参数geoDest为目的地理点,返回值为两个地理点之间的距离,单位为米。

IsPointInPolygon:判断某个地理点是否在一个多边形内。参数geo为某个地理点,参数vctGeo为多边形中的多个地理点,返回值为true表示在多边形内,否则不在。


💡 需要该C++实用库源码的大佬们,可搜索微信公众号“希望睿智”。添加关注后,输入消息“超级好用的C++实用库”,即可获得源码的下载链接。


总结

地理经纬度在多个领域和应用场景中具有广泛的应用,包括但不限于:地图导航与定位服务、地理信息系统(GIS)、气象预报与灾害预警、物流运输与快递跟踪、移动通信与无线网络、社交媒体和社交网络、户外运动与探险活动、大数据分析与商业智能、无人机与无人车导航等。总之,地理经纬度是现代生活和技术领域不可或缺的一部分。从日常出行到科学研究,从商业运营到公共安全,其应用无处不在。