1857{
1858
1860 return;
1861
1862 if (tolerance == 0 && minpts <= 2)
1863 {
1865 return;
1866 }
1867
1868
1869
1874 uint32_t keptn = 2;
1875
1876
1877
1878
1879
1880 uint32_t *iterator_stack =
lwalloc(
sizeof(uint32_t) * pa->
npoints);
1881 iterator_stack[0] = 0;
1882 uint32_t iterator_stack_size = 1;
1883
1884 uint32_t it_first = 0;
1885 uint32_t it_last = pa->
npoints - 1;
1886
1887 const double tolerance_sqr = tolerance * tolerance;
1888
1889 double it_tol = keptn >= minpts ? tolerance_sqr : -1.0;
1890
1891 while (iterator_stack_size)
1892 {
1894 if (split == it_first)
1895 {
1896 it_first = it_last;
1897 it_last = iterator_stack[--iterator_stack_size];
1898 }
1899 else
1900 {
1902 keptn++;
1903
1904 iterator_stack[iterator_stack_size++] = it_last;
1905 it_last = split;
1906 it_tol = keptn >= minpts ? tolerance_sqr : -1.0;
1907 }
1908 }
1909
1911
1912 size_t kept_it = 1;
1913 if (keptn == 2)
1914 {
1915
1916
1919 pt_size);
1920 }
1921 else if (pa->
npoints != keptn)
1922 {
1923 for (uint32_t i = 1; i < pa->
npoints; i++)
1924 {
1925 if (kept_points[i])
1926 {
1929 pt_size);
1930 kept_it++;
1931 }
1932 }
1933 }
1935
1938}
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