1845{
1846
1848 return;
1849
1850 if (tolerance == 0 && minpts <= 2)
1851 {
1853 return;
1854 }
1855
1856
1857
1862 uint32_t keptn = 2;
1863
1864
1865
1866
1867
1868 uint32_t *iterator_stack =
lwalloc(
sizeof(uint32_t) * pa->
npoints);
1869 iterator_stack[0] = 0;
1870 uint32_t iterator_stack_size = 1;
1871
1872 uint32_t it_first = 0;
1873 uint32_t it_last = pa->
npoints - 1;
1874
1875 const double tolerance_sqr = tolerance * tolerance;
1876
1877 double it_tol = keptn >= minpts ? tolerance_sqr : -1.0;
1878
1879 while (iterator_stack_size)
1880 {
1882 if (split == it_first)
1883 {
1884 it_first = it_last;
1885 it_last = iterator_stack[--iterator_stack_size];
1886 }
1887 else
1888 {
1890 keptn++;
1891
1892 iterator_stack[iterator_stack_size++] = it_last;
1893 it_last = split;
1894 it_tol = keptn >= minpts ? tolerance_sqr : -1.0;
1895 }
1896 }
1897
1899
1900 size_t kept_it = 1;
1901 if (keptn == 2)
1902 {
1903
1904
1907 pt_size);
1908 }
1909 else if (pa->
npoints != keptn)
1910 {
1911 for (uint32_t i = 1; i < pa->
npoints; i++)
1912 {
1913 if (kept_points[i])
1914 {
1917 pt_size);
1918 kept_it++;
1919 }
1920 }
1921 }
1923
1926}
void * lwalloc(size_t size)
#define LW_TRUE
Return types for functions with status returns.
static size_t ptarray_point_size(const POINTARRAY *pa)
static uint32_t ptarray_dp_findsplit_in_place(const POINTARRAY *pts, uint32_t it_first, uint32_t it_last, double max_distance_sqr)
static void ptarray_simplify_in_place_tolerance0(POINTARRAY *pa)
uint8_t * serialized_pointlist