Skip to main content
deleted 4 characters in body
Source Link
mgri
  • 16.3k
  • 6
  • 48
  • 80
from math import sin, cos, radians

step = 3 # choose the proper value (e.g. meters or degrees) with reference to the CRS used
crv_angle = 45 # degrees

def segment(polyline):
    for x in range(0, len(polyline) - 1):
        first_point = polyline[x]
        second_point = polyline[x +1]
        seg = QgsGeometry.fromPolyline([first_point, second_point])
        tmp_azim = first_point.azimuth(second_point)
        len_feat = seg.length()
        parts = int(len_feat/step)
        real_step = len_feat/parts # this is the real step applied
        
        points = []
        current = 0
        up = True
        
        while current < len_feat:
            if up:
                round_angle = radians(90 - (tmp_azim - crv_angle))
                up = False
            else:
                round_angle = radians(90 - (tmp_azim + crv_angle))
                up = True
            first = seg.interpolate(current)
            coord_x, coord_y = (first.asPoint().x(), first.asPoint().y())
            p1=QgsPointV2(coord_x, coord_y)
            dist_x, dist_y = ((real_step*sin(rad_crv_angle))* cos(round_angle), (real_step*sin(rad_crv_angle)) * sin(round_angle))
            p2 = QgsPointV2(coord_x + dist_x, coord_y + dist_y)
            second = segpoints.interpolateextend(current +[p1, real_stepp2])
            points.extend([p1, p2])
current += real_step
         
  current += real_step
    second = seg.interpolate(current + real_step)
        p3=QgsPointV2(second.asPoint().x(), second.asPoint().y())
        points.append(p3)

        circularRing = QgsCircularStringV2()
        circularRing.setPoints(points) # set points for circular rings
        fet = QgsFeature()
        fet.setGeometry(QgsGeometry(circularRing))
        prov.addFeatures([fet])

layer = iface.activeLayer() # load the input layer as you want
crs = layer.crs().toWkt()
rad_crv_angle = radians(crv_angle)

# Create the output layer
outLayer = QgsVectorLayer('Linestring?crs='+ crs, 'wiggly_line' , 'memory')
prov = outLayer.dataProvider()
fields = layer.pendingFields()
prov.addAttributes(fields)
outLayer.updateFields()

for feat in layer.getFeatures():
    geom = feat.geometry()
    polyline = geom.asPolyline()
    segment(polyline)

# Add the layer to the Layers panel
QgsMapLayerRegistry.instance().addMapLayer(outLayer)
from math import sin, cos, radians

step = 3 # choose the proper value (e.g. meters or degrees) with reference to the CRS used
crv_angle = 45 # degrees

def segment(polyline):
    for x in range(0, len(polyline) - 1):
        first_point = polyline[x]
        second_point = polyline[x +1]
        seg = QgsGeometry.fromPolyline([first_point, second_point])
        tmp_azim = first_point.azimuth(second_point)
        len_feat = seg.length()
        parts = int(len_feat/step)
        real_step = len_feat/parts # this is the real step applied
        
        points = []
        current = 0
        up = True
        
        while current < len_feat:
            if up:
                round_angle = radians(90 - (tmp_azim - crv_angle))
                up = False
            else:
                round_angle = radians(90 - (tmp_azim + crv_angle))
                up = True
            first = seg.interpolate(current)
            coord_x, coord_y = (first.asPoint().x(), first.asPoint().y())
            p1=QgsPointV2(coord_x, coord_y)
            dist_x, dist_y = ((real_step*sin(rad_crv_angle))* cos(round_angle), (real_step*sin(rad_crv_angle)) * sin(round_angle))
            p2 = QgsPointV2(coord_x + dist_x, coord_y + dist_y)
            second = seg.interpolate(current + real_step)
            points.extend([p1, p2])
            current += real_step
        
        p3=QgsPointV2(second.asPoint().x(), second.asPoint().y())
        points.append(p3)

        circularRing = QgsCircularStringV2()
        circularRing.setPoints(points) # set points for circular rings
        fet = QgsFeature()
        fet.setGeometry(QgsGeometry(circularRing))
        prov.addFeatures([fet])

layer = iface.activeLayer() # load the input layer as you want
crs = layer.crs().toWkt()
rad_crv_angle = radians(crv_angle)

# Create the output layer
outLayer = QgsVectorLayer('Linestring?crs='+ crs, 'wiggly_line' , 'memory')
prov = outLayer.dataProvider()
fields = layer.pendingFields()
prov.addAttributes(fields)
outLayer.updateFields()

