DataCollection.h 6.5 KB
#pragma once
#ifndef _DataCollection_H_
#define _DataCollection_H_

#include<vector>
#include<string>
#include "dmap_core.h"
#include<libpq-fe.h>
#include <map>
#include "memory"
using namespace std;

namespace DmapCore_30
{
	
	
 enum DMapFieldType
{
	dmapShort = 0,
	dmapInt = 1,
	dmapLong = 2,
	dmapDouble = 3,
	dmapBoolean = 4,
	dmapChar = 5,
	dmapString = 6,
	dmapGeography = 7,
	dmapData = 8,
	dmapGeometry = 9,
	shapePoint = 10,
	shapeLineString = 11,
	shapePolygon = 12,
	shapeMultiPoint = 13,
	shapeMultiLineString = 14,
	shapeMultiPolygon = 15
};


/*static enum ZoomFlag
{
dmapZoomReset = 0,
dmapZoomIn = 1,
dmapZoomOut = 2,
dmapZoomNoChange = 3
};*/

 enum PointType
{
	dmapPointTypeCircle = 0,     //圆
	dmapPointTypeTriangle = 1,    //三角形
	dmapPointTypeSquare = 2,      //正方形
	dmapPointTypeCross = 3,        //十字架
	dmapPointTypeStar = 4,         //五角星
};
 enum LineType
{
	dmapLineTypeSolid = 0,
	dmapLineTypeDash = 1,
	dmapLineTypeDot = 2,
	dmapLineTypeDashDot = 3,
	dmapLineTypeDashDotDot = 4,
};

enum DCGeometryType
	{
		GeometryType_Point = 1,
        GeometryType_LineString = 2,
        GeometryType_Polygon = 3,
        GeometryType_MultiPoint = 4,
        GeometryType_MultiLineString = 5,
      	GeometryType_MultiPolygon = 6,
	};

 enum GeometryType
{
	dmapGeometryPoint = 0,
	dmapGeometryMultiPoint = 1,
	dmapGeometryPath = 2,
	dmapGeometryMultiLineString = 3,
	dmapGeometryRing = 4,
	dmapGeometryPolygon = 5,
	dmapGeometryMultiPolygon = 6
};
 
 enum ImageType
{
	dmapImageTypePNG = 0,
	dmapImageTypeJPG = 1
};
 enum StorageType
{
	dmapStorageTypeExploded = 0,
	dmapStorageTypeCompact = 1
};

/*
range的[lower,upper]区间两个端点是否使用
all表示两边使用
upper表示使用大端点,不使用小端点
*/
 enum EqulityType
{
	dmapEqualityAll = 0,
	dmapEqualityUpper = 1,
	dmapEqualityLower = 2,
	dmapEqualityNone = 3
};


 enum dmapAntialias
{
	dmapAntialiasingDefault=0,
	dmapAntialiasingNone = 1,
	dmapAntialiasingGray = 2,
	dmapAntialiasingSubpixel = 3,
	dmapAntialiasingFast = 4,
	dmapAntialiasingGood = 5,
	dmapAntialiasingBest = 6,
	dmapAntialiasingTrue = 7,
	dmapAntialiasingFalse = 8
};


 enum dmapLineLabelPositionDirection
{
	dmapLineLabelPositionLevel = 0,
	dmapLineLabelPositionParallel = 1,
	dmapLineLabelPositionCurved = 2,
	dmapLineLabelPositionVertical = 3,
};

 enum dmapLineLabelPositionPlace  //在线上方或下方 或左边或右边 或者线上
{
	dmapLineLabelPositionLeft = 0,
	dmapLineLabelPositionRight = 1,
	dmapLineLabelPositionOnTop = 2,
	dmapLineLabelPositionAbove = 3,
	dmapLineLabelPositionBelow = 4,
};

 enum dmapLineLabelPositionStartOrEnd
{
	dmapLineLabelPositionStart = 0,
	dmapLineLabelPositionEnd = 1,
	dmapLineLabelPositionCenter = 2,
};

 enum dmapPolygonLabelPositionDirection
{
	dmapPolygonLabelPositionParallel = 0,
	dmapPolygonLabelPositionStraight = 1,
	dmapPolygonLabelPositionParallelAndStraight = 2,
};


 enum dmapRotateMethod
{
	dmapRotate_geographic = 0,
	dmapRotate_Arithmetic = 1,
	dmapRotate_Mod_arithmetic = 2
};

