def testFormatXPair(self): """Test formatting x as pair""" self.assertEqual(QgsCoordinateFormatter.formatX(20, QgsCoordinateFormatter.FormatPair, 0), '20') self.assertEqual(QgsCoordinateFormatter.formatX(-20, QgsCoordinateFormatter.FormatPair, 0), '-20') self.assertEqual(QgsCoordinateFormatter.formatX(20.11111111111111111, QgsCoordinateFormatter.FormatPair, 3), '20.111') self.assertEqual(QgsCoordinateFormatter.formatX(20.11161111111111111, QgsCoordinateFormatter.FormatPair, 3), '20.112') self.assertEqual(QgsCoordinateFormatter.formatX(20, QgsCoordinateFormatter.FormatPair, 3), '20.000') self.assertEqual(QgsCoordinateFormatter.formatX(float('inf'), QgsCoordinateFormatter.FormatPair, 3), 'infinite')
def formattedCoordinateElevation(self, point, elevation): lon = QgsCoordinateFormatter.formatX( point.x(), QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 3) lon = lon[-1:] + lon[:-1] lon = lon.replace('°', '° ').replace('′', '\' ').replace('″', '\"') lat = QgsCoordinateFormatter.formatY( point.y(), QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 3) lat = lat[-1:] + lat[:-1] lat = lat.replace('°', '° ').replace('′', '\' ').replace('″', '\"') if (elevation > 999999.99): elevation = 999999.99 elevation = f'{elevation:.2f}' elevation = elevation.rjust(9, '0') return '{},{},+{}'.format(lat, lon, elevation)
def run(self): """Run method that performs all the real work""" # Create the dialog with elements (after translation) and keep reference # Only create GUI ONCE in callback, so that it will only load when the plugin is started if self.first_start == True: self.first_start = False self.dlg = SetLocationDialog() self.dlg.pushButton.clicked.connect(self.select_output_file) # Fetch the currently loaded layers layers = QgsProject.instance().layerTreeRoot().children() # Clear the contents of the comboBox and lineEdit from previous runs self.dlg.comboBox.clear() self.dlg.lineEdit.clear() self.dlg.lineEdit_2.clear() # Populate the comboBox with names of all the loaded layers self.dlg.comboBox.addItems([layer.name() for layer in layers]) # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result: filename = self.dlg.lineEdit_2.text() with open(filename, 'w') as output_file: selectedLayerIndex = self.dlg.comboBox.currentIndex() selectedLayer = layers[selectedLayerIndex].layer() fieldnames = [field.name() for field in selectedLayer.fields()] # write header line = ','.join(name for name in fieldnames) + '\n' output_file.write(line) # wirte feature attributes for f in selectedLayer.getFeatures(): line = ','.join(str(f[name]) for name in fieldnames) + '\n' output_file.write(line) x = float(self.dlg.lineEdit.text()) flags = QgsCoordinateFormatter.FlagDegreesUseStringSuffix y = QgsCoordinateFormatter.formatX(x, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, flags) self.iface.messageBar().pushMessage( "Success", y, level=Qgis.Success, duration=7)
def testFormatXDegrees(self): """Test formatting x as decimal degrees""" self.assertEqual( QgsCoordinateFormatter.formatX( 80, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"80.00°E") # check precision self.assertEqual( QgsCoordinateFormatter.formatX( 80, QgsCoordinateFormatter.FormatDecimalDegrees, 4), u"80.0000°E") self.assertEqual( QgsCoordinateFormatter.formatX( 80.12345678, QgsCoordinateFormatter.FormatDecimalDegrees, 4), u"80.1235°E") self.assertEqual( QgsCoordinateFormatter.formatX( 80.12345678, QgsCoordinateFormatter.FormatDecimalDegrees, 0), u"80°E") # check if longitudes > 180 or <-180 wrap around self.assertEqual( QgsCoordinateFormatter.formatX( 370, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"10.00°E") self.assertEqual( QgsCoordinateFormatter.formatX( -370, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"10.00°W") self.assertEqual( QgsCoordinateFormatter.formatX( 181, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"179.00°W") self.assertEqual( QgsCoordinateFormatter.formatX( -181, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"179.00°E") self.assertEqual( QgsCoordinateFormatter.formatX( 359, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"1.00°W") self.assertEqual( QgsCoordinateFormatter.formatX( -359, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"1.00°E") # should be no directional suffixes for 0 degree coordinates self.assertEqual( QgsCoordinateFormatter.formatX( 0, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"0.00°") # should also be no directional suffix for 0 degree coordinates within specified precision self.assertEqual( QgsCoordinateFormatter.formatX( -0.00001, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"0.00°") self.assertEqual( QgsCoordinateFormatter.formatX( 0.00001, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"0.00°") self.assertEqual( QgsCoordinateFormatter.formatX( -0.00001, QgsCoordinateFormatter.FormatDecimalDegrees, 5), u"0.00001°W") self.assertEqual( QgsCoordinateFormatter.formatX( 0.00001, QgsCoordinateFormatter.FormatDecimalDegrees, 5), u"0.00001°E") # should be no directional suffixes for 180 degree longitudes self.assertEqual( QgsCoordinateFormatter.formatX( 180, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"180.00°") # should also be no directional suffix for 180 degree longitudes within specified precision self.assertEqual( QgsCoordinateFormatter.formatX( 180.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"180.00°") self.assertEqual( QgsCoordinateFormatter.formatX( 179.999999, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"180.00°") self.assertEqual( QgsCoordinateFormatter.formatX( 180.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 6), u"179.999999°W") self.assertEqual( QgsCoordinateFormatter.formatX( 179.999999, QgsCoordinateFormatter.FormatDecimalDegrees, 6), u"179.999999°E") # test without direction suffix self.assertEqual( QgsCoordinateFormatter.formatX( 80, QgsCoordinateFormatter.FormatDecimalDegrees, 2, QgsCoordinateFormatter.FormatFlags()), u"80.00°") # test 0 longitude self.assertEqual( QgsCoordinateFormatter.formatX( 0, QgsCoordinateFormatter.FormatDecimalDegrees, 2, QgsCoordinateFormatter.FormatFlags()), u"0.00°") # test near zero longitude self.assertEqual( QgsCoordinateFormatter.formatX( 0.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 2, QgsCoordinateFormatter.FormatFlags()), u"0.00°") # should be no "-" prefix for near-zero longitude when rounding to 2 decimal places self.assertEqual( QgsCoordinateFormatter.formatX( -0.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 2, QgsCoordinateFormatter.FormatFlags()), u"0.00°") self.assertEqual( QgsCoordinateFormatter.formatX( 0.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 6, QgsCoordinateFormatter.FormatFlags()), u"0.000001°") self.assertEqual( QgsCoordinateFormatter.formatX( -0.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 6, QgsCoordinateFormatter.FormatFlags()), u"-0.000001°")
def testFormatXDegreesMinutes(self): """Test formatting x as DM""" self.assertEqual( QgsCoordinateFormatter.formatX( 80, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"80°0.00′E") # check precision self.assertEqual( QgsCoordinateFormatter.formatX( 80, QgsCoordinateFormatter.FormatDegreesMinutes, 4), u"80°0.0000′E") self.assertEqual( QgsCoordinateFormatter.formatX( 80.12345678, QgsCoordinateFormatter.FormatDegreesMinutes, 4), u"80°7.4074′E") self.assertEqual( QgsCoordinateFormatter.formatX( 80.12345678, QgsCoordinateFormatter.FormatDegreesMinutes, 0), u"80°7′E") # check if longitudes > 180 or <-180 wrap around self.assertEqual( QgsCoordinateFormatter.formatX( 370, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"10°0.00′E") self.assertEqual( QgsCoordinateFormatter.formatX( -370, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"10°0.00′W") self.assertEqual( QgsCoordinateFormatter.formatX( 181, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"179°0.00′W") self.assertEqual( QgsCoordinateFormatter.formatX( -181, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"179°0.00′E") self.assertEqual( QgsCoordinateFormatter.formatX( 359, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"1°0.00′W") self.assertEqual( QgsCoordinateFormatter.formatX( -359, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"1°0.00′E") # should be no directional suffixes for 0 degree coordinates self.assertEqual( QgsCoordinateFormatter.formatX( 0, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"0°0.00′") # should also be no directional suffix for 0 degree coordinates within specified precision self.assertEqual( QgsCoordinateFormatter.formatX( -0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"0°0.00′") self.assertEqual( QgsCoordinateFormatter.formatX( 0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"0°0.00′") self.assertEqual( QgsCoordinateFormatter.formatX( -0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 5), u"0°0.00006′W") self.assertEqual( QgsCoordinateFormatter.formatX( 0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 5), u"0°0.00006′E") # test rounding does not create minutes >= 60 self.assertEqual( QgsCoordinateFormatter.formatX( 99.999999, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"100°0.00′E") # should be no directional suffixes for 180 degree longitudes self.assertEqual( QgsCoordinateFormatter.formatX( 180, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"180°0.00′") # should also be no directional suffix for 180 degree longitudes within specified precision self.assertEqual( QgsCoordinateFormatter.formatX( 180.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"180°0.00′") self.assertEqual( QgsCoordinateFormatter.formatX( 179.999999, QgsCoordinateFormatter.FormatDegreesMinutes, 2), u"180°0.00′") self.assertEqual( QgsCoordinateFormatter.formatX( 180.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 5), u"179°59.99994′W") self.assertEqual( QgsCoordinateFormatter.formatX( 179.999999, QgsCoordinateFormatter.FormatDegreesMinutes, 5), u"179°59.99994′E") # test without direction suffix self.assertEqual( QgsCoordinateFormatter.formatX( 80, QgsCoordinateFormatter.FormatDegreesMinutes, 2, QgsCoordinateFormatter.FormatFlags()), u"80°0.00′") # test 0 longitude self.assertEqual( QgsCoordinateFormatter.formatX( 0, QgsCoordinateFormatter.FormatDegreesMinutes, 2, QgsCoordinateFormatter.FormatFlags()), u"0°0.00′") # test near zero longitude self.assertEqual( QgsCoordinateFormatter.formatX( 0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 2, QgsCoordinateFormatter.FormatFlags()), u"0°0.00′") # should be no "-" prefix for near-zero longitude when rounding to 2 decimal places self.assertEqual( QgsCoordinateFormatter.formatX( -0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 2, QgsCoordinateFormatter.FormatFlags()), u"0°0.00′") self.assertEqual( QgsCoordinateFormatter.formatX( 0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 5, QgsCoordinateFormatter.FormatFlags()), u"0°0.00006′") self.assertEqual( QgsCoordinateFormatter.formatX( -0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 5, QgsCoordinateFormatter.FormatFlags()), u"-0°0.00006′") # test with padding padding_and_suffix = QgsCoordinateFormatter.FormatFlags( QgsCoordinateFormatter.FlagDegreesPadMinutesSeconds | QgsCoordinateFormatter.FlagDegreesUseStringSuffix) self.assertEqual( QgsCoordinateFormatter.formatX( 80, QgsCoordinateFormatter.FormatDegreesMinutes, 2, padding_and_suffix), u"80°00.00′E") self.assertEqual( QgsCoordinateFormatter.formatX( 0, QgsCoordinateFormatter.FormatDegreesMinutes, 2, padding_and_suffix), u"0°00.00′") self.assertEqual( QgsCoordinateFormatter.formatX( -0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 2, padding_and_suffix), u"0°00.00′") self.assertEqual( QgsCoordinateFormatter.formatX( 0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 2, padding_and_suffix), u"0°00.00′") self.assertEqual( QgsCoordinateFormatter.formatX( -0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 5, padding_and_suffix), u"0°00.00006′W") self.assertEqual( QgsCoordinateFormatter.formatX( 0.000001, QgsCoordinateFormatter.FormatDegreesMinutes, 5, padding_and_suffix), u"0°00.00006′E")
def testFormatXFormatDegreesMinutesSeconds(self): """Test formatting x as DMS""" self.assertEqual(QgsCoordinateFormatter.formatX(80, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"80°0′0.00″E") # check precision self.assertEqual(QgsCoordinateFormatter.formatX(80, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 4), u"80°0′0.0000″E") self.assertEqual(QgsCoordinateFormatter.formatX(80.12345678, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 4), u"80°7′24.4444″E") self.assertEqual(QgsCoordinateFormatter.formatX(80.12345678, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 0), u"80°7′24″E") # check if longitudes > 180 or <-180 wrap around self.assertEqual(QgsCoordinateFormatter.formatX(370, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"10°0′0.00″E") self.assertEqual(QgsCoordinateFormatter.formatX(-370, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"10°0′0.00″W") self.assertEqual(QgsCoordinateFormatter.formatX(181, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"179°0′0.00″W") self.assertEqual(QgsCoordinateFormatter.formatX(-181, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"179°0′0.00″E") self.assertEqual(QgsCoordinateFormatter.formatX(359, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"1°0′0.00″W") self.assertEqual(QgsCoordinateFormatter.formatX(-359, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"1°0′0.00″E") # should be no directional suffixes for 0 degree coordinates self.assertEqual(QgsCoordinateFormatter.formatX(0, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"0°0′0.00″") # should also be no directional suffix for 0 degree coordinates within specified precision self.assertEqual(QgsCoordinateFormatter.formatX(-0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"0°0′0.00″") self.assertEqual(QgsCoordinateFormatter.formatX(-0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 5), u"0°0′0.00360″W") self.assertEqual(QgsCoordinateFormatter.formatX(0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"0°0′0.00″") self.assertEqual(QgsCoordinateFormatter.formatX(0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 5), u"0°0′0.00360″E") # should be no directional suffixes for 180 degree longitudes self.assertEqual(QgsCoordinateFormatter.formatX(180, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"180°0′0.00″") self.assertEqual(QgsCoordinateFormatter.formatX(179.999999, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"180°0′0.00″") self.assertEqual(QgsCoordinateFormatter.formatX(179.999999, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 5), u"179°59′59.99640″E") self.assertEqual(QgsCoordinateFormatter.formatX(180.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"180°0′0.00″") self.assertEqual(QgsCoordinateFormatter.formatX(180.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 5), u"179°59′59.99640″W") # test rounding does not create seconds >= 60 self.assertEqual(QgsCoordinateFormatter.formatX(99.999999, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"100°0′0.00″E") self.assertEqual(QgsCoordinateFormatter.formatX(89.999999, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), u"90°0′0.00″E") # test without direction suffix self.assertEqual(QgsCoordinateFormatter.formatX(80, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, QgsCoordinateFormatter.FormatFlags()), u"80°0′0.00″") # test 0 longitude self.assertEqual(QgsCoordinateFormatter.formatX(0, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, QgsCoordinateFormatter.FormatFlags()), u"0°0′0.00″") # test near zero longitude self.assertEqual(QgsCoordinateFormatter.formatX(0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, QgsCoordinateFormatter.FormatFlags()), u"0°0′0.00″") # should be no "-" prefix for near-zero longitude when rounding to 2 decimal places self.assertEqual(QgsCoordinateFormatter.formatX(-0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, QgsCoordinateFormatter.FormatFlags()), u"0°0′0.00″") self.assertEqual(QgsCoordinateFormatter.formatX(0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 5, QgsCoordinateFormatter.FormatFlags()), u"0°0′0.00360″") self.assertEqual(QgsCoordinateFormatter.formatX(-0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 5, QgsCoordinateFormatter.FormatFlags()), u"-0°0′0.00360″") # test with padding padding_and_suffix = QgsCoordinateFormatter.FormatFlags(QgsCoordinateFormatter.FlagDegreesPadMinutesSeconds | QgsCoordinateFormatter.FlagDegreesUseStringSuffix) self.assertEqual(QgsCoordinateFormatter.formatX(80, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, padding_and_suffix), u"80°00′00.00″E") self.assertEqual(QgsCoordinateFormatter.formatX(85.44, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, padding_and_suffix), u"85°26′24.00″E") self.assertEqual(QgsCoordinateFormatter.formatX(0, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, padding_and_suffix), u"0°00′00.00″") self.assertEqual(QgsCoordinateFormatter.formatX(-0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, padding_and_suffix), u"0°00′00.00″") self.assertEqual(QgsCoordinateFormatter.formatX(0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, padding_and_suffix), u"0°00′00.00″") self.assertEqual(QgsCoordinateFormatter.formatX(-0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 5, padding_and_suffix), u"0°00′00.00360″W") self.assertEqual(QgsCoordinateFormatter.formatX(0.000001, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 5, padding_and_suffix), u"0°00′00.00360″E")
def testFormatXDegrees(self): """Test formatting x as decimal degrees""" self.assertEqual(QgsCoordinateFormatter.formatX(80, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"80.00°E") # check precision self.assertEqual(QgsCoordinateFormatter.formatX(80, QgsCoordinateFormatter.FormatDecimalDegrees, 4), u"80.0000°E") self.assertEqual(QgsCoordinateFormatter.formatX(80.12345678, QgsCoordinateFormatter.FormatDecimalDegrees, 4), u"80.1235°E") self.assertEqual(QgsCoordinateFormatter.formatX(80.12345678, QgsCoordinateFormatter.FormatDecimalDegrees, 0), u"80°E") # check if longitudes > 180 or <-180 wrap around self.assertEqual(QgsCoordinateFormatter.formatX(370, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"10.00°E") self.assertEqual(QgsCoordinateFormatter.formatX(-370, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"10.00°W") self.assertEqual(QgsCoordinateFormatter.formatX(181, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"179.00°W") self.assertEqual(QgsCoordinateFormatter.formatX(-181, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"179.00°E") self.assertEqual(QgsCoordinateFormatter.formatX(359, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"1.00°W") self.assertEqual(QgsCoordinateFormatter.formatX(-359, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"1.00°E") # should be no directional suffixes for 0 degree coordinates self.assertEqual(QgsCoordinateFormatter.formatX(0, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"0.00°") # should also be no directional suffix for 0 degree coordinates within specified precision self.assertEqual(QgsCoordinateFormatter.formatX(-0.00001, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"0.00°") self.assertEqual(QgsCoordinateFormatter.formatX(0.00001, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"0.00°") self.assertEqual(QgsCoordinateFormatter.formatX(-0.00001, QgsCoordinateFormatter.FormatDecimalDegrees, 5), u"0.00001°W") self.assertEqual(QgsCoordinateFormatter.formatX(0.00001, QgsCoordinateFormatter.FormatDecimalDegrees, 5), u"0.00001°E") # should be no directional suffixes for 180 degree longitudes self.assertEqual(QgsCoordinateFormatter.formatX(180, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"180.00°") # should also be no directional suffix for 180 degree longitudes within specified precision self.assertEqual(QgsCoordinateFormatter.formatX(180.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"180.00°") self.assertEqual(QgsCoordinateFormatter.formatX(179.999999, QgsCoordinateFormatter.FormatDecimalDegrees, 2), u"180.00°") self.assertEqual(QgsCoordinateFormatter.formatX(180.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 6), u"179.999999°W") self.assertEqual(QgsCoordinateFormatter.formatX(179.999999, QgsCoordinateFormatter.FormatDecimalDegrees, 6), u"179.999999°E") # test without direction suffix self.assertEqual(QgsCoordinateFormatter.formatX(80, QgsCoordinateFormatter.FormatDecimalDegrees, 2, QgsCoordinateFormatter.FormatFlags()), u"80.00°") # test 0 longitude self.assertEqual(QgsCoordinateFormatter.formatX(0, QgsCoordinateFormatter.FormatDecimalDegrees, 2, QgsCoordinateFormatter.FormatFlags()), u"0.00°") # test near zero longitude self.assertEqual(QgsCoordinateFormatter.formatX(0.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 2, QgsCoordinateFormatter.FormatFlags()), u"0.00°") # should be no "-" prefix for near-zero longitude when rounding to 2 decimal places self.assertEqual(QgsCoordinateFormatter.formatX(-0.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 2, QgsCoordinateFormatter.FormatFlags()), u"0.00°") self.assertEqual(QgsCoordinateFormatter.formatX(0.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 6, QgsCoordinateFormatter.FormatFlags()), u"0.000001°") self.assertEqual(QgsCoordinateFormatter.formatX(-0.000001, QgsCoordinateFormatter.FormatDecimalDegrees, 6, QgsCoordinateFormatter.FormatFlags()), u"-0.000001°")