for feat in layer.getFeatures():
    geom = feat.geometry()
    polyline = geom.asPolyline()
    segment(polyline)

# Add the layer to the Layers panel
QgsMapLayerRegistry.instance().addMapLayer(outLayer)
from math import sin, cos, radians

step = 3 # choose the proper value (e.g. meters or degrees) with reference to the CRS used
crv_angle = 45 # degrees

def segment(polyline):
    for x in range(0, len(polyline) - 1):
        first_point = polyline[x]
        second_point = polyline[x +1]
        seg = QgsGeometry.fromPolyline([first_point, second_point])
        tmp_azim = first_point.azimuth(second_point)
        len_feat = seg.length()
        parts = int(len_feat/step)
        real_step = len_feat/parts # this is the real step applied
        
        points = []
        current = 0
        up = True
        
        while current < len_feat:
            if up:
                round_angle = radians(90 - (tmp_azim - crv_angle))
                up = False
            else:
                round_angle = radians(90 - (tmp_azim + crv_angle))
                up = True
            first = seg.interpolate(current)
            coord_x, coord_y = (first.asPoint().x(), first.asPoint().y())
            p1=QgsPointV2(coord_x, coord_y)
            dist_x, dist_y = ((real_step*sin(rad_crv_angle))* cos(round_angle), (real_step*sin(rad_crv_angle)) * sin(round_angle))
            p2 = QgsPointV2(coord_x + dist_x, coord_y + dist_y)
            points.extend([p1, p2])
            current += real_step
         
        second = seg.interpolate(current + real_step)
        p3=QgsPointV2(second.asPoint().x(), second.asPoint().y())
        points.append(p3)

        circularRing = QgsCircularStringV2()
        circularRing.setPoints(points) # set points for circular rings
        fet = QgsFeature()
        fet.setGeometry(QgsGeometry(circularRing))
        prov.addFeatures([fet])

layer = iface.activeLayer() # load the input layer as you want
crs = layer.crs().toWkt()
rad_crv_angle = radians(crv_angle)

# Create the output layer
outLayer = QgsVectorLayer('Linestring?crs='+ crs, 'wiggly_line' , 'memory')
prov = outLayer.dataProvider()
fields = layer.pendingFields()
prov.addAttributes(fields)
outLayer.updateFields()

for feat in layer.getFeatures():
    geom = feat.geometry()
    polyline = geom.asPolyline()
    segment(polyline)

# Add the layer to the Layers panel
QgsMapLayerRegistry.instance().addMapLayer(outLayer)
deleted 28 characters in body
Source Link
mgri
  • 16.3k
  • 6
  • 48
  • 80
from math import sin, cos, radians

step = 0.53 # they are meters inchoose thisthe case,proper butvalue choose(e.g. themeters corrector valuedegrees) with reference to the CRS used
crv_angle = 45 # degrees

def segment(polyline):
    for x in range(0, len(polyline) - 1):
        first_point = polyline[x]
        second_point = polyline[x +1]
        seg = QgsGeometry.fromPolyline([first_point, second_point])
        tmp_azim = first_point.azimuth(second_point)
        len_feat = seg.length()
        parts = int(len_feat/step)
        real_step = len_feat/parts # this is the real step applied
        
        currentpoints = 0[]
        pointscurrent = []0
        while currentup <== len_feat:True
         
    first = seg.interpolate(  while current) < len_feat:
            p1=QgsPointV2(first.asPoint().x(),if first.asPoint().y())up:
            angle_1    round_angle = radians(90 - (tmp_azim - crv_angle))
            dist_x, dist_y   up = ((real_step*sin(radians(crv_angle)))*False
 cos(angle_1), (real_step*sin(radians(crv_angle))) * sin(angle_1))        else:
            p2    round_angle = QgsPointV2(first.asPointradians().x90 - ()tmp_azim + dist_x, first.asPoint(crv_angle).y() 
 + dist_y)              up = True
            secondfirst = seg.interpolate(current + real_step)
            p3=QgsPointV2coord_x, coord_y = (secondfirst.asPoint().x(), secondfirst.asPoint().y())
            angle_2 = radians(90 - p1=QgsPointV2(tmp_azim +coord_x, crv_angle)coord_y)
            dist_x, dist_y = ((real_step*sin(radians(crv_angle)rad_crv_angle))* cos(angle_2round_angle), (real_step*sin(radians(crv_angle)rad_crv_angle)) * sin(angle_2round_angle))
            p4p2 = QgsPointV2(second.asPoint().x()coord_x + dist_x, second.asPoint(coord_y + dist_y)
            second = seg.yinterpolate()current + dist_yreal_step)
            points.extend([p1, p2, p3, p4]p2])
            current += 2*real_stepreal_step
        
        p3=QgsPointV2(second.asPoint().x(), second.asPoint().y())
        points.append(p3)

        circularRing = QgsCircularStringV2()
        circularRing.setPoints(points) # set points for circular rings
        fet = QgsFeature()
        fet.setGeometry(QgsGeometry(circularRing))
        prov.addFeatures([fet])

