@@ -76,30 +76,41 @@ class GDALVectorClipAlgorithmLayer final : public GDALVectorPipelineOutputLayer
76
76
m_eSrcLayerGeomType(oSrcLayer.GetGeomType()),
77
77
m_eFlattenSrcLayerGeomType(wkbFlatten(m_eSrcLayerGeomType)),
78
78
m_bSrcLayerGeomTypeIsCollection(OGR_GT_IsSubClassOf(
79
- m_eFlattenSrcLayerGeomType, wkbGeometryCollection))
79
+ m_eFlattenSrcLayerGeomType, wkbGeometryCollection)),
80
+ m_poFeatureDefn(oSrcLayer.GetLayerDefn()->Clone())
80
81
{
81
82
SetDescription (oSrcLayer.GetDescription ());
82
83
SetMetadata (oSrcLayer.GetMetadata ());
83
84
oSrcLayer.SetSpatialFilter (m_poClipGeom.get ());
85
+ m_poFeatureDefn->Reference ();
86
+ }
87
+
88
+ ~GDALVectorClipAlgorithmLayer ()
89
+ {
90
+ m_poFeatureDefn->Release ();
84
91
}
85
92
86
93
OGRFeatureDefn *GetLayerDefn () override
87
94
{
88
- return m_srcLayer. GetLayerDefn () ;
95
+ return m_poFeatureDefn ;
89
96
}
90
97
91
98
void TranslateFeature (
92
99
std::unique_ptr<OGRFeature> poSrcFeature,
93
100
std::vector<std::unique_ptr<OGRFeature>> &apoOutFeatures) override
94
101
{
102
+ std::unique_ptr<OGRGeometry> poIntersection;
95
103
auto poGeom = poSrcFeature->GetGeometryRef ();
96
- if (!poGeom)
97
- return ;
98
-
99
- auto poIntersection = std::unique_ptr<OGRGeometry>(
100
- poGeom->Intersection (m_poClipGeom.get ()));
104
+ if (poGeom)
105
+ {
106
+ poIntersection.reset (poGeom->Intersection (m_poClipGeom.get ()));
107
+ }
101
108
if (!poIntersection)
102
109
return ;
110
+ poIntersection->assignSpatialReference (
111
+ m_poFeatureDefn->GetGeomFieldDefn (0 )->GetSpatialRef ());
112
+
113
+ poSrcFeature->SetFDefnUnsafe (m_poFeatureDefn);
103
114
104
115
const auto eFeatGeomType =
105
116
wkbFlatten (poIntersection->getGeometryType ());
@@ -156,10 +167,11 @@ class GDALVectorClipAlgorithmLayer final : public GDALVectorPipelineOutputLayer
156
167
}
157
168
158
169
private:
159
- std::unique_ptr<OGRGeometry> m_poClipGeom{};
170
+ std::unique_ptr<OGRGeometry> const m_poClipGeom{};
160
171
const OGRwkbGeometryType m_eSrcLayerGeomType;
161
172
const OGRwkbGeometryType m_eFlattenSrcLayerGeomType;
162
173
const bool m_bSrcLayerGeomTypeIsCollection;
174
+ OGRFeatureDefn *const m_poFeatureDefn;
163
175
164
176
CPL_DISALLOW_COPY_ASSIGN (GDALVectorClipAlgorithmLayer)
165
177
};
0 commit comments