#ifndef GEOFEATUREOPERATOR_H
#define GEOFEATUREOPERATOR_H

#include <QStringList>
#include <QVector>
#include <QMap>

#include "Engine/UGDatasetVector.h"
#include "Geometry/UGGeometry.h"
#include "qmapcontrol.h"
#include "scenecontrol.h"
#include "sceneview.h"
#include "routeglobalvariant.h"
#include "Geometry3D/UGGeoPlacemark.h"
#include "Scene/UGTrackingLayer3D.h"

using namespace UGC;

class GeoFeatureOperator
{
public:
    GeoFeatureOperator();

    // 查询地理要素
    UGRecordsetPtr queryFeature(UGDatasetVector *dv, UGString filter=_U(""));
    UGRecordsetPtr queryFeature(UGDatasetVector *dv, UGRect2D bounds);

    //高亮几何对象
    void highLightGeometry(UGGeometry* pGeometry);

    //导入航线属性信息
    int importFeatureAttribute(UGDatasetVector *dv, UGGeometry* pGeometry, QMap<QString,QString> fieldsValue,bool isAddGeometry = true);

     //获取几何对象所有节点坐标
//    void getNodePoints(UGRecordsetPtr res,UGint geometryType,QVector<QPointF>&points);
    void getNodePoints(UGGeometry* pGeometry, QVector<QVector3D>&points,double altitude=0);

    //线要素绘制
    void drawLine(QMapControl* qMapControl,UGDataSource* pDataSource,UGString datasetName);

    //3D线要素绘制
    void drawLine3D(SceneView* pSceneView,UGString datasourceName, UGString datasetName);

    void drawLine3D(SceneView* pSceneView,UGString dataName);

    //添加三维航点注记
    void addNodeLabel3D(UGRecordsetPtr res,UGTrackingLayer3D* pTrackingLayer3D);

    //移除三维航线注记
    void removeNodeLabel3D(UGRecordsetPtr res,UGTrackingLayer3D* pTrackingLayer3D);

    //添加三维几何对象到记录集
    void addGeometry3DToDataset(UGDatasetVector* dv,UGGeometry* pGeometry);

    //添加三维几何对象
    int importGeometry3DAttribute(UGDatasetVector *dv, UGGeometry* pGeometry, QMap<QString,QString> fieldsValue);

    //创建三维地标对象
    UGGeoPlacemark* createGeoPlacemark(QVector3D point,QString strName);
private:
    RouteGlobalVariant routeGVar;
};

#endif // GEOFEATUREOPERATOR_H