1

I have a shapefile which renders a map.

I want to calculate and preferably store length of each feature in the shapefile either using QGis or through programmatic means.

What is the best way to get this task done?

2 Answers 2

4

Create a Real Number field in the shapefile. From Attribute table, open 'Field Calculator'. From the functions list, expand 'Geometry' section. selection length.

The expression would look

 $length 

Check update existing field at the top of field calculator and select the newly created double field name.

5
  • What is the unit of length I get there? I want it to be in km.
    – Sibi
    Nov 20, 2012 at 6:21
  • 1
    it will be in the units of the coordinate system of your layer. It could be meter/feet/degrees depending on it. you could do a conversion depending on your coordinate system.If the coordinate system is Geogrpahic, it would be best to convert to a projected coordinate system for linear measurement.
    – vinayan
    Nov 20, 2012 at 8:19
  • So to get km from metres, multiply $length x 1000 in the calculator and that will be the output into the shapefile field. A projected coordinate system may be referred to as UTM or GRID.
    – Willy
    Nov 20, 2012 at 11:20
  • @Willy The map is in the Geographic coordinate system. So i don't exactly know what is the unit in which geographic coordinate system renders it. It's in EPSG:4326.
    – Sibi
    Nov 20, 2012 at 11:25
  • @Sibi spatialreference.org/ref/epsg/4326/html - says that it is in Degrees
    – vinayan
    Nov 20, 2012 at 12:01
1

Using the arc python module (arcpy) is an alternative. To run the code it is necessary with an ArcInfo license.

Fairly straight forward. The script establishes a new field and populates it with a field value in meters:

import arcpy

my_coastline = "coastal_Segments.shp"

#Add field to support lengt calculation
arcpy.AddField_management(my_coastline, "length",  "FLOAT", "12", "", "", "i_perim",   "NULLABLE", "REQUIRED")

#Calculate the length of all segment in the shapefile
arcpy.CalculateField_management(my_coastline, 'length', '!shape.length@meters!', 'PYTHON')

Not sure but I assume the Shapely open source initiative could be an alternative.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.