layer = iface.activeLayer() # load the input layer as you want
crs = layer.crs().toWkt()
rad_crv_angle = radians(crv_angle)

# Create the output layer
outLayer = QgsVectorLayer('Linestring?crs='+ crs, 'wiggly_line' , 'memory')
prov = outLayer.dataProvider()
fields = layer.pendingFields()
prov.addAttributes(fields) # Add input layer fields to the outLayer
outLayer.updateFields()

for feat in layer.getFeatures():
    geom = feat.geometry()
    polyline = geom.asPolyline()
    segment(polyline)
    
# Add the layer to the Layers panel
QgsMapLayerRegistry.instance().addMapLayer(outLayer)
from math import sin, cos, radians

step = 0.5 # they are meters in this case, but choose the correct value with reference to the CRS used
crv_angle = 45 # degrees

def segment(polyline):
    for x in range(0, len(polyline) - 1):
        first_point = polyline[x]
        second_point = polyline[x +1]
        seg = QgsGeometry.fromPolyline([first_point, second_point])
        tmp_azim = first_point.azimuth(second_point)
        len_feat = seg.length()
        parts = int(len_feat/step)
        real_step = len_feat/parts # this is the real step applied
        
        current = 0
        points = []
        while current <= len_feat:
            first = seg.interpolate(current)
            p1=QgsPointV2(first.asPoint().x(), first.asPoint().y())
            angle_1 = radians(90 - (tmp_azim - crv_angle))
            dist_x, dist_y = ((real_step*sin(radians(crv_angle)))* cos(angle_1), (real_step*sin(radians(crv_angle))) * sin(angle_1))
            p2 = QgsPointV2(first.asPoint().x() + dist_x, first.asPoint().y() + dist_y)
            second = seg.interpolate(current + real_step)
            p3=QgsPointV2(second.asPoint().x(), second.asPoint().y())
            angle_2 = radians(90 - (tmp_azim + crv_angle))
            dist_x, dist_y = ((real_step*sin(radians(crv_angle)))* cos(angle_2), (real_step*sin(radians(crv_angle))) * sin(angle_2))
            p4 = QgsPointV2(second.asPoint().x() + dist_x, second.asPoint().y() + dist_y)
            points.extend([p1, p2, p3, p4])
            current += 2*real_step

        circularRing = QgsCircularStringV2()
        circularRing.setPoints(points) # set points for circular rings
        fet = QgsFeature()
        fet.setGeometry(QgsGeometry(circularRing))
        prov.addFeatures([fet])

layer = iface.activeLayer() # load the input layer as you want
crs = layer.crs().toWkt()

# Create the output layer
outLayer = QgsVectorLayer('Linestring?crs='+ crs, 'wiggly_line' , 'memory')
prov = outLayer.dataProvider()
fields = layer.pendingFields()
prov.addAttributes(fields) # Add input layer fields to the outLayer
outLayer.updateFields()

for feat in layer.getFeatures():
    geom = feat.geometry()
    polyline = geom.asPolyline()
    segment(polyline)
    
# Add the layer to the Layers panel
QgsMapLayerRegistry.instance().addMapLayer(outLayer)
from math import sin, cos, radians

step = 3 # choose the proper value (e.g. meters or degrees) with reference to the CRS used
crv_angle = 45 # degrees

