Skip to content
Permalink
Browse files

[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.
  • Loading branch information
nyalldawson committed Apr 30, 2018
1 parent 2d3d6a8 commit 9ffae600f4c4473a25083cd354c07cad7fd08ea4
Showing with 982 additions and 2 deletions.
  1. +53 −0 python/core/geometry/qgsgeometry.sip.in
  2. +48 −0 python/plugins/processing/tests/testdata/expected/tapered_buffer_line.gml
  3. +23 −0 python/plugins/processing/tests/testdata/expected/tapered_buffer_line.xsd
  4. +33 −0 python/plugins/processing/tests/testdata/expected/tapered_buffer_multiline.gml
  5. +23 −0 python/plugins/processing/tests/testdata/expected/tapered_buffer_multiline.xsd
  6. +48 −0 python/plugins/processing/tests/testdata/expected/variable_width_buffer_by_m.gml
  7. +23 −0 python/plugins/processing/tests/testdata/expected/variable_width_buffer_by_m.xsd
  8. +1 −0 python/plugins/processing/tests/testdata/lines_m.cpg
  9. BIN python/plugins/processing/tests/testdata/lines_m.dbf
  10. +1 −0 python/plugins/processing/tests/testdata/lines_m.prj
  11. +1 −0 python/plugins/processing/tests/testdata/lines_m.qpj
  12. BIN python/plugins/processing/tests/testdata/lines_m.shp
  13. BIN python/plugins/processing/tests/testdata/lines_m.shx
  14. +41 −0 python/plugins/processing/tests/testdata/qgis_algorithm_tests.yaml
  15. +1 −0 src/analysis/CMakeLists.txt
  16. +254 −0 src/analysis/processing/qgsalgorithmtaperedbuffer.cpp
  17. +109 −0 src/analysis/processing/qgsalgorithmtaperedbuffer.h
  18. +3 −0 src/analysis/processing/qgsnativealgorithms.cpp
  19. +14 −0 src/core/geometry/qgsgeometry.cpp
  20. +47 −0 src/core/geometry/qgsgeometry.h
  21. +177 −1 src/core/geometry/qgsinternalgeometryengine.cpp
  22. +44 −0 src/core/geometry/qgsinternalgeometryengine.h
  23. +1 −1 src/core/qgsmessagelog.cpp
  24. +37 −0 tests/src/python/test_qgsgeometry.py
@@ -894,6 +894,10 @@ Test for if geometry crosses another (uses GEOS)
%Docstring
Returns a buffer region around this geometry having the given width and with a specified number
of segments used to approximate curves

.. seealso:: :py:func:`singleSidedBuffer`

.. seealso:: :py:func:`taperedBuffer`
%End

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.
:param miterLimit: limit on the miter ratio used for very sharp corners (JoinStyleMiter only)

.. versionadded:: 2.4

.. seealso:: :py:func:`singleSidedBuffer`

.. seealso:: :py:func:`taperedBuffer`
%End

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

.. versionadded:: 3.0

.. seealso:: :py:func:`buffer`

.. seealso:: :py:func:`taperedBuffer`
%End

QgsGeometry taperedBuffer( double startWidth, double endWidth, int segments ) const;
%Docstring
Calculates a variable width buffer ("tapered buffer") for a (multi)curve geometry.

The buffer begins at a width of ``startWidth`` at the start of each curve, and
ends at a width of ``endWidth``. Note that unlike buffer() methods, ``startWidth``
and ``endWidth`` are the diameter of the buffer at these points, not the radius.

The ``segments`` argument specifies the number of segments to approximate quarter-circle
curves in the buffer.

Non (multi)curve input geometries will return a null output geometry.

.. versionadded:: 3.2

.. seealso:: :py:func:`buffer`

.. seealso:: :py:func:`singleSidedBuffer`

.. seealso:: :py:func:`variableWidthBufferByM`
%End

QgsGeometry variableWidthBufferByM( int segments ) const;
%Docstring
Calculates a variable width buffer for a (multi)linestring geometry, where
the width at each node is taken from the linestring m values.

The ``segments`` argument specifies the number of segments to approximate quarter-circle
curves in the buffer.

Non (multi)linestring input geometries will return a null output geometry.

.. versionadded:: 3.2

.. seealso:: :py:func:`buffer`

.. seealso:: :py:func:`singleSidedBuffer`

.. seealso:: :py:func:`taperedBuffer`
%End

QgsGeometry extendLine( double startDistance, double endDistance ) const;
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8" ?>
<ogr:FeatureCollection
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ogr.maptools.org/ tapered_buffer_line.xsd"
xmlns:ogr="http://ogr.maptools.org/"
xmlns:gml="http://www.opengis.net/gml">
<gml:boundedBy>
<gml:Box>
<gml:coord><gml:X>-1.2</gml:X><gml:Y>-3.4</gml:Y></gml:coord>
<gml:coord><gml:X>11.4</gml:X><gml:Y>5.4</gml:Y></gml:coord>
</gml:Box>
</gml:boundedBy>

<gml:featureMember>
<ogr:tapered_buffer_line fid="lines.0">
<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>
</ogr:tapered_buffer_line>
</gml:featureMember>
<gml:featureMember>
<ogr:tapered_buffer_line fid="lines.1">
<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>
</ogr:tapered_buffer_line>
</gml:featureMember>
<gml:featureMember>
<ogr:tapered_buffer_line fid="lines.2">
<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>
</ogr:tapered_buffer_line>
</gml:featureMember>
<gml:featureMember>
<ogr:tapered_buffer_line fid="lines.3">
<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>
</ogr:tapered_buffer_line>
</gml:featureMember>
<gml:featureMember>
<ogr:tapered_buffer_line fid="lines.4">
<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>
</ogr:tapered_buffer_line>
</gml:featureMember>
<gml:featureMember>
<ogr:tapered_buffer_line fid="lines.5">
<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>
</ogr:tapered_buffer_line>
</gml:featureMember>
<gml:featureMember>
<ogr:tapered_buffer_line fid="lines.6">
</ogr:tapered_buffer_line>
</gml:featureMember>
</ogr:FeatureCollection>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/2.1.2/feature.xsd"/>
<xs:element name="FeatureCollection" type="ogr:FeatureCollectionType" substitutionGroup="gml:_FeatureCollection"/>
<xs:complexType name="FeatureCollectionType">
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureCollectionType">
<xs:attribute name="lockId" type="xs:string" use="optional"/>
<xs:attribute name="scope" type="xs:string" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="tapered_buffer_line" type="ogr:tapered_buffer_line_Type" substitutionGroup="gml:_Feature"/>
<xs:complexType name="tapered_buffer_line_Type">
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureType">
<xs:sequence>
<xs:element name="geometryProperty" type="gml:MultiPolygonPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" ?>
<ogr:FeatureCollection
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ogr.maptools.org/ tapered_buffer_multiline.xsd"
xmlns:ogr="http://ogr.maptools.org/"
xmlns:gml="http://www.opengis.net/gml">
<gml:boundedBy>
<gml:Box>
<gml:coord><gml:X>-1.2</gml:X><gml:Y>-1.4</gml:Y></gml:coord>
<gml:coord><gml:X>5.980422264875241</gml:X><gml:Y>4.519769673704415</gml:Y></gml:coord>
</gml:Box>
</gml:boundedBy>

<gml:featureMember>
<ogr:tapered_buffer_multiline fid="lines.1">
<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>
</ogr:tapered_buffer_multiline>
</gml:featureMember>
<gml:featureMember>
<ogr:tapered_buffer_multiline fid="lines.2">
<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>
</ogr:tapered_buffer_multiline>
</gml:featureMember>
<gml:featureMember>
<ogr:tapered_buffer_multiline fid="lines.3">
</ogr:tapered_buffer_multiline>
</gml:featureMember>
<gml:featureMember>
<ogr:tapered_buffer_multiline fid="lines.4">
<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>
</ogr:tapered_buffer_multiline>
</gml:featureMember>
</ogr:FeatureCollection>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/2.1.2/feature.xsd"/>
<xs:element name="FeatureCollection" type="ogr:FeatureCollectionType" substitutionGroup="gml:_FeatureCollection"/>
<xs:complexType name="FeatureCollectionType">
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureCollectionType">
<xs:attribute name="lockId" type="xs:string" use="optional"/>
<xs:attribute name="scope" type="xs:string" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="tapered_buffer_multiline" type="ogr:tapered_buffer_multiline_Type" substitutionGroup="gml:_Feature"/>
<xs:complexType name="tapered_buffer_multiline_Type">
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureType">
<xs:sequence>
<xs:element name="geometryProperty" type="gml:MultiPolygonPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8" ?>
<ogr:FeatureCollection
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ogr.maptools.org/ variable_width_buffer_by_m.xsd"
xmlns:ogr="http://ogr.maptools.org/"
xmlns:gml="http://www.opengis.net/gml">
<gml:boundedBy>
<gml:Box>
<gml:coord><gml:X>-2</gml:X><gml:Y>-3.6</gml:Y></gml:coord>
<gml:coord><gml:X>11.4</gml:X><gml:Y>5.4</gml:Y></gml:coord>
</gml:Box>
</gml:boundedBy>

<gml:featureMember>
<ogr:variable_width_buffer_by_m fid="lines.0">
<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>
</ogr:variable_width_buffer_by_m>
</gml:featureMember>
<gml:featureMember>
<ogr:variable_width_buffer_by_m fid="lines.1">
<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>
</ogr:variable_width_buffer_by_m>
</gml:featureMember>
<gml:featureMember>
<ogr:variable_width_buffer_by_m fid="lines.2">
<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>
</ogr:variable_width_buffer_by_m>
</gml:featureMember>
<gml:featureMember>
<ogr:variable_width_buffer_by_m fid="lines.3">
<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>
</ogr:variable_width_buffer_by_m>
</gml:featureMember>
<gml:featureMember>
<ogr:variable_width_buffer_by_m fid="lines.4">
<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>
</ogr:variable_width_buffer_by_m>
</gml:featureMember>
<gml:featureMember>
<ogr:variable_width_buffer_by_m fid="lines.5">
<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>
</ogr:variable_width_buffer_by_m>
</gml:featureMember>
<gml:featureMember>
<ogr:variable_width_buffer_by_m fid="lines.6">
</ogr:variable_width_buffer_by_m>
</gml:featureMember>
</ogr:FeatureCollection>

0 comments on commit 9ffae60

Please sign in to comment.
You can’t perform that action at this time.