Skip to main content
Rollback to Revision 2
Source Link
Brian D
  • 385
  • 4
  • 12

I don't know of any built-in tools that track the length of lines as you are editing.

Assuming you are already Editing a layer, one work-around would be (in qGIS 2.0.x):

  1. Open the Layer's Attribute Table.
  2. Open the Field Calculator (Ctrl-I)
  3. Create a new field, name it something like "Length", set the type to decimal width 18, precision 10, or whatever level works for you.
  4. In the Function List, Click on Geometry, and double-click on $length to add it to the Expression box.
  5. Click OK and qGIS will calculate the current line length for all features. (Or only selected features, if you check that box).

This will give you the length of the line as it is in your current edit session.
Warning: The value of the field will not update live. So, if you undo your edits, or make additional edits, the Length value will be wrong.

If you keep the attribute table window open while editing, you can recalculate the column whenever you want.

You could also just run code in the python console to recalculate the attribute values whenever you want to update them. I was hoping to find some python code for qGIS to do this faster than the Attribute Table window UI, but couldn't find any. So I dug a bit and figured out one way to do it.

A script I came up with using this tutorial and the Developer Cookbook is below. I assumes that you are currently in an Editing session with the polyline layer you are editing (and want the lengths for) selected. No features are selected.

aLayer = qgis.utils.iface.activeLayer()
idx = aLayer.fieldNameIndex('Length')
caps = aLayer.dataProvider().capabilities()
features = aLayer.getFeatures()
for feature in features:
    if caps & QgsVectorDataProvider.ChangeAttributeValues:
        fid = feature.id()
        flen = feature.geometry().length()
        aLayer.changeAttributeValue(fid, idx, flen)

Update

In QGIS 2.6+ when creating a new field, you can now check the option "create virtual field". When you do this, QGIS will automatically update the field based on the expression. In this case, updating the calculated length. You can keep the attribute table open while editing and see the updates instantly.

I don't know of any built-in tools that track the length of lines as you are editing.

Assuming you are already Editing a layer, one work-around would be (in qGIS 2.0.x):

  1. Open the Layer's Attribute Table.
  2. Open the Field Calculator (Ctrl-I)
  3. Create a new field, name it something like "Length", set the type to decimal width 18, precision 10, or whatever level works for you.
  4. In the Function List, Click on Geometry, and double-click on $length to add it to the Expression box.
  5. Click OK and qGIS will calculate the current line length for all features. (Or only selected features, if you check that box).

This will give you the length of the line as it is in your current edit session.
Warning: The value of the field will not update live. So, if you undo your edits, or make additional edits, the Length value will be wrong.

If you keep the attribute table window open while editing, you can recalculate the column whenever you want.

You could also just run code in the python console to recalculate the attribute values whenever you want to update them. I was hoping to find some python code for qGIS to do this faster than the Attribute Table window UI, but couldn't find any. So I dug a bit and figured out one way to do it.

A script I came up with using this tutorial and the Developer Cookbook is below. I assumes that you are currently in an Editing session with the polyline layer you are editing (and want the lengths for) selected. No features are selected.

aLayer = qgis.utils.iface.activeLayer()
idx = aLayer.fieldNameIndex('Length')
caps = aLayer.dataProvider().capabilities()
features = aLayer.getFeatures()
for feature in features:
    if caps & QgsVectorDataProvider.ChangeAttributeValues:
        fid = feature.id()
        flen = feature.geometry().length()
        aLayer.changeAttributeValue(fid, idx, flen)

I don't know of any built-in tools that track the length of lines as you are editing.

Assuming you are already Editing a layer, one work-around would be (in qGIS 2.0.x):

  1. Open the Layer's Attribute Table.
  2. Open the Field Calculator (Ctrl-I)
  3. Create a new field, name it something like "Length", set the type to decimal width 18, precision 10, or whatever level works for you.
  4. In the Function List, Click on Geometry, and double-click on $length to add it to the Expression box.
  5. Click OK and qGIS will calculate the current line length for all features. (Or only selected features, if you check that box).

