@@ -1878,7 +1878,7 @@ SpatRaster SpatRaster::edges(bool classes, std::string type, unsigned directions
18781878
18791879
18801880
1881- SpatRaster SpatRaster::buffer (double d, double background, SpatOptions &opt) {
1881+ SpatRaster SpatRaster::buffer (double d, double background, bool include, SpatOptions &opt) {
18821882
18831883 SpatRaster out = geometry (1 );
18841884 if (!hasValues ()) {
@@ -1908,7 +1908,7 @@ SpatRaster SpatRaster::buffer(double d, double background, SpatOptions &opt) {
19081908 std::vector<size_t > lyr = {i};
19091909 SpatRaster r = subset (lyr, ops);
19101910 ops.names = {nms[i]};
1911- r = r.buffer (d, background, ops);
1911+ r = r.buffer (d, background, include, ops);
19121912 out.source [i] = r.source [0 ];
19131913 }
19141914 if (!opt.get_filename ().empty ()) {
@@ -1929,6 +1929,9 @@ SpatRaster SpatRaster::buffer(double d, double background, SpatOptions &opt) {
19291929 } else {
19301930 out = proximity (NAN, NAN, false , " " , true , d, true , opt);
19311931 }
1932+ if (!include) {
1933+ out = out.mask (*this , true , NAN, NAN, opt);
1934+ }
19321935 } else {
19331936 SpatRaster e = edges (false , " inner" , 8 , NAN, ops);
19341937 SpatVector p = e.as_points (false , true , false , ops);
@@ -1938,7 +1941,11 @@ SpatRaster SpatRaster::buffer(double d, double background, SpatOptions &opt) {
19381941 if (background == 0 ) {
19391942 out.setValueType (3 );
19401943 }
1941- out = out.mask (*this , true , NAN, 1 , opt);
1944+ if (include) {
1945+ out = out.mask (*this , true , NAN, 1 , opt);
1946+ } else {
1947+ out = out.mask (*this , true , NAN, NAN, opt);
1948+ }
19421949 // out = out.disdir_vector_rasterize(p, false, true, false, false, NAN, NAN, "m", ops);
19431950 // out = out.arith(d, "<=", false, opt);
19441951 }
0 commit comments