经纬度坐标下求多边形的面积,mapinfo的值作为参考,试了几种投影都不行,原来应该计算球面坐标的面积。
最后采用了boost库的方法求面积。
对boost不熟悉的可以参考一下:
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
namespace bg = boost::geometry;
#define MAPINFO_SEMIMAJOR 6370997.0
typedef bg::model::point<double, 2, bg::cs::spherical_equatorial<bg::degree> > DPoint;
typedef boost::geometry::model::polygon<DPoint> APolygon;
using boost::geometry::append;
double GetArea(vector<SGeoPoint>& vPt)
{
APolygon sph_poly;
for (size_t i = 0; i < vPt.size(); i++)
{
append(sph_poly,DPoint(vPt[i].x,vPt[i].y));
}
double area = bg::area(sph_poly);
return fabs(area) *MAPINFO_SEMIMAJOR*MAPINFO_SEMIMAJOR;
}