	class PGeomClass
	{
	public:
		vector<char *> m_pdata;
	    ~PGeomClass()
   		 {
        for (size_t i = 0; i < m_pdata.size(); i++)
        {
            char *data = m_pdata.at(i);
            if (data != 0)
            {
                free(data);
                m_pdata[i] = 0;
            }
        }
        m_pdata.clear();
    }
	};


	class PointClass :public PGeomClass
	{
	public:
		float x;
		float y;
	};



	class PolygonClass :public PGeomClass
	{
	public:
		unsigned  int polygonCount;
		vector<int> vecParts;
		vector<float> vec_X;
		vector<float> vec_Y;

		float minx;
		float miny;
		float maxx;
		float maxy;
	};

	//class Point;
	//class MultiPoint;
//	class Path;
//	class MultiLineString;
	//class Ring;
	//class Polygon;
//	class MultiPolygon;
	//class Geometry;
	class CORE_EXPORT DataCollection
	{
	public:

		void InitDataCollection(PGresult* res, int shapeType,int imageWidth, int imageHeight, int subset, double r = 1, double dScaleDenominator=1,double x_dis = 0, double y_dis = 0);
		//DataCollection(Recordsets* recss, int shapeType, double r = 1, double x_dis = 0, double y_dis = 0);
		//void InitDataCollection(Geometry* geom, double r = 1, double dScaleDenominator=1, double x_dis = 0, double y_dis = 0);


		void InitHeatCollection(PGresult* res,int shapeType,int imageWidth, int imageHeight, double layer_minx, double layer_maxx, double layer_miny, double layer_maxy,
			int subset, double r = 1, double dScaleDenominator=1,double x_dis = 0, double y_dis = 0);

	
		
	
		~DataCollection();

		DataCollection();

	//	void InitDataCollection();
		int m_iPartCount;
		int m_iStructType;
		void * m_pData;  //此指针只能够是自定义的6种结构体类型

		vector<vector<string> > m_vAllField;  //这是结果集的所有除 shape 外的field, 数组中每个元素表示一行数据
		vector<string> m_vFieldName; // 这是所有字段的名字
		double m_dR;
		double m_dXdis;
		double m_dYdis;
		double m_dScaleDenominator;

		int m_imageWidth =0;
		int m_imageHeight =0;

		int m_subset;

		bool m_dmapAreaIndex = -1;

		//shared_ptr<DataHeatCollection> pHeatData;

	private:
		int m_iN;


		bool MallocForPoint(PGresult* res);
		bool MallocForMultiLineString(PGresult* res);
		bool MallocForPolygon(PGresult *res);
		bool MallocForMultiPolygon(PGresult* res);

		bool MallocForPointGeom(PGresult *res);
		bool MallocForPolygonForGeom(PGresult *res);
        bool MallocForLineStringGeom(PGresult *res);

		//bool MallocForHeatCollectionGeom(PGresult *res,int dcigridColIndex);

		//bool MallocForPoint(Point* p);
		//bool MallocForMultiPoint(MultiPoint* mp);
		//bool MallocForPath(Path* path);
		//bool MallocForMultiLineString(MultiLineString* ml);
		//bool MallocForRing(Ring* ring);
		//bool MallocForPolygon(Polygon* pPolygon);
		//bool MallocForMultiPolygon(MultiPolygon* mp);

		bool PolygonIsLessThanOnePixel(unsigned char* here,int not_big1);

		/*
		Struct_Point = 0,
		Struct_Line = 1,
		Struct_MLine = 2,
		Struct_Polygon = 3,
		Struct_MPolygon = 4
		*/
		bool FreeForPOINT();
		bool FreeForLINE();
		bool FreeForMLINE();
		bool FreeForPOLYGON();
		bool FreeForMPOLYGON();

		inline void ToScale(double x, double y, double&x0, double&y0);
		bool CollectAllField(PGresult* res);
		bool CollectFieldName(PGresult* res);


		shared_ptr<PointClass> GetDataPoint(unsigned char *vc);
		shared_ptr<PointClass> GetMDataPoint(unsigned char *vc);
		shared_ptr<PolygonClass> GetDataLine(unsigned char *vc);
		shared_ptr<PolygonClass> GetDataMLine(unsigned char *vc);
		shared_ptr<PolygonClass> GetDataPolygon(unsigned char *vc);
		shared_ptr<PolygonClass> GetDataMPolygon(unsigned char *vc);
	};


	

}
#endif