bp_difference - ObjectVision/GeoDMS GitHub Wiki
Geometric functions > bp_difference
- bp_difference(polygon_data_item1, polygon_data_item2)
bp_difference(polygon_data_item1, polygon_data_item2) results in a data item with the difference of the two polygon arguments. The result contains, for each element, the area of the first argument that is not covered by the second argument (A minus B).
The operator is applied element-by-element. Both domains need to match, or one of the arguments needs to be a parameter (void domain).
The bp_ prefix of the function name indicates that the implementation of the operator uses the Boost Polygon library, which requires integer coordinates.
This operator is also automatically invoked by the - operator when used with ipoint or spoint polygon data items.
- attribute polygon_data_item1 with a polygon value type with integer coordinates (ipoint or spoint)
- attribute polygon_data_item2 with a polygon value type with integer coordinates (ipoint or spoint)
The value types of both arguments must be compatible (same point type).
- The composition type of both arguments needs to be polygon.
- The domains of the two arguments must match, or one argument must have a void domain (parameter).
- The polygon data items must have integer coordinates (ipoint or spoint).
This function results in problems for (integer) coordinates larger than 2^25 (after translation where the first point is moved to (0, 0)). If your integer coordinates, for instance, represent mm, 2^25[mm] = about 33 [km]. We advise you to keep the size of your integer coordinates for polygons limited.
15.6.0
attribute<ipoint> geometry_difference (district) := bp_difference(district/geometry, water/geometry);
// equivalent to (for integer coordinates):
attribute<ipoint> geometry_difference (district) := district/geometry - water/geometry;