#pragma once #include #include #include #include #include #include namespace LAMPMainWidget { class MapCanvas; /* * 地图容器中的图层,属于数据的集合并不包含任何显示需要的数据 */ class MapLayer { public: MapLayer(const QString &id, CRS *crs, MapCanvas *mapCanvas); MapLayer(const MapLayer &other); MapLayer(MapLayer &&other) noexcept; virtual ~MapLayer(); MapLayer &operator=(const MapLayer &other); MapLayer &operator=(MapLayer &&other) noexcept; public: /* * 获取图层的id * @return 图层id字符串 */ const QString &id() const { return mId; } /* * 获取图层的显示z值 * @return z值 */ const int zValue() const { return mZValue; } /* * 获取图层的坐标系 * @return 图层的坐标系 */ const CRS &crs() const { return *mCrs; } /* * 获取图层所属的map容器 * @return 图层所属的map容器 */ const MapCanvas &mapCanvas() const { return *mMapCanvas; } /* * 获取图层的数据提供对象 * @return 图层的数据提供对象 */ const LayerProvider &provider() const { return *mProvider; } /* * 设置图层的id * @param id 图层id */ void setId(const QString &id) { mId = id; } /* * 设置图层的z值 * @param zValue 图层z值 */ void setZValue(const int zValue) { mZValue = zValue; } /* * 设置图层的坐标系 * @param crs 图层坐标系 */ void setCrs(CRS *const crs) { mCrs = crs; } /* * 设置图层的数据提供对象 * @param provider 图层的数据提供对象 */ void setProvider(LayerProvider *const provider) { mProvider = provider; } /* * 获取图层的pixel:m比例尺 * @return 图层的分辨率 */ virtual double resolution() const = 0; /* * 获取图层的整个显示边界 * @return 图层的显示边界 */ virtual QRectF extent() const = 0; /* * 获取图层的当前zoom值 * @return 图层的当前zoom值 */ int zoomValue() const { return mZoomValue; } /* * 设置图层的当前zoom值 * @param zoom 图层zoom值 */ virtual void setZoomValue(int zoom) { mZoomValue = zoom; } /* * 设置图层所属的地图容器 * @param map 图层所属的地图容器 */ void setMap(MapCanvasMap *map) { mMapCanvasMap = map; } /* * 获取图层的显示图元,这是图层最终的显示对象 * @return 图层的显示图元 */ MapCanvasMap *map() const { return mMapCanvasMap; } /* * 判断图层是否可显示 * @return 图层是否可显示,true显示,false则不显示 */ bool isVisible() const {return mIsVisible;} /* * 设值图层的可显示属性 * @param visible true为显示,false则不显示 */ void setVisiblity(bool visible) {mIsVisible = visible;} /* * 刷新图层内容 * @return 刷新图层内容,true则成功,否则为失败 */ virtual void update(); protected: QString mId; CRS *mCrs; int mZValue; int mZoomValue; LayerProvider *mProvider; MapCanvasMap *mMapCanvasMap; const MapCanvas *mMapCanvas; bool mIsVisible{false}; private: const static int kDefaultZoomValue{10}; }; }