PyQGIS – How to Get Layer’s Unit of Measurement as String in PyQGIS

coordinate systempyqgispythonqgis

I'm writing a plugin where once a layer is selected in a combo box, it shows the layer's linear unit of measurement (meters, feet, etc.) in a QLineEdit box.

def Function(self):
    currLyr = self.cmbLyrSelect.currentLayer()
    currLyrUnit = currLyr.sourceCrs().mapUnits()
    self.linEditBox.setText(str(currLyrUnit))

This works and mapUnits() return a 0, which is meters as the layer is projected. So, to get meters as string, I use instead

    self.linEditBox.setText(str(currLyrUnit.encodeUnit()))

But QGIS returns an Attribute Error saying 'DistanceUnit' object has no attribute 'encodeUnit'.

What's the correct syntax in using encodeUnit()?

sourceCrs() https://qgis.org/pyqgis/3.16/core/QgsCoordinateTransform.html?highlight=sourcecrs#qgis.core.QgsCoordinateTransform.sourceCrs

mapUnits() https://qgis.org/pyqgis/3.16/core/QgsCoordinateReferenceSystem.html#qgis.core.QgsCoordinateReferenceSystem.mapUnits

DistanceUnit() https://qgis.org/pyqgis/3.16/core/QgsUnitTypes.html#qgis.core.QgsUnitTypes.DistanceUnit

encodeUnit() https://qgis.org/pyqgis/3.16/core/QgsUnitTypes.html#qgis.core.QgsUnitTypes.encodeUnit

Best Answer

You can get it with the following code :

QgsUnitTypes.encodeUnit(self.cmbLyrSelect.currentLayer().crs().mapUnits())
Related Question