13#ifndef OGRWARPEDLAYER_H_INCLUDED
14#define OGRWARPEDLAYER_H_INCLUDED
18#include "ogrlayerdecorator.h"
19#include "ogrlayerwithtranslatefeature.h"
26#pragma warning(disable : 4250)
33class CPL_DLL OGRWarpedLayer final :
public OGRLayerDecorator,
34 public OGRLayerWithTranslateFeature
39 OGRFeatureDefn *m_poFeatureDefn =
nullptr;
42 OGRGeometryFactory::TransformWithOptionsCache m_transformCacheForward{};
43 OGRGeometryFactory::TransformWithOptionsCache m_transformCacheReverse{};
44 std::unique_ptr<OGRCoordinateTransformation> m_poCT{};
46 std::unique_ptr<OGRCoordinateTransformation> m_poReversedCT{};
47 OGRSpatialReference *m_poSRS =
nullptr;
49 OGREnvelope sStaticEnvelope{};
51 static int ReprojectEnvelope(OGREnvelope *psEnvelope,
52 OGRCoordinateTransformation *poCT);
54 std::unique_ptr<OGRFeature>
55 SrcFeatureToWarpedFeature(std::unique_ptr<OGRFeature> poFeature);
56 std::unique_ptr<OGRFeature>
57 WarpedFeatureToSrcFeature(std::unique_ptr<OGRFeature> poFeature);
60 OGRWarpedLayer(OGRLayer *poDecoratedLayer,
int iGeomField,
61 int bTakeLayerOwnership,
63 std::unique_ptr<OGRCoordinateTransformation> poCT,
65 std::unique_ptr<OGRCoordinateTransformation> poReversedCT);
66 ~OGRWarpedLayer()
override;
68 void TranslateFeature(
69 std::unique_ptr<OGRFeature> poSrcFeature,
70 std::vector<std::unique_ptr<OGRFeature>> &apoOutFeatures)
override;
72 void SetExtent(
double dfXMin,
double dfYMin,
double dfXMax,
double dfYMax);
74 virtual OGRErr ISetSpatialFilter(
int iGeomField,
75 const OGRGeometry *)
override;
77 OGRFeature *GetNextFeature()
override;
78 OGRFeature *GetFeature(
GIntBig nFID)
override;
79 OGRErr ISetFeature(OGRFeature *poFeature)
override;
80 OGRErr ISetFeatureUniqPtr(std::unique_ptr<OGRFeature> poFeature)
override;
81 OGRErr ICreateFeature(OGRFeature *poFeature)
override;
82 OGRErr ICreateFeatureUniqPtr(std::unique_ptr<OGRFeature> poFeature,
84 OGRErr IUpsertFeature(OGRFeature *poFeature)
override;
85 OGRErr IUpdateFeature(OGRFeature *poFeature,
int nUpdatedFieldsCount,
86 const int *panUpdatedFieldsIdx,
87 int nUpdatedGeomFieldsCount,
88 const int *panUpdatedGeomFieldsIdx,
89 bool bUpdateStyleString)
override;
91 const OGRFeatureDefn *GetLayerDefn()
const override;
93 const OGRSpatialReference *GetSpatialRef()
const override;
95 GIntBig GetFeatureCount(
int bForce = TRUE)
override;
96 OGRErr IGetExtent(
int iGeomField, OGREnvelope *psExtent,
97 bool bForce =
true)
override;
99 int TestCapability(
const char *)
const override;
101 virtual bool GetArrowStream(
struct ArrowArrayStream *out_stream,
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition cpl_port.h:1101
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1252
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition cpl_port.h:195
int OGRErr
Type for a OGR error.
Definition ogr_core.h:388