矢量数据编辑与管理
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public: void SetLayerIndex(int index); int GetLayerIndex(); void SetVisible(bool isVisible); bool GetVisible(); void AddGeometry(CGeometry* geo); vector<CGeometry*> GetGeometrys(); vector<int> m_SelectIndex; bool PointSelectInLayer(DbPoint pt,double limit,double blc); //进行 点选图形 bool FrameSelectInLayer(vector<DbPoint> points,double blc); //进 行框选图形 };
矢量数据编辑与管理
功能: – 1. 交互式数据录入(鼠标) – 2. 外部文件导入导出(Shape) – 3. 利用PostGIS管理数据 – 4. 图形的基本显示功能(漫游、缩放) – 5. 鼠标交互的地物选择(点选择、框选择) – 6. 符号及属性管理 开发语言:C++ 开发环境:Visual Studio 2005
PostGIS集成在,本次实习 PostGIS管理数据(shapefile),libpq/libpq++ 库提供了C++应用程序在PostgreSQL的后端 接口,通过这些接口在PostGIS数据库中读 取数据。
Enum GeometryType { GeoNone, GeoPoint, GeoPolyline, GeoSimplePolygon, GeoMultiPoint, GeoMultiPolyline, GeoMultiPolygon }; struct DbPoint {double X; double Y; }; class CGeometry { public: GeometryType m_geometryType; //几何图形类型 int m_LineType; //线型 int m_LineWidth; //线宽 int m_PenColor; //画笔颜色 int m_BrushType; //画刷类型 int m_BrushColor; //画刷颜色 bool m_bSelect; //是否处于选中状态 int m_layerIndex; //图层索引
class CGeoPoint : public CGeometry { protected: DbPoint m_point; public: CGeoPoint(const CGeoPoint& point); CGeoPoint(int lineType,int lineWidth,int penColor,int BrushType, int BrushColor,DbPoint point); double getX(); double getY(); DbPoint getPoint(); void setX(double x); void setY(double y); void setPoint(DbPoint point); virtual void Draw(CDC *pDC); virtual void Move(double x,double y); virtual void Zoom(double scale); virtual bool IsPoint(DbPoint pt,double limit,double blc); //判断是否点选 选择了图形元素 virtual bool IsInRgn(vector<DbPoint> points,double blc); //判断图形元素 是否在多边形区域内 };
程序主界面
class CGeoSimplePolygon : public CGeometry { protected: vector<DbPoint> m_pointsArray; double m_Area; public: CGeoSimplePolygon(const CGeoSimplePolygon& simplePolygon); CGeoSimplePolygon(int lineType,int lineWidth,int penColor,int BrushType,int BrushColor,vector<DbPoint> pointsArray); vector<DbPoint> getPoints(); void setPoints(vector<DbPoint> pointsArray); double getArea(); void CalArea(); virtual void Draw(CDC *pDC); virtual void Move(double x,double y); virtual void Zoom(double scale); virtual void GetRect(CRect &rect); //得到图形元素的边界矩形 virtual bool IsPoint(DbPoint pt,double limit,double blc); //判断是否点选 选择了图形元素 virtual bool IsInRgn(vector<DbPoint> points,double blc); //判断图形元素 是否在多边形区域内 };
class CGeoLayer { //属性 private: GeometryType m_layerType; CString m_layerName; int m_layerIndex; bool m_isVisible; vector<CGeometry*> m_Geometrys; public: //构造函数 CGeoLayer(const CGeoLayer& layer); CGeoLayer(GeometryType layerType,CString layerName,int layerIndex,bool isVisible,vector<CGeometry*> geometrys); //基本方法 GeometryType GetLayerType(); void SetLayerName(CString name); CString GetLayerName();
class CGeoPolyLine : public CGeometry { protected: vector<DbPoint> m_pointsArray; public: CGeoPolyLine(const CGeoPolyLine& polyline); CGeoPolyLine(int lineType,int lineWidth,int penColor,int BrushType,int BrushColor,vector<DbPoint> pointsArray); vector<DbPoint> getPoints(); void setPoints(vector<DbPoint> pointsArray); virtual void Draw(CDC *pDC); virtual void Move(double x,double y); virtual void Zoom(double scale); virtual void GetRect(CRect &rect); //得到图形元素的边界矩形 virtual bool IsPoint(DbPoint pt,double limit,double blc); //判断是否点 选选择了图形元素 virtual bool IsInRgn(vector<DbPoint> points,double blc); //判断图形 元素是否在多边形区域内 };
public: CGeometry(const CGeometry& geometry); //复制构造函数 CGeometry(int lineType,int lineWidth,int penColor,int BrushType,int BrushColor); //带参数的构造函数 GeometryType getType(); //获得几何图形的类型 //以下函数都设为虚函数,需在不同类型几何图形类中重载 virtual void Draw(CDC *pDC); //绘制几何图形 virtual void Move(double x,double y); //平移(漫游) virtual void Zoom(double scale); //缩放 //以下函数用于图形选择实现 double CalDistance(DbPoint point1,DbPoint point2); //两点间的距离 double Point2Line(DbPoint pt,DbPoint point1,DbPoint point2); //点到直线 的距离 bool PointRgn(DbPoint pt,vector<DbPoint> points,double blc); //判断点是 否在区域内 virtual void GetRect(CRect &rect); //得到图形元素的边界矩形 virtual bool IsPoint(DbPoint pt,double limit,double blc); //判断是否点选 选择了图形元素 virtual bool IsInRgn(vector<DbPoint> points,double blc); //判断图形元 素是否在多边形区域内 };