def segment(polyline):
    for x in range(0, len(polyline) - 1):
        first_point = polyline[x]
        second_point = polyline[x +1]
        seg = QgsGeometry.fromPolyline([first_point, second_point])
        tmp_azim = first_point.azimuth(second_point)
        len_feat = seg.length()
        parts = int(len_feat/step)
        real_step = len_feat/parts # this is the real step applied
        
        points = []
        current = 0
        up = True
         
        while current < len_feat:
            if up:
                round_angle = radians(90 - (tmp_azim - crv_angle))
                up = False
            else:
                round_angle = radians(90 - (tmp_azim + crv_angle)) 
                up = True
            first = seg.interpolate(current)
            coord_x, coord_y = (first.asPoint().x(), first.asPoint().y())
            p1=QgsPointV2(coord_x, coord_y)
            dist_x, dist_y = ((real_step*sin(rad_crv_angle))* cos(round_angle), (real_step*sin(rad_crv_angle)) * sin(round_angle))
            p2 = QgsPointV2(coord_x + dist_x, coord_y + dist_y)
            second = seg.interpolate(current + real_step)
            points.extend([p1, p2])
            current += real_step
        
        p3=QgsPointV2(second.asPoint().x(), second.asPoint().y())
        points.append(p3)

        circularRing = QgsCircularStringV2()
        circularRing.setPoints(points) # set points for circular rings
        fet = QgsFeature()
        fet.setGeometry(QgsGeometry(circularRing))
        prov.addFeatures([fet])

layer = iface.activeLayer() # load the input layer as you want
crs = layer.crs().toWkt()
rad_crv_angle = radians(crv_angle)

# Create the output layer
outLayer = QgsVectorLayer('Linestring?crs='+ crs, 'wiggly_line' , 'memory')
prov = outLayer.dataProvider()
fields = layer.pendingFields()
prov.addAttributes(fields)
outLayer.updateFields()

for feat in layer.getFeatures():
    geom = feat.geometry()
    polyline = geom.asPolyline()
    segment(polyline)

# Add the layer to the Layers panel
QgsMapLayerRegistry.instance().addMapLayer(outLayer)
deleted 28 characters in body
Source Link
mgri
  • 16.3k
  • 6
  • 48
  • 80
from math import sin, cos, radians

step = 0.5 # they are meters in this case, but choose the correct value with reference to the CRS used
crv_angle = 45 # degrees

def segment(polyline):
    for x in range(0, len(polyline) - 1):
        first_point = polyline[x]
        second_point = polyline[x +1]
        seg = QgsGeometry.fromPolyline([first_point, second_point])
        tmp_azim = first_point.azimuth(second_point)
        len_feat = seg.length()
        print len_feat
        parts = int(len_feat/step)
        real_step = len_feat/parts # this is the real step applied
        
        current = 0
        points = []
        while current <= len_feat:
            first = seg.interpolate(current)
            p1=QgsPointV2(first.asPoint().x(), first.asPoint().y())
            angle_1 = radians(90 - (tmp_azim - crv_angle))
            dist_x, dist_y = ((real_step*sin(radians(crv_angle)))* cos(angle_1), (real_step*sin(radians(crv_angle))) * sin(angle_1))
            p2 = QgsPointV2(first.asPoint().x() + dist_x, first.asPoint().y() + dist_y)
            second = seg.interpolate(current + real_step)
            p3=QgsPointV2(second.asPoint().x(), second.asPoint().y())
            angle_2 = radians(90 - (tmp_azim + crv_angle))
            dist_x, dist_y = ((real_step*sin(radians(crv_angle)))* cos(angle_2), (real_step*sin(radians(crv_angle))) * sin(angle_2))
            p4 = QgsPointV2(second.asPoint().x() + dist_x, second.asPoint().y() + dist_y)
            points.extend([p1, p2, p3, p4])
            current += 2*real_step

        circularRing = QgsCircularStringV2()
        circularRing.setPoints(points) # set points for circular rings
        fet = QgsFeature()
        fet.setGeometry(QgsGeometry(circularRing))
        prov.addFeatures([fet])

layer = iface.activeLayer() # load the input layer as you want
crs = layer.crs().toWkt()

# Create the output layer
outLayer = QgsVectorLayer('Linestring?crs='+ crs, 'wiggly_line' , 'memory')
prov = outLayer.dataProvider()
fields = layer.pendingFields()
prov.addAttributes(fields) # Add input layer fields to the outLayer
outLayer.updateFields()

for feat in layer.getFeatures():
    geom = feat.geometry()
    polyline = geom.asPolyline()
    segment(polyline)
    
# Add the layer to the Layers panel
QgsMapLayerRegistry.instance().addMapLayer(outLayer)
from math import sin, cos, radians

step = 0.5 # they are meters in this case, but choose the correct value with reference to the CRS used
crv_angle = 45 # degrees

