mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-03 00:04:47 -04:00
Compare commits
5 Commits
707188e078
...
a67a8ea94a
Author | SHA1 | Date | |
---|---|---|---|
|
a67a8ea94a | ||
|
c08ce4c652 | ||
|
31a20c0cad | ||
|
37c5b4d6c0 | ||
|
02b0ee02e9 |
790
python/plugins/processing/tests/testdata/expected/transect_fixed_single_both.gml
vendored
Normal file
790
python/plugins/processing/tests/testdata/expected/transect_fixed_single_both.gml
vendored
Normal file
@ -0,0 +1,790 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ogr:FeatureCollection
|
||||
gml:id="aFeatureCollection"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://ogr.maptools.org/ transect_fixed_single_both.xsd"
|
||||
xmlns:ogr="http://ogr.maptools.org/"
|
||||
xmlns:gml="http://www.opengis.net/gml/3.2">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007699.67743807 1334639.79376903</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.0">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007699.39626005 1334640.42219045</gml:lowerCorner><gml:upperCorner>-1007698.51286553 1334640.89082049</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.0"><gml:posList>-1007699.39626005 1334640.89082049 -1007698.51286553 1334640.42219045</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>1</ogr:fid>
|
||||
<ogr:TR_FID>0</ogr:TR_FID>
|
||||
<ogr:TR_ID>0</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>1</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.1">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007699.48998606 1334640.24551155</gml:lowerCorner><gml:upperCorner>-1007698.60659153 1334640.71414158</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.1"><gml:posList>-1007699.48998606 1334640.71414158 -1007698.60659153 1334640.24551155</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>1</ogr:fid>
|
||||
<ogr:TR_FID>0</ogr:TR_FID>
|
||||
<ogr:TR_ID>1</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>2</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.2">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007699.58371207 1334640.06883264</gml:lowerCorner><gml:upperCorner>-1007698.70031754 1334640.53746267</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.2"><gml:posList>-1007699.58371207 1334640.53746267 -1007698.70031754 1334640.06883264</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>1</ogr:fid>
|
||||
<ogr:TR_FID>0</ogr:TR_FID>
|
||||
<ogr:TR_ID>2</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>3</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.3">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007699.67743807 1334639.89215374</gml:lowerCorner><gml:upperCorner>-1007698.79404354 1334640.36078377</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.3"><gml:posList>-1007699.67743807 1334640.36078377 -1007698.79404354 1334639.89215374</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>1</ogr:fid>
|
||||
<ogr:TR_FID>0</ogr:TR_FID>
|
||||
<ogr:TR_ID>3</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>4</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.4">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.87625616 1334641.0871433</gml:lowerCorner><gml:upperCorner>-1007697.8764214 1334641.10532212</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.4"><gml:posList>-1007698.87625616 1334641.10532212 -1007697.8764214 1334641.0871433</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>2</ogr:fid>
|
||||
<ogr:TR_FID>1</ogr:TR_FID>
|
||||
<ogr:TR_ID>4</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>1</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.5">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.87989192 1334640.88717635</gml:lowerCorner><gml:upperCorner>-1007697.88005717 1334640.90535517</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.5"><gml:posList>-1007698.87989192 1334640.90535517 -1007697.88005717 1334640.88717635</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>2</ogr:fid>
|
||||
<ogr:TR_FID>1</ogr:TR_FID>
|
||||
<ogr:TR_ID>5</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>2</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.6">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.88352768 1334640.6872094</gml:lowerCorner><gml:upperCorner>-1007697.88369293 1334640.70538822</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.6"><gml:posList>-1007698.88352768 1334640.70538822 -1007697.88369293 1334640.6872094</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>2</ogr:fid>
|
||||
<ogr:TR_FID>1</ogr:TR_FID>
|
||||
<ogr:TR_ID>6</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>3</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.7">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.57444492 1334640.06062766</gml:lowerCorner><gml:upperCorner>-1007698.14727692 1334640.96479993</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.7"><gml:posList>-1007698.57444492 1334640.06062766 -1007698.14727692 1334640.96479993</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>2</ogr:fid>
|
||||
<ogr:TR_FID>1</ogr:TR_FID>
|
||||
<ogr:TR_ID>7</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>4</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.8">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.39361047 1334639.97519406</gml:lowerCorner><gml:upperCorner>-1007697.96644246 1334640.87936633</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.8"><gml:posList>-1007698.39361047 1334639.97519406 -1007697.96644246 1334640.87936633</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>2</ogr:fid>
|
||||
<ogr:TR_FID>1</ogr:TR_FID>
|
||||
<ogr:TR_ID>8</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>5</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.9">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.21277601 1334639.88976046</gml:lowerCorner><gml:upperCorner>-1007697.78560801 1334640.79393273</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.9"><gml:posList>-1007698.21277601 1334639.88976046 -1007697.78560801 1334640.79393273</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>2</ogr:fid>
|
||||
<ogr:TR_FID>1</ogr:TR_FID>
|
||||
<ogr:TR_ID>9</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>6</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.10">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.43018498 1334641.18324138</gml:lowerCorner><gml:upperCorner>-1007696.5063014 1334641.56591506</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.10"><gml:posList>-1007697.43018498 1334641.56591506 -1007696.5063014 1334641.18324138</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>3</ogr:fid>
|
||||
<ogr:TR_FID>2</ogr:TR_FID>
|
||||
<ogr:TR_ID>10</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>1</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.11">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.50671971 1334640.99846467</gml:lowerCorner><gml:upperCorner>-1007696.58283614 1334641.38113835</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.11"><gml:posList>-1007697.50671971 1334641.38113835 -1007696.58283614 1334640.99846467</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>3</ogr:fid>
|
||||
<ogr:TR_FID>2</ogr:TR_FID>
|
||||
<ogr:TR_ID>11</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>2</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.12">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.58325445 1334640.81368795</gml:lowerCorner><gml:upperCorner>-1007696.65937088 1334641.19636163</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.12"><gml:posList>-1007697.58325445 1334641.19636163 -1007696.65937088 1334640.81368795</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>3</ogr:fid>
|
||||
<ogr:TR_FID>2</ogr:TR_FID>
|
||||
<ogr:TR_ID>12</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>3</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.13">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.65978918 1334640.62891124</gml:lowerCorner><gml:upperCorner>-1007696.73590561 1334641.01158492</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.13"><gml:posList>-1007697.65978918 1334641.01158492 -1007696.73590561 1334640.62891124</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>3</ogr:fid>
|
||||
<ogr:TR_FID>2</ogr:TR_FID>
|
||||
<ogr:TR_ID>13</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>4</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.14">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.73672317 1334640.44900368</gml:lowerCorner><gml:upperCorner>-1007696.80824647 1334640.82039432</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.14"><gml:posList>-1007697.73672317 1334640.82039432 -1007696.80824647 1334640.44900368</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>3</ogr:fid>
|
||||
<ogr:TR_FID>2</ogr:TR_FID>
|
||||
<ogr:TR_ID>14</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>5</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.15">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.81121219 1334640.26596432</gml:lowerCorner><gml:upperCorner>-1007696.88031755 1334640.63125212</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.15"><gml:posList>-1007697.81121219 1334640.63125212 -1007696.88031755 1334640.26596432</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>3</ogr:fid>
|
||||
<ogr:TR_FID>2</ogr:TR_FID>
|
||||
<ogr:TR_ID>15</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>6</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.16">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.88853468 1334640.09745328</gml:lowerCorner><gml:upperCorner>-1007696.94386101 1334640.42546496</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.16"><gml:posList>-1007697.88853468 1334640.42546496 -1007696.94386101 1334640.09745328</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>3</ogr:fid>
|
||||
<ogr:TR_FID>2</ogr:TR_FID>
|
||||
<ogr:TR_ID>16</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>7</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.17">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.97399382 1334639.99112039</gml:lowerCorner><gml:upperCorner>-1007696.987237 1334640.15332697</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.17"><gml:posList>-1007697.97399382 1334640.15332697 -1007696.987237 1334639.99112039</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>3</ogr:fid>
|
||||
<ogr:TR_FID>2</ogr:TR_FID>
|
||||
<ogr:TR_ID>17</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>8</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.18">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.00643513 1334639.79376903</gml:lowerCorner><gml:upperCorner>-1007697.01967831 1334639.9559756</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.18"><gml:posList>-1007698.00643513 1334639.9559756 -1007697.01967831 1334639.79376903</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>3</ogr:fid>
|
||||
<ogr:TR_FID>2</ogr:TR_FID>
|
||||
<ogr:TR_ID>18</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>9</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.19">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334641.37803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334641.37803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.19"><gml:posList>-1007697.38013693 1334641.37803237 -1007698.38013693 1334641.37803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>19</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>1</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.20">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334641.57803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334641.57803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.20"><gml:posList>-1007697.38013693 1334641.57803237 -1007698.38013693 1334641.57803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>20</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>2</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.21">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334641.77803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334641.77803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.21"><gml:posList>-1007697.38013693 1334641.77803237 -1007698.38013693 1334641.77803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>21</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>3</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.22">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334641.97803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334641.97803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.22"><gml:posList>-1007697.38013693 1334641.97803237 -1007698.38013693 1334641.97803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>22</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>4</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.23">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334642.17803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334642.17803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.23"><gml:posList>-1007697.38013693 1334642.17803237 -1007698.38013693 1334642.17803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>23</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>5</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.24">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334642.37803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334642.37803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.24"><gml:posList>-1007697.38013693 1334642.37803237 -1007698.38013693 1334642.37803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>24</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>6</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.25">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334642.57803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334642.57803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.25"><gml:posList>-1007697.38013693 1334642.57803237 -1007698.38013693 1334642.57803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>25</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>7</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.26">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334642.77803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334642.77803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.26"><gml:posList>-1007697.38013693 1334642.77803237 -1007698.38013693 1334642.77803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>26</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>8</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.27">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334642.97803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334642.97803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.27"><gml:posList>-1007697.38013693 1334642.97803237 -1007698.38013693 1334642.97803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>27</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>9</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.28">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334643.17803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334643.17803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.28"><gml:posList>-1007697.38013693 1334643.17803237 -1007698.38013693 1334643.17803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>28</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>10</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.29">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38013693 1334643.37803237</gml:lowerCorner><gml:upperCorner>-1007697.38013693 1334643.37803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.29"><gml:posList>-1007697.38013693 1334643.37803237 -1007698.38013693 1334643.37803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>29</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>11</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.30">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.68013693 1334642.87803237</gml:lowerCorner><gml:upperCorner>-1007697.68013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.30"><gml:posList>-1007697.68013693 1334642.87803237 -1007697.68013693 1334643.87803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>30</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>12</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.31">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.48013693 1334642.87803237</gml:lowerCorner><gml:upperCorner>-1007697.48013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.31"><gml:posList>-1007697.48013693 1334642.87803237 -1007697.48013693 1334643.87803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>31</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>13</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.32">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.28013693 1334642.87803237</gml:lowerCorner><gml:upperCorner>-1007697.28013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.32"><gml:posList>-1007697.28013693 1334642.87803237 -1007697.28013693 1334643.87803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>32</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>14</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.33">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.08013693 1334642.87803237</gml:lowerCorner><gml:upperCorner>-1007697.08013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.33"><gml:posList>-1007697.08013693 1334642.87803237 -1007697.08013693 1334643.87803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>33</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>15</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.34">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.88013693 1334642.87803237</gml:lowerCorner><gml:upperCorner>-1007696.88013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.34"><gml:posList>-1007696.88013693 1334642.87803237 -1007696.88013693 1334643.87803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>34</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>16</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.35">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.68013693 1334642.87803237</gml:lowerCorner><gml:upperCorner>-1007696.68013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.35"><gml:posList>-1007696.68013693 1334642.87803237 -1007696.68013693 1334643.87803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>35</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>17</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.36">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.48013693 1334642.87803237</gml:lowerCorner><gml:upperCorner>-1007696.48013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.36"><gml:posList>-1007696.48013693 1334642.87803237 -1007696.48013693 1334643.87803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>36</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>18</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.37">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.28013693 1334642.87803237</gml:lowerCorner><gml:upperCorner>-1007696.28013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.37"><gml:posList>-1007696.28013693 1334642.87803237 -1007696.28013693 1334643.87803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>37</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>19</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.38">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.08013693 1334642.87803237</gml:lowerCorner><gml:upperCorner>-1007696.08013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.38"><gml:posList>-1007696.08013693 1334642.87803237 -1007696.08013693 1334643.87803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>38</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>20</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.39">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007695.88013693 1334642.87803237</gml:lowerCorner><gml:upperCorner>-1007695.88013693 1334643.87803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.39"><gml:posList>-1007695.88013693 1334642.87803237 -1007695.88013693 1334643.87803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>39</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>21</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.40">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.38013693 1334643.17803237</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334643.17803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.40"><gml:posList>-1007696.38013693 1334643.17803237 -1007695.38013693 1334643.17803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>40</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>22</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.41">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.38013693 1334642.97803237</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334642.97803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.41"><gml:posList>-1007696.38013693 1334642.97803237 -1007695.38013693 1334642.97803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>41</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>23</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.42">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.38013693 1334642.77803237</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334642.77803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.42"><gml:posList>-1007696.38013693 1334642.77803237 -1007695.38013693 1334642.77803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>42</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>24</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.43">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.38013693 1334642.57803237</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334642.57803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.43"><gml:posList>-1007696.38013693 1334642.57803237 -1007695.38013693 1334642.57803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>43</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>25</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.44">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.38013693 1334642.37803237</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334642.37803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.44"><gml:posList>-1007696.38013693 1334642.37803237 -1007695.38013693 1334642.37803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>44</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>26</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.45">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.38013693 1334642.17803237</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334642.17803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.45"><gml:posList>-1007696.38013693 1334642.17803237 -1007695.38013693 1334642.17803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>45</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>27</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.46">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.38013693 1334641.97803237</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334641.97803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.46"><gml:posList>-1007696.38013693 1334641.97803237 -1007695.38013693 1334641.97803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>46</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>28</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.47">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.38013693 1334641.77803237</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334641.77803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.47"><gml:posList>-1007696.38013693 1334641.77803237 -1007695.38013693 1334641.77803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>47</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>29</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.48">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.38013693 1334641.57803237</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334641.57803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.48"><gml:posList>-1007696.38013693 1334641.57803237 -1007695.38013693 1334641.57803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>48</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>30</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.49">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.38013693 1334641.37803237</gml:lowerCorner><gml:upperCorner>-1007695.38013693 1334641.37803237</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.49"><gml:posList>-1007696.38013693 1334641.37803237 -1007695.38013693 1334641.37803237</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>49</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>31</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.50">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.08172314 1334640.8774</gml:lowerCorner><gml:upperCorner>-1007696.0785487 1334641.87739496</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.50"><gml:posList>-1007696.08172314 1334641.87739496 -1007696.0785487 1334640.8774</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>50</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>32</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.51">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.28172214 1334640.87676511</gml:lowerCorner><gml:upperCorner>-1007696.27854769 1334641.87676007</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.51"><gml:posList>-1007696.28172214 1334641.87676007 -1007696.27854769 1334640.87676511</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>51</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>33</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.52">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.48172113 1334640.87613022</gml:lowerCorner><gml:upperCorner>-1007696.47854668 1334641.87612518</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.52"><gml:posList>-1007696.48172113 1334641.87612518 -1007696.47854668 1334640.87613022</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>52</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>34</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.53">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.68172012 1334640.87549533</gml:lowerCorner><gml:upperCorner>-1007696.67854568 1334641.8754903</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.53"><gml:posList>-1007696.68172012 1334641.8754903 -1007696.67854568 1334640.87549533</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>53</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>35</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.54">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007696.88171911 1334640.87486045</gml:lowerCorner><gml:upperCorner>-1007696.87854467 1334641.87485541</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.54"><gml:posList>-1007696.88171911 1334641.87485541 -1007696.87854467 1334640.87486045</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>54</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>36</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.55">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.08202457 1334640.87500562</gml:lowerCorner><gml:upperCorner>-1007697.07823672 1334641.87499845</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.55"><gml:posList>-1007697.07823672 1334641.87499845 -1007697.08202457 1334640.87500562</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>55</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>37</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.56">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.28202314 1334640.8757632</gml:lowerCorner><gml:upperCorner>-1007697.27823528 1334641.87575602</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.56"><gml:posList>-1007697.27823528 1334641.87575602 -1007697.28202314 1334640.8757632</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>56</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>38</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.57">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.4820217 1334640.87652077</gml:lowerCorner><gml:upperCorner>-1007697.47823385 1334641.87651359</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.57"><gml:posList>-1007697.47823385 1334641.87651359 -1007697.4820217 1334640.87652077</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>57</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>39</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.58">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007697.68202027 1334640.87727834</gml:lowerCorner><gml:upperCorner>-1007697.67823241 1334641.87727117</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.58"><gml:posList>-1007697.67823241 1334641.87727117 -1007697.68202027 1334640.87727834</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>58</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>40</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
<ogr:featureMember>
|
||||
<ogr:transect_fixed_single_both gml:id="transect_fixed_single_both.59">
|
||||
<gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::2154"><gml:lowerCorner>-1007698.38012491 1334641.37803232</gml:lowerCorner><gml:upperCorner>-1007697.38012491 1334641.37803232</gml:upperCorner></gml:Envelope></gml:boundedBy>
|
||||
<ogr:geometryProperty><gml:LineString srsName="urn:ogc:def:crs:EPSG::2154" gml:id="transect_fixed_single_both.geom.59"><gml:posList>-1007697.38012491 1334641.37803232 -1007698.38012491 1334641.37803232</gml:posList></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:fid>4</ogr:fid>
|
||||
<ogr:TR_FID>3</ogr:TR_FID>
|
||||
<ogr:TR_ID>59</ogr:TR_ID>
|
||||
<ogr:TR_SEGMENT>41</ogr:TR_SEGMENT>
|
||||
<ogr:TR_ANGLE>90.00</ogr:TR_ANGLE>
|
||||
<ogr:TR_LENGTH>1.000000</ogr:TR_LENGTH>
|
||||
<ogr:TR_ORIENT>2</ogr:TR_ORIENT>
|
||||
</ogr:transect_fixed_single_both>
|
||||
</ogr:featureMember>
|
||||
</ogr:FeatureCollection>
|
97
python/plugins/processing/tests/testdata/expected/transect_fixed_single_both.xsd
vendored
Normal file
97
python/plugins/processing/tests/testdata/expected/transect_fixed_single_both.xsd
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
<?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/3.2"
|
||||
xmlns:gmlsf="http://www.opengis.net/gmlsf/2.0"
|
||||
elementFormDefault="qualified"
|
||||
version="1.0">
|
||||
<xs:annotation>
|
||||
<xs:appinfo source="http://schemas.opengis.net/gmlsfProfile/2.0/gmlsfLevels.xsd">
|
||||
<gmlsf:ComplianceLevel>0</gmlsf:ComplianceLevel>
|
||||
</xs:appinfo>
|
||||
</xs:annotation>
|
||||
<xs:import namespace="http://www.opengis.net/gml/3.2" schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>
|
||||
<xs:import namespace="http://www.opengis.net/gmlsf/2.0" schemaLocation="http://schemas.opengis.net/gmlsfProfile/2.0/gmlsfLevels.xsd"/>
|
||||
<xs:element name="FeatureCollection" type="ogr:FeatureCollectionType" substitutionGroup="gml:AbstractFeature"/>
|
||||
<xs:complexType name="FeatureCollectionType">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureType">
|
||||
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element name="featureMember">
|
||||
<xs:complexType>
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureMemberType">
|
||||
<xs:sequence>
|
||||
<xs:element ref="gml:AbstractFeature"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
<xs:element name="transect_fixed_single_both" type="ogr:transect_fixed_single_both_Type" substitutionGroup="gml:AbstractFeature"/>
|
||||
<xs:complexType name="transect_fixed_single_both_Type">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureType">
|
||||
<xs:sequence>
|
||||
<xs:element name="geometryProperty" type="gml:CurvePropertyType" nillable="true" minOccurs="0" maxOccurs="1"/> <!-- restricted to LineString --><!-- srsName="urn:ogc:def:crs:EPSG::2154" -->
|
||||
<xs:element name="fid" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="TR_FID" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:integer">
|
||||
<xs:totalDigits value="10"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="TR_ID" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:integer">
|
||||
<xs:totalDigits value="10"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="TR_SEGMENT" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:integer">
|
||||
<xs:totalDigits value="10"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="TR_ANGLE" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:decimal">
|
||||
<xs:totalDigits value="6"/>
|
||||
<xs:fractionDigits value="2"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="TR_LENGTH" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:decimal">
|
||||
<xs:totalDigits value="21"/>
|
||||
<xs:fractionDigits value="6"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="TR_ORIENT" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:integer">
|
||||
<xs:totalDigits value="1"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
@ -2466,6 +2466,21 @@ tests:
|
||||
name: expected/transect_multi_both_2_30.gml
|
||||
type: vector
|
||||
|
||||
- algorithm: native:transectfixeddistance
|
||||
name: Test (native:transectfixeddistance)
|
||||
params:
|
||||
ANGLE: 90.0
|
||||
INPUT:
|
||||
name: custom/transect_single.gml
|
||||
type: vector
|
||||
INTERVAL: 0.20
|
||||
LENGTH: 1.0
|
||||
SIDE: 2
|
||||
results:
|
||||
OUTPUT:
|
||||
name: expected/transect_fixed_single_both.gml
|
||||
type: vector
|
||||
|
||||
- algorithm: qgis:distancematrix
|
||||
name: Linear (N*k x 3) distance matrix
|
||||
params:
|
||||
|
@ -289,6 +289,8 @@ set(QGIS_ANALYSIS_SRCS
|
||||
processing/qgsalgorithmtaperedbuffer.cpp
|
||||
processing/qgsalgorithmtinmeshcreation.cpp
|
||||
processing/qgsalgorithmtransect.cpp
|
||||
processing/qgsalgorithmtransectbase.cpp
|
||||
processing/qgsalgorithmtransectfixeddistance.cpp
|
||||
processing/qgsalgorithmtransform.cpp
|
||||
processing/qgsalgorithmtranslate.cpp
|
||||
processing/qgsalgorithmtruncatetable.cpp
|
||||
|
@ -31,40 +31,6 @@ QString QgsTransectAlgorithm::displayName() const
|
||||
return QObject::tr( "Transect" );
|
||||
}
|
||||
|
||||
QStringList QgsTransectAlgorithm::tags() const
|
||||
{
|
||||
return QObject::tr( "transect,station,lines,extend," ).split( ',' );
|
||||
}
|
||||
|
||||
QString QgsTransectAlgorithm::group() const
|
||||
{
|
||||
return QObject::tr( "Vector geometry" );
|
||||
}
|
||||
|
||||
QString QgsTransectAlgorithm::groupId() const
|
||||
{
|
||||
return QStringLiteral( "vectorgeometry" );
|
||||
}
|
||||
|
||||
void QgsTransectAlgorithm::initAlgorithm( const QVariantMap & )
|
||||
{
|
||||
addParameter( new QgsProcessingParameterFeatureSource( QStringLiteral( "INPUT" ), QObject::tr( "Input layer" ), QList<int>() << static_cast<int>( Qgis::ProcessingSourceType::VectorLine ) ) );
|
||||
auto length = std::make_unique<QgsProcessingParameterDistance>( QStringLiteral( "LENGTH" ), QObject::tr( "Length of the transect" ), 5.0, QStringLiteral( "INPUT" ), false, 0 );
|
||||
length->setIsDynamic( true );
|
||||
length->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "LENGTH" ), QObject::tr( "Length of the transect" ), QgsPropertyDefinition::DoublePositive ) );
|
||||
length->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
|
||||
addParameter( length.release() );
|
||||
|
||||
auto angle = std::make_unique<QgsProcessingParameterNumber>( QStringLiteral( "ANGLE" ), QObject::tr( "Angle in degrees from the original line at the vertices" ), Qgis::ProcessingNumberParameterType::Double, 90.0, false, 0, 360 );
|
||||
angle->setIsDynamic( true );
|
||||
angle->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "ANGLE" ), QObject::tr( "Angle in degrees" ), QgsPropertyDefinition::Double ) );
|
||||
angle->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
|
||||
addParameter( angle.release() );
|
||||
|
||||
addParameter( new QgsProcessingParameterEnum( QStringLiteral( "SIDE" ), QObject::tr( "Side to create the transects" ), QStringList() << QObject::tr( "Left" ) << QObject::tr( "Right" ) << QObject::tr( "Both" ), false ) );
|
||||
addParameter( new QgsProcessingParameterFeatureSink( QStringLiteral( "OUTPUT" ), QObject::tr( "Transect" ), Qgis::ProcessingSourceType::VectorLine ) );
|
||||
}
|
||||
|
||||
QString QgsTransectAlgorithm::shortHelpString() const
|
||||
{
|
||||
return QObject::tr( "This algorithm creates transects on vertices for (multi)linestrings.\n" )
|
||||
@ -79,156 +45,37 @@ QString QgsTransectAlgorithm::shortHelpString() const
|
||||
+ QObject::tr( "- TR_ORIENT: Side of the transect (only on the left or right of the line, or both side)\n" );
|
||||
}
|
||||
|
||||
QString QgsTransectAlgorithm::shortDescription() const
|
||||
{
|
||||
return QObject::tr( "Creates transects on vertices for (multi)linestrings." );
|
||||
}
|
||||
|
||||
Qgis::ProcessingAlgorithmDocumentationFlags QgsTransectAlgorithm::documentationFlags() const
|
||||
{
|
||||
return Qgis::ProcessingAlgorithmDocumentationFlag::RegeneratesPrimaryKey;
|
||||
}
|
||||
|
||||
QgsTransectAlgorithm *QgsTransectAlgorithm::createInstance() const
|
||||
{
|
||||
return new QgsTransectAlgorithm();
|
||||
}
|
||||
|
||||
QVariantMap QgsTransectAlgorithm::processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
|
||||
void QgsTransectAlgorithm::addAlgorithmParams()
|
||||
{
|
||||
const Side orientation = static_cast<QgsTransectAlgorithm::Side>( parameterAsInt( parameters, QStringLiteral( "SIDE" ), context ) );
|
||||
const double angle = fabs( parameterAsDouble( parameters, QStringLiteral( "ANGLE" ), context ) );
|
||||
const bool dynamicAngle = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "ANGLE" ) );
|
||||
QgsProperty angleProperty;
|
||||
if ( dynamicAngle )
|
||||
angleProperty = parameters.value( QStringLiteral( "ANGLE" ) ).value<QgsProperty>();
|
||||
|
||||
double length = parameterAsDouble( parameters, QStringLiteral( "LENGTH" ), context );
|
||||
const bool dynamicLength = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "LENGTH" ) );
|
||||
QgsProperty lengthProperty;
|
||||
if ( dynamicLength )
|
||||
lengthProperty = parameters.value( QStringLiteral( "LENGTH" ) ).value<QgsProperty>();
|
||||
|
||||
if ( orientation == QgsTransectAlgorithm::Both )
|
||||
length /= 2.0;
|
||||
|
||||
std::unique_ptr<QgsFeatureSource> source( parameterAsSource( parameters, QStringLiteral( "INPUT" ), context ) );
|
||||
if ( !source )
|
||||
throw QgsProcessingException( invalidSourceError( parameters, QStringLiteral( "INPUT" ) ) );
|
||||
|
||||
QgsExpressionContext expressionContext = createExpressionContext( parameters, context, dynamic_cast<QgsProcessingFeatureSource *>( source.get() ) );
|
||||
|
||||
QgsFields newFields;
|
||||
newFields.append( QgsField( QStringLiteral( "TR_FID" ), QMetaType::Type::Int, QString(), 20 ) );
|
||||
newFields.append( QgsField( QStringLiteral( "TR_ID" ), QMetaType::Type::Int, QString(), 20 ) );
|
||||
newFields.append( QgsField( QStringLiteral( "TR_SEGMENT" ), QMetaType::Type::Int, QString(), 20 ) );
|
||||
newFields.append( QgsField( QStringLiteral( "TR_ANGLE" ), QMetaType::Type::Double, QString(), 5, 2 ) );
|
||||
newFields.append( QgsField( QStringLiteral( "TR_LENGTH" ), QMetaType::Type::Double, QString(), 20, 6 ) );
|
||||
newFields.append( QgsField( QStringLiteral( "TR_ORIENT" ), QMetaType::Type::Int, QString(), 1 ) );
|
||||
QgsFields fields = QgsProcessingUtils::combineFields( source->fields(), newFields );
|
||||
|
||||
Qgis::WkbType outputWkb = Qgis::WkbType::LineString;
|
||||
if ( QgsWkbTypes::hasZ( source->wkbType() ) )
|
||||
outputWkb = QgsWkbTypes::addZ( outputWkb );
|
||||
if ( QgsWkbTypes::hasM( source->wkbType() ) )
|
||||
outputWkb = QgsWkbTypes::addM( outputWkb );
|
||||
|
||||
QString dest;
|
||||
std::unique_ptr<QgsFeatureSink> sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, fields, outputWkb, source->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
|
||||
if ( !sink )
|
||||
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
|
||||
|
||||
QgsFeatureIterator features = source->getFeatures();
|
||||
|
||||
int current = -1;
|
||||
int number = 0;
|
||||
const double step = source->featureCount() > 0 ? 100.0 / source->featureCount() : 1;
|
||||
QgsFeature feat;
|
||||
|
||||
|
||||
while ( features.nextFeature( feat ) )
|
||||
{
|
||||
current++;
|
||||
if ( feedback->isCanceled() )
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
feedback->setProgress( current * step );
|
||||
if ( !feat.hasGeometry() )
|
||||
continue;
|
||||
|
||||
QgsGeometry inputGeometry = feat.geometry();
|
||||
|
||||
if ( dynamicLength || dynamicAngle )
|
||||
{
|
||||
expressionContext.setFeature( feat );
|
||||
}
|
||||
|
||||
double evaluatedLength = length;
|
||||
if ( dynamicLength )
|
||||
evaluatedLength = lengthProperty.valueAsDouble( context.expressionContext(), length );
|
||||
double evaluatedAngle = angle;
|
||||
if ( dynamicAngle )
|
||||
evaluatedAngle = angleProperty.valueAsDouble( context.expressionContext(), angle );
|
||||
|
||||
inputGeometry.convertToMultiType();
|
||||
const QgsMultiLineString *multiLine = static_cast<const QgsMultiLineString *>( inputGeometry.constGet() );
|
||||
for ( int id = 0; id < multiLine->numGeometries(); ++id )
|
||||
{
|
||||
const QgsLineString *line = multiLine->lineStringN( id );
|
||||
QgsAbstractGeometry::vertex_iterator it = line->vertices_begin();
|
||||
while ( it != line->vertices_end() )
|
||||
{
|
||||
const QgsVertexId vertexId = it.vertexId();
|
||||
const int i = vertexId.vertex;
|
||||
QgsFeature outFeat;
|
||||
QgsAttributes attrs = feat.attributes();
|
||||
attrs << current << number << i + 1 << evaluatedAngle << ( ( orientation == QgsTransectAlgorithm::Both ) ? evaluatedLength * 2 : evaluatedLength ) << orientation;
|
||||
outFeat.setAttributes( attrs );
|
||||
const double angleAtVertex = line->vertexAngle( vertexId );
|
||||
outFeat.setGeometry( calcTransect( *it, angleAtVertex, evaluatedLength, orientation, evaluatedAngle ) );
|
||||
if ( !sink->addFeature( outFeat, QgsFeatureSink::FastInsert ) )
|
||||
throw QgsProcessingException( writeFeatureError( sink.get(), parameters, QStringLiteral( "OUTPUT" ) ) );
|
||||
number++;
|
||||
it++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sink->finalize();
|
||||
|
||||
QVariantMap outputs;
|
||||
outputs.insert( QStringLiteral( "OUTPUT" ), dest );
|
||||
return outputs;
|
||||
// No additional parameters for the basic transect algorithm (vertex-based only)
|
||||
}
|
||||
|
||||
|
||||
QgsGeometry QgsTransectAlgorithm::calcTransect( const QgsPoint &point, const double angleAtVertex, const double length, const QgsTransectAlgorithm::Side orientation, const double angle )
|
||||
bool QgsTransectAlgorithm::prepareAlgorithmTransectParameters( const QVariantMap &, QgsProcessingContext &, QgsProcessingFeedback * )
|
||||
{
|
||||
QgsPoint pLeft; // left point of the line
|
||||
QgsPoint pRight; // right point of the line
|
||||
|
||||
QgsPolyline line;
|
||||
|
||||
if ( ( orientation == QgsTransectAlgorithm::Right ) || ( orientation == QgsTransectAlgorithm::Both ) )
|
||||
{
|
||||
pLeft = point.project( length, angle + 180.0 / M_PI * angleAtVertex );
|
||||
if ( orientation != QgsTransectAlgorithm::Both )
|
||||
pRight = point;
|
||||
}
|
||||
|
||||
if ( ( orientation == QgsTransectAlgorithm::Left ) || ( orientation == QgsTransectAlgorithm::Both ) )
|
||||
{
|
||||
pRight = point.project( -length, angle + 180.0 / M_PI * angleAtVertex );
|
||||
if ( orientation != QgsTransectAlgorithm::Both )
|
||||
pLeft = point;
|
||||
}
|
||||
|
||||
line.append( pLeft );
|
||||
line.append( pRight );
|
||||
|
||||
return QgsGeometry::fromPolyline( line );
|
||||
// No additional preparation needed for basic transect algorithm
|
||||
return true;
|
||||
}
|
||||
|
||||
///@endcond
|
||||
std::vector<QgsPoint> QgsTransectAlgorithm::generateSamplingPoints( const QgsLineString &line, const QVariantMap &, QgsProcessingContext & )
|
||||
{
|
||||
std::vector<QgsPoint> samplingPoints;
|
||||
|
||||
// Vertex-based sampling only (like original master algorithm)
|
||||
for ( auto it = line.vertices_begin(); it != line.vertices_end(); ++it )
|
||||
samplingPoints.push_back( *it );
|
||||
|
||||
return samplingPoints;
|
||||
}
|
||||
|
||||
double QgsTransectAlgorithm::calculateAzimuth( const QgsLineString &line, const QgsPoint &, int pointIndex )
|
||||
{
|
||||
// For vertex-based sampling, use vertex angle directly (like original master algorithm)
|
||||
return line.vertexAngle( QgsVertexId( 0, 0, pointIndex ) );
|
||||
}
|
||||
|
||||
///@endcond
|
@ -21,50 +21,27 @@
|
||||
#define SIP_NO_FILE
|
||||
|
||||
#include "qgis_sip.h"
|
||||
#include "qgsprocessingalgorithm.h"
|
||||
#include "qgsalgorithmtransectbase.h"
|
||||
|
||||
///@cond PRIVATE
|
||||
|
||||
/**
|
||||
* Native transect algorithm.
|
||||
*/
|
||||
class QgsTransectAlgorithm : public QgsProcessingAlgorithm
|
||||
class QgsTransectAlgorithm : public QgsTransectAlgorithmBase
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Draw the transect on which side of the line
|
||||
*/
|
||||
enum Side
|
||||
{
|
||||
Left,
|
||||
Right,
|
||||
Both
|
||||
};
|
||||
QgsTransectAlgorithm() = default;
|
||||
void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
|
||||
QString name() const override;
|
||||
QString displayName() const override;
|
||||
QStringList tags() const override;
|
||||
QString group() const override;
|
||||
QString groupId() const override;
|
||||
QString shortHelpString() const override;
|
||||
QString shortDescription() const override;
|
||||
Qgis::ProcessingAlgorithmDocumentationFlags documentationFlags() const override;
|
||||
QgsTransectAlgorithm *createInstance() const override SIP_FACTORY;
|
||||
|
||||
protected:
|
||||
QVariantMap processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
|
||||
|
||||
private:
|
||||
/**
|
||||
* Returns the transect of the point \a point with \a length, \a orientation and \a angle.
|
||||
* \param point The vertex
|
||||
* \param angleAtVertex Angle at the vertex
|
||||
* \param length Length of the transect Distance to extend line from input feature
|
||||
* \param orientation Orientation of the transect
|
||||
* \param angle Angle of the transect relative to the segment [\a p1 - \a p2] (degrees clockwise)
|
||||
*/
|
||||
QgsGeometry calcTransect( const QgsPoint &point, double angleAtVertex, double length, Side orientation, double angle );
|
||||
void addAlgorithmParams() override;
|
||||
bool prepareAlgorithmTransectParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
|
||||
std::vector<QgsPoint> generateSamplingPoints( const QgsLineString &line, const QVariantMap ¶meters, QgsProcessingContext &context ) override;
|
||||
double calculateAzimuth( const QgsLineString &line, const QgsPoint &point, int pointIndex ) override;
|
||||
};
|
||||
|
||||
///@endcond PRIVATE
|
||||
|
221
src/analysis/processing/qgsalgorithmtransectbase.cpp
Normal file
221
src/analysis/processing/qgsalgorithmtransectbase.cpp
Normal file
@ -0,0 +1,221 @@
|
||||
/***************************************************************************
|
||||
qgsalgorithmtransectbase.cpp
|
||||
----------------------------
|
||||
begin : September 2025
|
||||
copyright : (C) 2025 by Loïc Bartoletti
|
||||
email : loic dot bartoletti at oslandia dot com
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#include "qgsalgorithmtransectbase.h"
|
||||
#include "qgsmultilinestring.h"
|
||||
#include "qgslinestring.h"
|
||||
|
||||
///@cond PRIVATE
|
||||
|
||||
QString QgsTransectAlgorithmBase::group() const
|
||||
{
|
||||
return QObject::tr( "Vector geometry" );
|
||||
}
|
||||
|
||||
QString QgsTransectAlgorithmBase::groupId() const
|
||||
{
|
||||
return QStringLiteral( "vectorgeometry" );
|
||||
}
|
||||
|
||||
QStringList QgsTransectAlgorithmBase::tags() const
|
||||
{
|
||||
return QObject::tr( "transect,station,lines,extend" ).split( ',' );
|
||||
}
|
||||
|
||||
QString QgsTransectAlgorithmBase::shortDescription() const
|
||||
{
|
||||
return QObject::tr( "Creates transects for (multi)linestrings." );
|
||||
}
|
||||
|
||||
Qgis::ProcessingAlgorithmDocumentationFlags QgsTransectAlgorithmBase::documentationFlags() const
|
||||
{
|
||||
return Qgis::ProcessingAlgorithmDocumentationFlag::RegeneratesPrimaryKey;
|
||||
}
|
||||
|
||||
void QgsTransectAlgorithmBase::initAlgorithm( const QVariantMap & )
|
||||
{
|
||||
addParameter( new QgsProcessingParameterFeatureSource( QStringLiteral( "INPUT" ), QObject::tr( "Input layer" ), QList<int>() << static_cast<int>( Qgis::ProcessingSourceType::VectorLine ) ) );
|
||||
|
||||
auto length = std::make_unique<QgsProcessingParameterDistance>( QStringLiteral( "LENGTH" ), QObject::tr( "Length of the transect" ), 5.0, QStringLiteral( "INPUT" ), false, 0 );
|
||||
length->setIsDynamic( true );
|
||||
length->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "LENGTH" ), QObject::tr( "Length of the transect" ), QgsPropertyDefinition::DoublePositive ) );
|
||||
length->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
|
||||
addParameter( length.release() );
|
||||
|
||||
auto angle = std::make_unique<QgsProcessingParameterNumber>( QStringLiteral( "ANGLE" ), QObject::tr( "Angle in degrees from the original line at the vertices" ), Qgis::ProcessingNumberParameterType::Double, 90.0, false, 0, 360 );
|
||||
angle->setIsDynamic( true );
|
||||
angle->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "ANGLE" ), QObject::tr( "Angle in degrees" ), QgsPropertyDefinition::Double ) );
|
||||
angle->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
|
||||
addParameter( angle.release() );
|
||||
|
||||
addParameter( new QgsProcessingParameterEnum( QStringLiteral( "SIDE" ), QObject::tr( "Side to create the transects" ), QStringList() << QObject::tr( "Left" ) << QObject::tr( "Right" ) << QObject::tr( "Both" ), false ) );
|
||||
|
||||
// Allow subclasses to add their specific parameters
|
||||
addAlgorithmParams();
|
||||
|
||||
addParameter( new QgsProcessingParameterFeatureSink( QStringLiteral( "OUTPUT" ), QObject::tr( "Transect" ), Qgis::ProcessingSourceType::VectorLine ) );
|
||||
}
|
||||
|
||||
QVariantMap QgsTransectAlgorithmBase::processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
|
||||
{
|
||||
mOrientation = static_cast<QgsTransectAlgorithmBase::Side>( parameterAsInt( parameters, QStringLiteral( "SIDE" ), context ) );
|
||||
mAngle = fabs( parameterAsDouble( parameters, QStringLiteral( "ANGLE" ), context ) );
|
||||
mDynamicAngle = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "ANGLE" ) );
|
||||
if ( mDynamicAngle )
|
||||
mAngleProperty = parameters.value( QStringLiteral( "ANGLE" ) ).value<QgsProperty>();
|
||||
|
||||
mLength = parameterAsDouble( parameters, QStringLiteral( "LENGTH" ), context );
|
||||
mDynamicLength = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "LENGTH" ) );
|
||||
if ( mDynamicLength )
|
||||
mLengthProperty = parameters.value( QStringLiteral( "LENGTH" ) ).value<QgsProperty>();
|
||||
|
||||
if ( mOrientation == QgsTransectAlgorithmBase::Both )
|
||||
mLength /= 2.0;
|
||||
|
||||
// Let subclass prepare their specific parameters
|
||||
if ( !prepareAlgorithmTransectParameters( parameters, context, feedback ) )
|
||||
return QVariantMap();
|
||||
|
||||
std::unique_ptr<QgsFeatureSource> source( parameterAsSource( parameters, QStringLiteral( "INPUT" ), context ) );
|
||||
if ( !source )
|
||||
throw QgsProcessingException( invalidSourceError( parameters, QStringLiteral( "INPUT" ) ) );
|
||||
|
||||
QgsExpressionContext expressionContext = createExpressionContext( parameters, context, dynamic_cast<QgsProcessingFeatureSource *>( source.get() ) );
|
||||
|
||||
QgsFields newFields;
|
||||
newFields.append( QgsField( QStringLiteral( "TR_FID" ), QMetaType::Type::Int, QString(), 20 ) );
|
||||
newFields.append( QgsField( QStringLiteral( "TR_ID" ), QMetaType::Type::Int, QString(), 20 ) );
|
||||
newFields.append( QgsField( QStringLiteral( "TR_SEGMENT" ), QMetaType::Type::Int, QString(), 20 ) );
|
||||
newFields.append( QgsField( QStringLiteral( "TR_ANGLE" ), QMetaType::Type::Double, QString(), 5, 2 ) );
|
||||
newFields.append( QgsField( QStringLiteral( "TR_LENGTH" ), QMetaType::Type::Double, QString(), 20, 6 ) );
|
||||
newFields.append( QgsField( QStringLiteral( "TR_ORIENT" ), QMetaType::Type::Int, QString(), 1 ) );
|
||||
QgsFields fields = QgsProcessingUtils::combineFields( source->fields(), newFields );
|
||||
|
||||
Qgis::WkbType outputWkb = Qgis::WkbType::LineString;
|
||||
if ( QgsWkbTypes::hasZ( source->wkbType() ) )
|
||||
outputWkb = QgsWkbTypes::addZ( outputWkb );
|
||||
if ( QgsWkbTypes::hasM( source->wkbType() ) )
|
||||
outputWkb = QgsWkbTypes::addM( outputWkb );
|
||||
|
||||
QString dest;
|
||||
std::unique_ptr<QgsFeatureSink> sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, fields, outputWkb, source->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
|
||||
if ( !sink )
|
||||
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
|
||||
|
||||
QgsFeatureIterator features = source->getFeatures();
|
||||
|
||||
int current = -1;
|
||||
int number = 0;
|
||||
const double step = source->featureCount() > 0 ? 100.0 / source->featureCount() : 1;
|
||||
QgsFeature feat;
|
||||
|
||||
while ( features.nextFeature( feat ) )
|
||||
{
|
||||
current++;
|
||||
if ( feedback->isCanceled() )
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
feedback->setProgress( current * step );
|
||||
if ( !feat.hasGeometry() )
|
||||
continue;
|
||||
|
||||
QgsGeometry inputGeometry = feat.geometry();
|
||||
|
||||
if ( mDynamicLength || mDynamicAngle )
|
||||
{
|
||||
expressionContext.setFeature( feat );
|
||||
}
|
||||
|
||||
double evaluatedLength = mLength;
|
||||
if ( mDynamicLength )
|
||||
evaluatedLength = mLengthProperty.valueAsDouble( context.expressionContext(), mLength );
|
||||
double evaluatedAngle = mAngle;
|
||||
if ( mDynamicAngle )
|
||||
evaluatedAngle = mAngleProperty.valueAsDouble( context.expressionContext(), mAngle );
|
||||
|
||||
inputGeometry.convertToMultiType();
|
||||
const QgsMultiLineString *multiLine = static_cast<const QgsMultiLineString *>( inputGeometry.constGet() );
|
||||
|
||||
for ( int part = 0; part < multiLine->numGeometries(); ++part )
|
||||
{
|
||||
const QgsLineString *lineString = multiLine->lineStringN( part );
|
||||
if ( !lineString )
|
||||
continue;
|
||||
|
||||
QgsLineString line = *lineString;
|
||||
|
||||
// Let subclass generate sampling points using their specific strategy
|
||||
std::vector<QgsPoint> samplingPoints = generateSamplingPoints( line, parameters, context );
|
||||
|
||||
for ( int i = 0; i < static_cast<int>( samplingPoints.size() ); ++i )
|
||||
{
|
||||
const QgsPoint &pt = samplingPoints[i];
|
||||
|
||||
// Let subclass calculate azimuth using their specific method
|
||||
double azimuth = calculateAzimuth( line, pt, i );
|
||||
|
||||
QgsFeature outFeat;
|
||||
QgsAttributes attrs = feat.attributes();
|
||||
attrs << current << number << i + 1 << evaluatedAngle
|
||||
<< ( ( mOrientation == QgsTransectAlgorithmBase::Both ) ? evaluatedLength * 2 : evaluatedLength )
|
||||
<< static_cast<int>( mOrientation );
|
||||
outFeat.setAttributes( attrs );
|
||||
outFeat.setGeometry( calcTransect( pt, azimuth, evaluatedLength, mOrientation, evaluatedAngle ) );
|
||||
if ( !sink->addFeature( outFeat, QgsFeatureSink::FastInsert ) )
|
||||
throw QgsProcessingException( writeFeatureError( sink.get(), parameters, QStringLiteral( "OUTPUT" ) ) );
|
||||
number++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sink->finalize();
|
||||
|
||||
QVariantMap outputs;
|
||||
outputs.insert( QStringLiteral( "OUTPUT" ), dest );
|
||||
return outputs;
|
||||
}
|
||||
|
||||
QgsGeometry QgsTransectAlgorithmBase::calcTransect( const QgsPoint &point, const double angleAtVertex, const double length, const QgsTransectAlgorithmBase::Side orientation, const double angle )
|
||||
{
|
||||
QgsPoint pLeft; // left point of the line
|
||||
QgsPoint pRight; // right point of the line
|
||||
|
||||
QgsPolyline line;
|
||||
|
||||
if ( ( orientation == QgsTransectAlgorithmBase::Right ) || ( orientation == QgsTransectAlgorithmBase::Both ) )
|
||||
{
|
||||
pLeft = point.project( length, angle + 180.0 / M_PI * angleAtVertex );
|
||||
if ( orientation != QgsTransectAlgorithmBase::Both )
|
||||
pRight = point;
|
||||
}
|
||||
|
||||
if ( ( orientation == QgsTransectAlgorithmBase::Left ) || ( orientation == QgsTransectAlgorithmBase::Both ) )
|
||||
{
|
||||
pRight = point.project( -length, angle + 180.0 / M_PI * angleAtVertex );
|
||||
if ( orientation != QgsTransectAlgorithmBase::Both )
|
||||
pLeft = point;
|
||||
}
|
||||
|
||||
line.append( pLeft );
|
||||
line.append( pRight );
|
||||
|
||||
return QgsGeometry::fromPolyline( line );
|
||||
}
|
||||
|
||||
///@endcond
|
97
src/analysis/processing/qgsalgorithmtransectbase.h
Normal file
97
src/analysis/processing/qgsalgorithmtransectbase.h
Normal file
@ -0,0 +1,97 @@
|
||||
/***************************************************************************
|
||||
qgsalgorithmtransectbase.h
|
||||
-------------------------
|
||||
begin : September 2025
|
||||
copyright : (C) 2025 by Loïc Bartoletti
|
||||
email : loic dot bartoletti at oslandia dot com
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef QGSALGORITHMTRANSECTBASE_H
|
||||
#define QGSALGORITHMTRANSECTBASE_H
|
||||
|
||||
#define SIP_NO_FILE
|
||||
|
||||
#include "qgis_sip.h"
|
||||
#include "qgsprocessingalgorithm.h"
|
||||
|
||||
///@cond PRIVATE
|
||||
|
||||
/**
|
||||
* Base class for transect algorithms.
|
||||
*/
|
||||
class QgsTransectAlgorithmBase : public QgsProcessingAlgorithm
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Draw the transect on which side of the line
|
||||
*/
|
||||
enum Side
|
||||
{
|
||||
Left,
|
||||
Right,
|
||||
Both
|
||||
};
|
||||
|
||||
QString group() const final;
|
||||
QString groupId() const final;
|
||||
QStringList tags() const override;
|
||||
QString shortDescription() const override;
|
||||
Qgis::ProcessingAlgorithmDocumentationFlags documentationFlags() const final;
|
||||
void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) final;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Adds specific subclass algorithm parameters. The common parameters (INPUT, LENGTH, ANGLE, SIDE, OUTPUT)
|
||||
* are automatically added by the base class.
|
||||
*/
|
||||
virtual void addAlgorithmParams() = 0;
|
||||
|
||||
/**
|
||||
* Prepares the transect algorithm subclass for execution.
|
||||
*/
|
||||
virtual bool prepareAlgorithmTransectParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) = 0;
|
||||
|
||||
/**
|
||||
* Processes a line geometry using the specific sampling strategy implemented in subclasses.
|
||||
*/
|
||||
QVariantMap processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) final;
|
||||
|
||||
/**
|
||||
* Pure virtual method that generates sampling points along a line geometry.
|
||||
* Subclasses implement their specific sampling strategy here.
|
||||
*/
|
||||
virtual std::vector<QgsPoint> generateSamplingPoints( const QgsLineString &line, const QVariantMap ¶meters, QgsProcessingContext &context ) = 0;
|
||||
|
||||
/**
|
||||
* Calculate the azimuth at a given point for transect orientation.
|
||||
* Subclasses can override this if they need different azimuth calculation.
|
||||
*/
|
||||
virtual double calculateAzimuth( const QgsLineString &line, const QgsPoint &point, int pointIndex ) = 0;
|
||||
|
||||
/**
|
||||
* Returns the transect geometry at the specified point.
|
||||
*/
|
||||
static QgsGeometry calcTransect( const QgsPoint &point, double angleAtVertex, double length, Side orientation, double angle );
|
||||
|
||||
// Shared member variables accessible to subclasses
|
||||
Side mOrientation = Both;
|
||||
double mAngle = 90.0;
|
||||
double mLength = 5.0;
|
||||
bool mDynamicAngle = false;
|
||||
bool mDynamicLength = false;
|
||||
QgsProperty mAngleProperty;
|
||||
QgsProperty mLengthProperty;
|
||||
};
|
||||
|
||||
///@endcond PRIVATE
|
||||
|
||||
#endif // QGSALGORITHMTRANSECTBASE_H
|
@ -0,0 +1,99 @@
|
||||
/***************************************************************************
|
||||
qgsalgorithmtransectfixeddistance.cpp
|
||||
-------------------------------------
|
||||
begin : September 2025
|
||||
copyright : (C) 2025 by Loïc Bartoletti
|
||||
email : loic dot bartoletti at oslandia dot com
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#include "qgsalgorithmtransectfixeddistance.h"
|
||||
#include "qgsmultilinestring.h"
|
||||
#include "qgslinestring.h"
|
||||
|
||||
///@cond PRIVATE
|
||||
|
||||
QString QgsTransectFixedDistanceAlgorithm::name() const
|
||||
{
|
||||
return QStringLiteral( "transectfixeddistance" );
|
||||
}
|
||||
|
||||
QString QgsTransectFixedDistanceAlgorithm::displayName() const
|
||||
{
|
||||
return QObject::tr( "Transect (fixed distance)" );
|
||||
}
|
||||
|
||||
QStringList QgsTransectFixedDistanceAlgorithm::tags() const
|
||||
{
|
||||
return QObject::tr( "transect,station,lines,extend,fixed,interval,distance" ).split( ',' );
|
||||
}
|
||||
|
||||
QString QgsTransectFixedDistanceAlgorithm::shortHelpString() const
|
||||
{
|
||||
return QObject::tr( "This algorithm creates transects at fixed distance intervals along (multi)linestrings.\n" )
|
||||
+ QObject::tr( "A transect is a line oriented from an angle (by default perpendicular) to the input polylines at regular intervals." )
|
||||
+ QStringLiteral( "\n\n" )
|
||||
+ QObject::tr( "Field(s) from feature(s) are returned in the transect with these new fields:\n" )
|
||||
+ QObject::tr( "- TR_FID: ID of the original feature\n" )
|
||||
+ QObject::tr( "- TR_ID: ID of the transect. Each transect have an unique ID\n" )
|
||||
+ QObject::tr( "- TR_SEGMENT: ID of the segment of the linestring\n" )
|
||||
+ QObject::tr( "- TR_ANGLE: Angle in degrees from the original line at the vertex\n" )
|
||||
+ QObject::tr( "- TR_LENGTH: Total length of the transect returned\n" )
|
||||
+ QObject::tr( "- TR_ORIENT: Side of the transect (only on the left or right of the line, or both side)\n" );
|
||||
}
|
||||
|
||||
QString QgsTransectFixedDistanceAlgorithm::shortDescription() const
|
||||
{
|
||||
return QObject::tr( "Creates transects at fixed distance intervals along (multi)linestrings." );
|
||||
}
|
||||
|
||||
QgsTransectFixedDistanceAlgorithm *QgsTransectFixedDistanceAlgorithm::createInstance() const
|
||||
{
|
||||
return new QgsTransectFixedDistanceAlgorithm();
|
||||
}
|
||||
|
||||
void QgsTransectFixedDistanceAlgorithm::addAlgorithmParams()
|
||||
{
|
||||
addParameter( new QgsProcessingParameterNumber( QStringLiteral( "INTERVAL" ), QObject::tr( "Fixed sampling interval" ), Qgis::ProcessingNumberParameterType::Double, 10.0, false, 0 ) );
|
||||
}
|
||||
|
||||
bool QgsTransectFixedDistanceAlgorithm::prepareAlgorithmTransectParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback * )
|
||||
{
|
||||
mInterval = parameterAsDouble( parameters, QStringLiteral( "INTERVAL" ), context );
|
||||
return true;
|
||||
}
|
||||
|
||||
std::vector<QgsPoint> QgsTransectFixedDistanceAlgorithm::generateSamplingPoints( const QgsLineString &line, const QVariantMap &, QgsProcessingContext & )
|
||||
{
|
||||
std::vector<QgsPoint> samplingPoints;
|
||||
|
||||
// Sample points at fixed intervals
|
||||
double totalLength = line.length();
|
||||
for ( double d = 0; d <= totalLength; d += mInterval )
|
||||
{
|
||||
QgsPoint *pt = line.interpolatePoint( d );
|
||||
samplingPoints.push_back( *pt );
|
||||
}
|
||||
|
||||
return samplingPoints;
|
||||
}
|
||||
|
||||
double QgsTransectFixedDistanceAlgorithm::calculateAzimuth( const QgsLineString &line, const QgsPoint &point, int )
|
||||
{
|
||||
// For fixed distance sampling, find closest segment
|
||||
QgsPoint segPt;
|
||||
QgsVertexId vid;
|
||||
line.closestSegment( point, segPt, vid, nullptr, Qgis::DEFAULT_SEGMENT_EPSILON );
|
||||
QgsVertexId prev( vid.part, vid.ring, vid.vertex - 1 );
|
||||
return line.vertexAt( prev ).azimuth( line.vertexAt( vid ) ) * M_PI / 180.0;
|
||||
}
|
||||
|
||||
///@endcond
|
54
src/analysis/processing/qgsalgorithmtransectfixeddistance.h
Normal file
54
src/analysis/processing/qgsalgorithmtransectfixeddistance.h
Normal file
@ -0,0 +1,54 @@
|
||||
/***************************************************************************
|
||||
qgsalgorithmtransectfixeddistance.h
|
||||
------------------------------------
|
||||
begin : September 2025
|
||||
copyright : (C) 2025 by Loïc Bartoletti
|
||||
email : loic dot bartoletti at oslandia dot com
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef QGSALGORITHMTRANSECTFIXEDDISTANCE_H
|
||||
#define QGSALGORITHMTRANSECTFIXEDDISTANCE_H
|
||||
|
||||
#define SIP_NO_FILE
|
||||
|
||||
#include "qgis_sip.h"
|
||||
#include "qgsalgorithmtransectbase.h"
|
||||
|
||||
///@cond PRIVATE
|
||||
|
||||
/**
|
||||
* Native transect (fixed distance) algorithm.
|
||||
*/
|
||||
class QgsTransectFixedDistanceAlgorithm : public QgsTransectAlgorithmBase
|
||||
{
|
||||
public:
|
||||
QgsTransectFixedDistanceAlgorithm() = default;
|
||||
QString name() const override;
|
||||
QString displayName() const override;
|
||||
QStringList tags() const override;
|
||||
QString shortHelpString() const override;
|
||||
QString shortDescription() const override;
|
||||
QgsTransectFixedDistanceAlgorithm *createInstance() const override SIP_FACTORY;
|
||||
|
||||
protected:
|
||||
void addAlgorithmParams() override;
|
||||
bool prepareAlgorithmTransectParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
|
||||
std::vector<QgsPoint> generateSamplingPoints( const QgsLineString &line, const QVariantMap ¶meters, QgsProcessingContext &context ) override;
|
||||
double calculateAzimuth( const QgsLineString &line, const QgsPoint &point, int pointIndex ) override;
|
||||
|
||||
private:
|
||||
double mInterval = 10.0;
|
||||
};
|
||||
|
||||
///@endcond PRIVATE
|
||||
|
||||
#endif // QGSALGORITHMTRANSECTFIXEDDISTANCE_H
|
@ -271,6 +271,7 @@
|
||||
#include "qgsalgorithmtaperedbuffer.h"
|
||||
#include "qgsalgorithmtinmeshcreation.h"
|
||||
#include "qgsalgorithmtransect.h"
|
||||
#include "qgsalgorithmtransectfixeddistance.h"
|
||||
#include "qgsalgorithmtransform.h"
|
||||
#include "qgsalgorithmtranslate.h"
|
||||
#include "qgsalgorithmtruncatetable.h"
|
||||
@ -636,6 +637,7 @@ void QgsNativeAlgorithms::loadAlgorithms()
|
||||
addAlgorithm( new QgsTaperedBufferAlgorithm() );
|
||||
addAlgorithm( new QgsTinMeshCreationAlgorithm() );
|
||||
addAlgorithm( new QgsTransectAlgorithm() );
|
||||
addAlgorithm( new QgsTransectFixedDistanceAlgorithm() );
|
||||
addAlgorithm( new QgsTransferAnnotationsFromMainAlgorithm() );
|
||||
addAlgorithm( new QgsTransformAlgorithm() );
|
||||
addAlgorithm( new QgsTranslateAlgorithm() );
|
||||
|
Loading…
x
Reference in New Issue
Block a user