This will give you the length of the line as it is in your current edit session.
Warning: The value of the field will not update live. So, if you undo your edits, or make additional edits, the Length value will be wrong.

If you keep the attribute table window open while editing, you can recalculate the column whenever you want.

You could also just run code in the python console to recalculate the attribute values whenever you want to update them. I was hoping to find some python code for qGIS to do this faster than the Attribute Table window UI, but couldn't find any. So I dug a bit and figured out one way to do it.

A script I came up with using this tutorial and the Developer Cookbook is below. I assumes that you are currently in an Editing session with the polyline layer you are editing (and want the lengths for) selected. No features are selected.

aLayer = qgis.utils.iface.activeLayer()
idx = aLayer.fieldNameIndex('Length')
caps = aLayer.dataProvider().capabilities()
features = aLayer.getFeatures()
for feature in features:
    if caps & QgsVectorDataProvider.ChangeAttributeValues:
        fid = feature.id()
        flen = feature.geometry().length()
        aLayer.changeAttributeValue(fid, idx, flen)

Update

In QGIS 2.6+ when creating a new field, you can now check the option "create virtual field". When you do this, QGIS will automatically update the field based on the expression. In this case, updating the calculated length. You can keep the attribute table open while editing and see the updates instantly.

removed another user's edit to my answer
Source Link
Brian D
  • 385
  • 4
  • 12

I don't know of any built-in tools that track the length of lines as you are editing.

Assuming you are already Editing a layer, one work-around would be (in qGIS 2.0.x):

  1. Open the Layer's Attribute Table.
  2. Open the Field Calculator (Ctrl-I)
  3. Create a new field, name it something like "Length", set the type to decimal width 18, precision 10, or whatever level works for you.
  4. In the Function List, Click on Geometry, and double-click on $length to add it to the Expression box.
  5. Click OK and qGIS will calculate the current line length for all features. (Or only selected features, if you check that box).

This will give you the length of the line as it is in your current edit session.
Warning: The value of the field will not update live. So, if you undo your edits, or make additional edits, the Length value will be wrong.

If you keep the attribute table window open while editing, you can recalculate the column whenever you want.

You could also just run code in the python console to recalculate the attribute values whenever you want to update them. I was hoping to find some python code for qGIS to do this faster than the Attribute Table window UI, but couldn't find any. So I dug a bit and figured out one way to do it.

A script I came up with using this tutorial and the Developer Cookbook is below. I assumes that you are currently in an Editing session with the polyline layer you are editing (and want the lengths for) selected. No features are selected.

aLayer = qgis.utils.iface.activeLayer()
idx = aLayer.fieldNameIndex('Length')
caps = aLayer.dataProvider().capabilities()
features = aLayer.getFeatures()
for feature in features:
    if caps & QgsVectorDataProvider.ChangeAttributeValues:
        fid = feature.id()
        flen = feature.geometry().length()
        aLayer.changeAttributeValue(fid, idx, flen)

Update

In QGIS 2.6+ when creating a new field, you can now check the option "create virtual field". When you do this, QGIS will automatically update the field based on the expression. In this case, updating the calculated length. You can keep the attribute table open while editing and see the updates instantly.

I don't know of any built-in tools that track the length of lines as you are editing.

Assuming you are already Editing a layer, one work-around would be (in qGIS 2.0.x):

  1. Open the Layer's Attribute Table.
  2. Open the Field Calculator (Ctrl-I)
  3. Create a new field, name it something like "Length", set the type to decimal width 18, precision 10, or whatever level works for you.
  4. In the Function List, Click on Geometry, and double-click on $length to add it to the Expression box.
  5. Click OK and qGIS will calculate the current line length for all features. (Or only selected features, if you check that box).

This will give you the length of the line as it is in your current edit session.
Warning: The value of the field will not update live. So, if you undo your edits, or make additional edits, the Length value will be wrong.