def segment(polyline):
    for x in range(0, len(polyline) - 1):
        first_point = polyline[x]
        second_point = polyline[x +1]
        seg = QgsGeometry.fromPolyline([first_point, second_point])
        tmp_azim = first_point.azimuth(second_point)
        len_feat = seg.length()
        print len_feat
        parts = int(len_feat/step)
        real_step = len_feat/parts # this is the real step applied
        
        current = 0
        points = []
        while current <= len_feat:
            first = seg.interpolate(current)
            p1=QgsPointV2(first.asPoint().x(), first.asPoint().y())
            angle_1 = radians(90 - (tmp_azim - crv_angle))
            dist_x, dist_y = ((real_step*sin(radians(crv_angle)))* cos(angle_1), (real_step*sin(radians(crv_angle))) * sin(angle_1))
            p2 = QgsPointV2(first.asPoint().x() + dist_x, first.asPoint().y() + dist_y)
            second = seg.interpolate(current + real_step)
            p3=QgsPointV2(second.asPoint().x(), second.asPoint().y())
            angle_2 = radians(90 - (tmp_azim + crv_angle))
            dist_x, dist_y = ((real_step*sin(radians(crv_angle)))* cos(angle_2), (real_step*sin(radians(crv_angle))) * sin(angle_2))
            p4 = QgsPointV2(second.asPoint().x() + dist_x, second.asPoint().y() + dist_y)
            points.extend([p1, p2, p3, p4])
            current += 2*real_step

        circularRing = QgsCircularStringV2()
        circularRing.setPoints(points) # set points for circular rings
        fet = QgsFeature()
        fet.setGeometry(QgsGeometry(circularRing))
        prov.addFeatures([fet])

layer = iface.activeLayer() # load the input layer as you want
crs = layer.crs().toWkt()

# Create the output layer
outLayer = QgsVectorLayer('Linestring?crs='+ crs, 'wiggly_line' , 'memory')
prov = outLayer.dataProvider()
fields = layer.pendingFields()
prov.addAttributes(fields) # Add input layer fields to the outLayer
outLayer.updateFields()

for feat in layer.getFeatures():
    geom = feat.geometry()
    polyline = geom.asPolyline()
    segment(polyline)
    
# Add the layer to the Layers panel
QgsMapLayerRegistry.instance().addMapLayer(outLayer)
from math import sin, cos, radians

step = 0.5 # they are meters in this case, but choose the correct value with reference to the CRS used
crv_angle = 45 # degrees

def segment(polyline):
    for x in range(0, len(polyline) - 1):
        first_point = polyline[x]
        second_point = polyline[x +1]
        seg = QgsGeometry.fromPolyline([first_point, second_point])
        tmp_azim = first_point.azimuth(second_point)
        len_feat = seg.length()
        parts = int(len_feat/step)
        real_step = len_feat/parts # this is the real step applied
        
        current = 0
        points = []
        while current <= len_feat:
            first = seg.interpolate(current)
            p1=QgsPointV2(first.asPoint().x(), first.asPoint().y())
            angle_1 = radians(90 - (tmp_azim - crv_angle))
            dist_x, dist_y = ((real_step*sin(radians(crv_angle)))* cos(angle_1), (real_step*sin(radians(crv_angle))) * sin(angle_1))
            p2 = QgsPointV2(first.asPoint().x() + dist_x, first.asPoint().y() + dist_y)
            second = seg.interpolate(current + real_step)
            p3=QgsPointV2(second.asPoint().x(), second.asPoint().y())
            angle_2 = radians(90 - (tmp_azim + crv_angle))
            dist_x, dist_y = ((real_step*sin(radians(crv_angle)))* cos(angle_2), (real_step*sin(radians(crv_angle))) * sin(angle_2))
            p4 = QgsPointV2(second.asPoint().x() + dist_x, second.asPoint().y() + dist_y)
            points.extend([p1, p2, p3, p4])
            current += 2*real_step

        circularRing = QgsCircularStringV2()
        circularRing.setPoints(points) # set points for circular rings
        fet = QgsFeature()
        fet.setGeometry(QgsGeometry(circularRing))
        prov.addFeatures([fet])

layer = iface.activeLayer() # load the input layer as you want
crs = layer.crs().toWkt()

# Create the output layer
outLayer = QgsVectorLayer('Linestring?crs='+ crs, 'wiggly_line' , 'memory')
prov = outLayer.dataProvider()
fields = layer.pendingFields()
prov.addAttributes(fields) # Add input layer fields to the outLayer
outLayer.updateFields()

for feat in layer.getFeatures():
    geom = feat.geometry()
    polyline = geom.asPolyline()
    segment(polyline)
    
# Add the layer to the Layers panel
QgsMapLayerRegistry.instance().addMapLayer(outLayer)
Source Link
mgri
  • 16.3k
  • 6
  • 48
  • 80
Loading