Skip to content

Commit 9ffae60

Browse files
committed
[FEATURE] Variable width buffers
Adds geometry methods to create variable width buffers, including tapered buffers (with a specified start and end diameter) and variable width buffers from line string m values. Also adds processing algorithms which expose these methods to processing.
1 parent 2d3d6a8 commit 9ffae60

24 files changed

+982
-2
lines changed

python/core/geometry/qgsgeometry.sip.in

+53
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,10 @@ Test for if geometry crosses another (uses GEOS)
894894
%Docstring
895895
Returns a buffer region around this geometry having the given width and with a specified number
896896
of segments used to approximate curves
897+
898+
.. seealso:: :py:func:`singleSidedBuffer`
899+
900+
.. seealso:: :py:func:`taperedBuffer`
897901
%End
898902

899903
QgsGeometry buffer( double distance, int segments, EndCapStyle endCapStyle, JoinStyle joinStyle, double miterLimit ) const;
@@ -907,6 +911,10 @@ Returns a buffer region around the geometry, with additional style options.
907911
:param miterLimit: limit on the miter ratio used for very sharp corners (JoinStyleMiter only)
908912

909913
.. versionadded:: 2.4
914+
915+
.. seealso:: :py:func:`singleSidedBuffer`
916+
917+
.. seealso:: :py:func:`taperedBuffer`
910918
%End
911919

912920
QgsGeometry offsetCurve( double distance, int segments, JoinStyle joinStyle, double miterLimit ) const;
@@ -938,6 +946,51 @@ applied to one side of the line.
938946
calculated
939947

940948
.. versionadded:: 3.0
949+
950+
.. seealso:: :py:func:`buffer`
951+
952+
.. seealso:: :py:func:`taperedBuffer`
953+
%End
954+
955+
QgsGeometry taperedBuffer( double startWidth, double endWidth, int segments ) const;
956+
%Docstring
957+
Calculates a variable width buffer ("tapered buffer") for a (multi)curve geometry.
958+
959+
The buffer begins at a width of ``startWidth`` at the start of each curve, and
960+
ends at a width of ``endWidth``. Note that unlike buffer() methods, ``startWidth``
961+
and ``endWidth`` are the diameter of the buffer at these points, not the radius.
962+
963+
The ``segments`` argument specifies the number of segments to approximate quarter-circle
964+
curves in the buffer.
965+
966+
Non (multi)curve input geometries will return a null output geometry.
967+
968+
.. versionadded:: 3.2
969+
970+
.. seealso:: :py:func:`buffer`
971+
972+
.. seealso:: :py:func:`singleSidedBuffer`
973+
974+
.. seealso:: :py:func:`variableWidthBufferByM`
975+
%End
976+
977+
QgsGeometry variableWidthBufferByM( int segments ) const;
978+
%Docstring
979+
Calculates a variable width buffer for a (multi)linestring geometry, where
980+
the width at each node is taken from the linestring m values.
981+
982+
The ``segments`` argument specifies the number of segments to approximate quarter-circle
983+
curves in the buffer.
984+
985+
Non (multi)linestring input geometries will return a null output geometry.
986+
987+
.. versionadded:: 3.2
988+
989+
.. seealso:: :py:func:`buffer`
990+
991+
.. seealso:: :py:func:`singleSidedBuffer`
992+
993+
.. seealso:: :py:func:`taperedBuffer`
941994
%End
942995