If you keep the attribute table window open while editing, you can recalculate the column whenever you want.

You could also just run code in the python console to recalculate the attribute values whenever you want to update them. I was hoping to find some python code for qGIS to do this faster than the Attribute Table window UI, but couldn't find any. So I dug a bit and figured out one way to do it.

A script I came up with using this tutorial and the Developer Cookbook is below. I assumes that you are currently in an Editing session with the polyline layer you are editing (and want the lengths for) selected. No features are selected.

aLayer = qgis.utils.iface.activeLayer()
idx = aLayer.fieldNameIndex('Length')
caps = aLayer.dataProvider().capabilities()
features = aLayer.getFeatures()
for feature in features:
    if caps & QgsVectorDataProvider.ChangeAttributeValues:
        fid = feature.id()
        flen = feature.geometry().length()
        aLayer.changeAttributeValue(fid, idx, flen)

Update

In QGIS 2.6+ when creating a new field, you can now check the option "create virtual field". When you do this, QGIS will automatically update the field based on the expression. In this case, updating the calculated length. You can keep the attribute table open while editing and see the updates instantly.

I don't know of any built-in tools that track the length of lines as you are editing.

Assuming you are already Editing a layer, one work-around would be (in qGIS 2.0.x):

  1. Open the Layer's Attribute Table.
  2. Open the Field Calculator (Ctrl-I)
  3. Create a new field, name it something like "Length", set the type to decimal width 18, precision 10, or whatever level works for you.
  4. In the Function List, Click on Geometry, and double-click on $length to add it to the Expression box.
  5. Click OK and qGIS will calculate the current line length for all features. (Or only selected features, if you check that box).

This will give you the length of the line as it is in your current edit session.
Warning: The value of the field will not update live. So, if you undo your edits, or make additional edits, the Length value will be wrong.

If you keep the attribute table window open while editing, you can recalculate the column whenever you want.

You could also just run code in the python console to recalculate the attribute values whenever you want to update them. I was hoping to find some python code for qGIS to do this faster than the Attribute Table window UI, but couldn't find any. So I dug a bit and figured out one way to do it.

A script I came up with using this tutorial and the Developer Cookbook is below. I assumes that you are currently in an Editing session with the polyline layer you are editing (and want the lengths for) selected. No features are selected.

aLayer = qgis.utils.iface.activeLayer()
idx = aLayer.fieldNameIndex('Length')
caps = aLayer.dataProvider().capabilities()
features = aLayer.getFeatures()
for feature in features:
    if caps & QgsVectorDataProvider.ChangeAttributeValues:
        fid = feature.id()
        flen = feature.geometry().length()
        aLayer.changeAttributeValue(fid, idx, flen)

I don't know of any built-in tools that track the length of lines as you are editing.

Assuming you are already Editing a layer, one work-around would be (in qGIS 2.0.x):

  1. Open the Layer's Attribute Table.
  2. Open the Field Calculator (Ctrl-I)
  3. Create a new field, name it something like "Length", set the type to decimal width 18, precision 10, or whatever level works for you.
  4. In the Function List, Click on Geometry, and double-click on $length to add it to the Expression box.
  5. Click OK and qGIS will calculate the current line length for all features. (Or only selected features, if you check that box).

This will give you the length of the line as it is in your current edit session.
Warning: The value of the field will not update live. So, if you undo your edits, or make additional edits, the Length value will be wrong.

If you keep the attribute table window open while editing, you can recalculate the column whenever you want.

You could also just run code in the python console to recalculate the attribute values whenever you want to update them. I was hoping to find some python code for qGIS to do this faster than the Attribute Table window UI, but couldn't find any. So I dug a bit and figured out one way to do it.

A script I came up with using this tutorial and the Developer Cookbook is below. I assumes that you are currently in an Editing session with the polyline layer you are editing (and want the lengths for) selected. No features are selected.

