MCPcopy Create free account
hub / github.com/OSGeo/gdal / ProcessLine

Method ProcessLine

alg/gdalrasterpolygonenumerator.cpp:215–317  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

213
214template <class DataType, class EqualityTest>
215bool GDALRasterPolygonEnumeratorT<DataType, EqualityTest>::ProcessLine(
216 DataType *panLastLineVal, DataType *panThisLineVal, GInt32 *panLastLineId,
217 GInt32 *panThisLineId, int nXSize)
218
219{
220 EqualityTest eq;
221
222 /* -------------------------------------------------------------------- */
223 /* Special case for the first line. */
224 /* -------------------------------------------------------------------- */
225 if (panLastLineVal == nullptr)
226 {
227 for (int i = 0; i < nXSize; i++)
228 {
229 if (panThisLineVal[i] == GP_NODATA_MARKER)
230 {
231 panThisLineId[i] = -1;
232 }
233 else if (i == 0 ||
234 !(eq.operator()(panThisLineVal[i], panThisLineVal[i - 1])))
235 {
236 panThisLineId[i] = NewPolygon(panThisLineVal[i]);
237 if (panThisLineId[i] < 0)
238 return false;
239 }
240 else
241 {
242 panThisLineId[i] = panThisLineId[i - 1];
243 }
244 }
245
246 return true;
247 }
248
249 /* -------------------------------------------------------------------- */
250 /* Process each pixel comparing to the previous pixel, and to */
251 /* the last line. */
252 /* -------------------------------------------------------------------- */
253 for (int i = 0; i < nXSize; i++)
254 {
255 if (panThisLineVal[i] == GP_NODATA_MARKER)
256 {
257 panThisLineId[i] = -1;
258 }
259 else if (i > 0 &&
260 eq.operator()(panThisLineVal[i], panThisLineVal[i - 1]))
261 {
262 panThisLineId[i] = panThisLineId[i - 1];
263
264 if (eq.operator()(panLastLineVal[i], panThisLineVal[i]) &&
265 (panPolyIdMap[panLastLineId[i]] !=
266 panPolyIdMap[panThisLineId[i]]))
267 {
268 MergePolygon(panLastLineId[i], panThisLineId[i]);
269 }
270
271 if (nConnectedness == 8 &&
272 eq.operator()(panLastLineVal[i - 1], panThisLineVal[i]) &&

Callers 2

GDALPolygonizeTFunction · 0.80

Calls 1

operator()Method · 0.45

Tested by

no test coverage detected