943996
QgsGeometry extendLine( double startDistance, double endDistance ) const;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<ogr:FeatureCollection
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://ogr.maptools.org/ tapered_buffer_line.xsd"
5+
xmlns:ogr="http://ogr.maptools.org/"
6+
xmlns:gml="http://www.opengis.net/gml">
7+
<gml:boundedBy>
8+
<gml:Box>
9+
<gml:coord><gml:X>-1.2</gml:X><gml:Y>-3.4</gml:Y></gml:coord>
10+
<gml:coord><gml:X>11.4</gml:X><gml:Y>5.4</gml:Y></gml:coord>
11+
</gml:Box>
12+
</gml:boundedBy>
13+
14+
<gml:featureMember>
15+
<ogr:tapered_buffer_line fid="lines.0">
16+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6.0,1.8 5.9,1.82679491924311 5.82679491924311,1.9 5.8,2.0 5.82679491924311,2.1 5.9,2.17320508075689 6.0,2.2 8.7039545437016,2.279196994983 8.68284271247462,3.0 8.72533373200766,3.15857864376269 10.6535898384862,5.2 10.8,5.34641016151378 11.0,5.4 11.2,5.34641016151378 11.3464101615138,5.2 11.4,5.0 11.3464101615138,4.8 11.2,4.65358983848622 9.3133956158887,2.87156849680836 9.28786796564404,2.0 9.24930097118348,1.85606601717798 9.14393398282202,1.75069902881652 9.0,1.71213203435596 6.0,1.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
17+
</ogr:tapered_buffer_line>
18+
</gml:featureMember>
19+
<gml:featureMember>
20+
<ogr:tapered_buffer_line fid="lines.1">
21+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>-1.0,-1.2 -1.1,-1.17320508075689 -1.17320508075689,-1.1 -1.2,-1.0 -1.17320508075689,-0.9 -1.1,-0.826794919243112 -1.0,-0.8 1.0,-0.6 1.2,-0.653589838486225 1.34641016151378,-0.8 1.4,-1.0 1.34641016151378,-1.2 1.2,-1.34641016151378 1.0,-1.4 -1.0,-1.2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
22+
</ogr:tapered_buffer_line>
23+
</gml:featureMember>
24+
<gml:featureMember>
25+
<ogr:tapered_buffer_line fid="lines.2">
26+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3.35,2.0 3.30310889132455,1.825 3.175,1.69689110867545 3.0,1.65 2.28428927680798,1.6857855361596 2.2,-0.0 2.17320508075689,-0.1 2.1,-0.173205080756888 2.0,-0.2 1.9,-0.173205080756888 1.82679491924311,-0.1 1.8,0.0 1.7,2.0 1.74019237886467,2.15 1.85,2.25980762113533 2.0,2.3 2.63341645885287,2.33167082294264 2.6,3.0 2.65358983848622,3.2 2.8,3.34641016151378 3.0,3.4 3.2,3.34641016151378 3.34641016151378,3.2 3.4,3.0 3.35,2.0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
27+
</ogr:tapered_buffer_line>
28+
</gml:featureMember>
29+
<gml:featureMember>
30+
<ogr:tapered_buffer_line fid="lines.3">
31+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3.0,0.8 2.9,0.826794919243112 2.82679491924311,0.9 2.8,1.0 2.82679491924311,1.1 2.9,1.17320508075689 3.0,1.2 5.0,1.4 5.2,1.34641016151378 5.34641016151378,1.2 5.4,1.0 5.34641016151378,0.8 5.2,0.653589838486225 5.0,0.6 3.0,0.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
32+
</ogr:tapered_buffer_line>
33+
</gml:featureMember>
34+
<gml:featureMember>
35+
<ogr:tapered_buffer_line fid="lines.4">
36+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>7.0,-3.2 6.9,-3.17320508075689 6.82679491924311,-3.1 6.8,-3.0 6.82679491924311,-2.9 6.9,-2.82679491924311 7.0,-2.8 10.0,-2.6 10.2,-2.65358983848622 10.3464101615138,-2.8 10.4,-3.0 10.3464101615138,-3.2 10.2,-3.34641016151378 10.0,-3.4 7.0,-3.2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
37+
</ogr:tapered_buffer_line>
38+
</gml:featureMember>
39+
<gml:featureMember>
40+
<ogr:tapered_buffer_line fid="lines.5">
41+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6.1,-3.17320508075689 6.0,-3.2 5.9,-3.17320508075689 5.82679491924311,-3.1 5.8,-3.0 5.82679491924311,-2.9 9.65358983848622,1.2 9.8,1.34641016151378 10.0,1.4 10.2,1.34641016151378 10.3464101615138,1.2 10.4,1.0 10.3464101615138,0.8 10.2,0.653589838486225 6.1,-3.17320508075689</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
42+
</ogr:tapered_buffer_line>
43+
</gml:featureMember>
44+
<gml:featureMember>
45+
<ogr:tapered_buffer_line fid="lines.6">
46+
</ogr:tapered_buffer_line>
47+
</gml:featureMember>
48+
</ogr:FeatureCollection>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<xs:schema targetNamespace="http://ogr.maptools.org/" xmlns:ogr="http://ogr.maptools.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" version="1.0">
3+
<xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/2.1.2/feature.xsd"/>
4+
<xs:element name="FeatureCollection" type="ogr:FeatureCollectionType" substitutionGroup="gml:_FeatureCollection"/>
5+
<xs:complexType name="FeatureCollectionType">
6+
<xs:complexContent>
7+
<xs:extension base="gml:AbstractFeatureCollectionType">
8+
<xs:attribute name="lockId" type="xs:string" use="optional"/>
9+
<xs:attribute name="scope" type="xs:string" use="optional"/>
10+
</xs:extension>
11+
</xs:complexContent>
12+
</xs:complexType>
13+
<xs:element name="tapered_buffer_line" type="ogr:tapered_buffer_line_Type" substitutionGroup="gml:_Feature"/>
14+
<xs:complexType name="tapered_buffer_line_Type">
15+
<xs:complexContent>
16+
<xs:extension base="gml:AbstractFeatureType">
17+
<xs:sequence>
18+
<xs:element name="geometryProperty" type="gml:MultiPolygonPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
19+
</xs:sequence>
20+
</xs:extension>
21+
</xs:complexContent>
22+
</xs:complexType>
23+
</xs:schema>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<ogr:FeatureCollection
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://ogr.maptools.org/ tapered_buffer_multiline.xsd"
5+
xmlns:ogr="http://ogr.maptools.org/"
6+
xmlns:gml="http://www.opengis.net/gml">
7+
<gml:boundedBy>
8+
<gml:Box>
9+
<gml:coord><gml:X>-1.2</gml:X><gml:Y>-1.4</gml:Y></gml:coord>
10+
<gml:coord><gml:X>5.980422264875241</gml:X><gml:Y>4.519769673704415</gml:Y></gml:coord>
11+
</gml:Box>
12+
</gml:boundedBy>
13+
14+
<gml:featureMember>
15+
<ogr:tapered_buffer_multiline fid="lines.1">
16+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>-1.0,-1.2 -1.1,-1.17320508075689 -1.17320508075689,-1.1 -1.2,-1.0 -1.17320508075689,-0.9 -1.1,-0.826794919243112 -1.0,-0.8 1.0,-0.6 1.2,-0.653589838486225 1.34641016151378,-0.8 1.4,-1.0 1.34641016151378,-1.2 1.2,-1.34641016151378 1.0,-1.4 -1.0,-1.2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
17+
</ogr:tapered_buffer_multiline>
18+
</gml:featureMember>
19+
<gml:featureMember>
20+
<ogr:tapered_buffer_multiline fid="lines.2">
21+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3.0,0.8 2.9,0.826794919243112 2.82679491924311,0.9 2.8,1.0 2.82679491924311,1.1 2.9,1.17320508075689 3.0,1.2 5.0,1.4 5.2,1.34641016151378 5.34641016151378,1.2 5.4,1.0 5.34641016151378,0.8 5.2,0.653589838486225 5.0,0.6 3.0,0.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>5.4,1.0 5.34641016151378,0.8 5.2,0.653589838486225 5.0,0.6 4.8,0.653589838486224 4.65358983848622,0.8 4.6,1.0 4.82418426103647,2.4147792706334 4.85097918027958,2.5147792706334 4.92418426103647,2.58798435139029 5.02418426103647,2.6147792706334 5.12418426103647,2.58798435139029 5.19738934179336,2.5147792706334 5.22418426103647,2.4147792706334 5.4,1.0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
22+
</ogr:tapered_buffer_multiline>
23+
</gml:featureMember>
24+
<gml:featureMember>
25+
<ogr:tapered_buffer_multiline fid="lines.3">
26+
</ogr:tapered_buffer_multiline>
27+
</gml:featureMember>
28+
<gml:featureMember>
29+
<ogr:tapered_buffer_multiline fid="lines.4">
30+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3.35,2.0 3.30310889132455,1.825 3.175,1.69689110867545 3.0,1.65 2.28428927680798,1.6857855361596 2.2,-0.0 2.17320508075689,-0.1 2.1,-0.173205080756888 2.0,-0.2 1.9,-0.173205080756888 1.82679491924311,-0.1 1.8,0.0 1.7,2.0 1.74019237886467,2.15 1.85,2.25980762113533 2.0,2.3 2.63341645885287,2.33167082294264 2.6,3.0 2.65358983848622,3.2 2.8,3.34641016151378 3.0,3.4 3.2,3.34641016151378 3.34641016151378,3.2 3.4,3.0 3.35,2.0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>2.94433781190019,3.84721689059501 2.84433781190019,3.87401180983812 2.7711327311433,3.94721689059501 2.74433781190019,4.04721689059501 2.7711327311433,4.14721689059501 2.84433781190019,4.2204219713519 2.94433781190019,4.24721689059501 5.4595009596929,4.51976967370442 5.6595009596929,4.46617983521819 5.80591112120667,4.31976967370441 5.8595009596929,4.11976967370441 5.80591112120667,3.91976967370441 5.6595009596929,3.77335951219064 5.4595009596929,3.71976967370441 2.94433781190019,3.84721689059501</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>5.58042226487524,3.3468330134357 5.78042226487524,3.29324317494948 5.92683242638902,3.1468330134357 5.98042226487524,2.9468330134357 5.92683242638902,2.7468330134357 5.78042226487524,2.60042285192193 5.58042226487524,2.5468330134357 3.0,2.8 2.9,2.82679491924311 2.82679491924311,2.9 2.8,3.0 2.82679491924311,3.1 2.9,3.17320508075689 3.0,3.2 5.58042226487524,3.3468330134357</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
31+
</ogr:tapered_buffer_multiline>
32+
</gml:featureMember>
33+
</ogr:FeatureCollection>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<xs:schema targetNamespace="http://ogr.maptools.org/" xmlns:ogr="http://ogr.maptools.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" version="1.0">
3+
<xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/2.1.2/feature.xsd"/>
4+
<xs:element name="FeatureCollection" type="ogr:FeatureCollectionType" substitutionGroup="gml:_FeatureCollection"/>
5+
<xs:complexType name="FeatureCollectionType">
6+
<xs:complexContent>
7+
<xs:extension base="gml:AbstractFeatureCollectionType">
8+
<xs:attribute name="lockId" type="xs:string" use="optional"/>
9+
<xs:attribute name="scope" type="xs:string" use="optional"/>
10+
</xs:extension>
11+
</xs:complexContent>
12+
</xs:complexType>
13+
<xs:element name="tapered_buffer_multiline" type="ogr:tapered_buffer_multiline_Type" substitutionGroup="gml:_Feature"/>
14+
<xs:complexType name="tapered_buffer_multiline_Type">
15+
<xs:complexContent>
16+
<xs:extension base="gml:AbstractFeatureType">
17+
<xs:sequence>
18+
<xs:element name="geometryProperty" type="gml:MultiPolygonPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
19+
</xs:sequence>
20+
</xs:extension>
21+
</xs:complexContent>
22+
</xs:complexType>
23+
</xs:schema>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<ogr:FeatureCollection
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://ogr.maptools.org/ variable_width_buffer_by_m.xsd"
5+
xmlns:ogr="http://ogr.maptools.org/"
6+
xmlns:gml="http://www.opengis.net/gml">
7+
<gml:boundedBy>
8+
<gml:Box>
9+
<gml:coord><gml:X>-2</gml:X><gml:Y>-3.6</gml:Y></gml:coord>
10+
<gml:coord><gml:X>11.4</gml:X><gml:Y>5.4</gml:Y></gml:coord>
11+
</gml:Box>
12+
</gml:boundedBy>
13+
14+
<gml:featureMember>
15+
<ogr:variable_width_buffer_by_m fid="lines.0">
16+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6.0,1.9 5.95,1.91339745962156 5.91339745962156,1.95 5.9,2.0 5.91339745962156,2.05 5.95,2.08660254037844 6.0,2.1 8.78073089700997,2.19269102990033 8.7,3.0 8.74019237886467,3.15 10.6535898384862,5.2 10.8,5.34641016151378 11.0,5.4 11.2,5.34641016151378 11.3464101615138,5.2 11.4,5.0 11.3464101615138,4.8 11.2,4.65358983848622 9.28678639606939,2.86786396069392 9.2,2.0 9.17320508075689,1.9 9.1,1.82679491924311 9.0,1.8 6.0,1.9</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
17+
</ogr:variable_width_buffer_by_m>
18+
</gml:featureMember>
19+
<gml:featureMember>
20+
<ogr:variable_width_buffer_by_m fid="lines.1">
21+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1.05,-1.08660254037844 -0.5,-1.86602540378444 -1.0,-2.0 -1.5,-1.86602540378444 -1.86602540378444,-1.5 -2.0,-1.0 -1.86602540378444,-0.5 -1.5,-0.133974596215561 -1.0,-0.0 -0.5,-0.133974596215562 1.05,-0.913397459621556 1.08660254037844,-0.95 1.1,-1.0 1.08660254037844,-1.05 1.05,-1.08660254037844</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
22+
</ogr:variable_width_buffer_by_m>
23+
</gml:featureMember>
24+
<gml:featureMember>
25+
<ogr:variable_width_buffer_by_m fid="lines.2">
26+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3.2,2.0 3.17320508075689,1.9 3.1,1.82679491924311 3.0,1.8 2.32673267326733,1.73267326732673 2.5,-0.0 2.43301270189222,-0.25 2.25,-0.433012701892219 2.0,-0.5 1.75,-0.433012701892219 1.56698729810778,-0.25 1.5,0.0 1.7,2.0 1.74019237886467,2.15 1.85,2.25980762113533 2.0,2.3 2.75510204081633,2.22448979591837 2.6,3.0 2.65358983848622,3.2 2.8,3.34641016151378 3.0,3.4 3.2,3.34641016151378 3.34641016151378,3.2 3.4,3.0 3.2,2.0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
27+
</ogr:variable_width_buffer_by_m>
28+
</gml:featureMember>
29+
<gml:featureMember>
30+
<ogr:variable_width_buffer_by_m fid="lines.3">
31+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3.0,0.8 2.9,0.826794919243112 2.82679491924311,0.9 2.8,1.0 2.82679491924311,1.1 2.9,1.17320508075689 3.0,1.2 5.0,1.3 5.15,1.25980762113533 5.25980762113533,1.15 5.3,1.0 5.25980762113533,0.85 5.15,0.740192378864668 5.0,0.7 3.0,0.8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
32+
</ogr:variable_width_buffer_by_m>
33+
</gml:featureMember>
34+
<gml:featureMember>
35+
<ogr:variable_width_buffer_by_m fid="lines.4">
36+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>7.0,-3.5 6.75,-3.43301270189222 6.56698729810778,-3.25 6.5,-3.0 6.56698729810778,-2.75 6.75,-2.56698729810778 7.0,-2.5 10.0,-2.5 10.25,-2.56698729810778 10.4330127018922,-2.75 10.5,-3.0 10.4330127018922,-3.25 10.25,-3.43301270189222 10.0,-3.5 7.0,-3.5</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
37+
</ogr:variable_width_buffer_by_m>
38+
</gml:featureMember>
39+
<gml:featureMember>
40+
<ogr:variable_width_buffer_by_m fid="lines.5">
41+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6.51961524227066,-3.3 6.3,-3.51961524227066 6.0,-3.6 5.7,-3.51961524227066 5.48038475772934,-3.3 5.4,-3.0 5.48038475772934,-2.7 5.7,-2.48038475772934 9.95,1.08660254037844 10.0,1.1 10.05,1.08660254037844 10.0866025403784,1.05 10.1,1.0 10.0866025403784,0.95 6.51961524227066,-3.3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
42+
</ogr:variable_width_buffer_by_m>
43+
</gml:featureMember>
44+
<gml:featureMember>
45+
<ogr:variable_width_buffer_by_m fid="lines.6">
46+
</ogr:variable_width_buffer_by_m>
47+
</gml:featureMember>
48+
</ogr:FeatureCollection>

0 commit comments

Comments
 (0)