aLayer = qgis.utils.iface.activeLayer()
idx = aLayer.fieldNameIndex('Length')
caps = aLayer.dataProvider().capabilities()
features = aLayer.getFeatures()
for feature in features:
    if caps & QgsVectorDataProvider.ChangeAttributeValues:
        fid = feature.id()
        flen = feature.geometry().length()
        aLayer.changeAttributeValue(fid, idx, flen)

Update

In QGIS 2.6+ when creating a new field, you can now check the option "create virtual field". When you do this, QGIS will automatically update the field based on the expression. In this case, updating the calculated length. You can keep the attribute table open while editing and see the updates instantly.

I don't know of any built-in tools that track the length of lines as you are editing.

Assuming you are already Editing a layer, one work-around would be (in qGIS 2.0.x):

  1. Open the Layer's Attribute Table.
  2. Open the Field Calculator (Ctrl-I)
  3. Create a new field, name it something like "Length", set the type to decimal width 18, precision 10, or whatever level works for you.
  4. In the Function List, Click on Geometry, and double-click on $length to add it to the Expression box.
  5. Click OK and qGIS will calculate the current line length for all features. (Or only selected features, if you check that box).

This will give you the length of the line as it is in your current edit session.
Warning: The value of the field will not update live. So, if you undo your edits, or make additional edits, the Length value will be wrong.

If you keep the attribute table window open while editing, you can recalculate the column whenever you want.

You could also just run code in the python console to recalculate the attribute values whenever you want to update them. I was hoping to find some python code for qGIS to do this faster than the Attribute Table window UI, but couldn't find any. So I dug a bit and figured out one way to do it.

A script I came up with using this tutorial and the Developer Cookbook is below. I assumes that you are currently in an Editing session with the polyline layer you are editing (and want the lengths for) selected. No features are selected.

aLayer = qgis.utils.iface.activeLayer()
idx = aLayer.fieldNameIndex('Length')
caps = aLayer.dataProvider().capabilities()
features = aLayer.getFeatures()
for feature in features:
    if caps & QgsVectorDataProvider.ChangeAttributeValues:
        fid = feature.id()
        flen = feature.geometry().length()
        aLayer.changeAttributeValue(fid, idx, flen)

I don't know of any built-in tools that track the length of lines as you are editing.

Assuming you are already Editing a layer, one work-around would be (in qGIS 2.0.x):

  1. Open the Layer's Attribute Table.
  2. Open the Field Calculator (Ctrl-I)
  3. Create a new field, name it something like "Length", set the type to decimal width 18, precision 10, or whatever level works for you.
  4. In the Function List, Click on Geometry, and double-click on $length to add it to the Expression box.
  5. Click OK and qGIS will calculate the current line length for all features. (Or only selected features, if you check that box).

This will give you the length of the line as it is in your current edit session.
Warning: The value of the field will not update live. So, if you undo your edits, or make additional edits, the Length value will be wrong.

If you keep the attribute table window open while editing, you can recalculate the column whenever you want.

You could also just run code in the python console to recalculate the attribute values whenever you want to update them. I was hoping to find some python code for qGIS to do this faster than the Attribute Table window UI, but couldn't find any. So I dug a bit and figured out one way to do it.

A script I came up with using this tutorial and the Developer Cookbook is below. I assumes that you are currently in an Editing session with the polyline layer you are editing (and want the lengths for) selected. No features are selected.

aLayer = qgis.utils.iface.activeLayer()
idx = aLayer.fieldNameIndex('Length')
caps = aLayer.dataProvider().capabilities()
features = aLayer.getFeatures()
for feature in features:
    if caps & QgsVectorDataProvider.ChangeAttributeValues:
        fid = feature.id()
        flen = feature.geometry().length()
        aLayer.changeAttributeValue(fid, idx, flen)

Update

In QGIS 2.6+ when creating a new field, you can now check the option "create virtual field". When you do this, QGIS will automatically update the field based on the expression. In this case, updating the calculated length. You can keep the attribute table open while editing and see the updates instantly.

Source Link
Brian D
  • 385
  • 4
  • 12
Loading