def test_wkt_writer_precision(self): wkt_w = WKTWriter() self.assertIsNone(wkt_w.precision) self.assertEqual( wkt_w.write(Point(1.0 / 3, 2.0 / 3)), b"POINT (0.3333333333333333 0.6666666666666666)", ) wkt_w.precision = 1 self.assertEqual(wkt_w.precision, 1) self.assertEqual(wkt_w.write(Point(1.0 / 3, 2.0 / 3)), b"POINT (0.3 0.7)") wkt_w.precision = 0 self.assertEqual(wkt_w.precision, 0) self.assertEqual(wkt_w.write(Point(1.0 / 3, 2.0 / 3)), b"POINT (0 1)") wkt_w.precision = None self.assertIsNone(wkt_w.precision) self.assertEqual( wkt_w.write(Point(1.0 / 3, 2.0 / 3)), b"POINT (0.3333333333333333 0.6666666666666666)", ) with self.assertRaisesMessage( AttributeError, "WKT output rounding precision must be "): wkt_w.precision = "potato"
def test_wkt_writer_precision(self): wkt_w = WKTWriter() self.assertIsNone(wkt_w.precision) self.assertEqual(wkt_w.write(Point(1. / 3, 2. / 3)), b'POINT (0.3333333333333333 0.6666666666666666)') wkt_w.precision = 1 self.assertEqual(wkt_w.precision, 1) self.assertEqual(wkt_w.write(Point(1. / 3, 2. / 3)), b'POINT (0.3 0.7)') wkt_w.precision = 0 self.assertEqual(wkt_w.precision, 0) self.assertEqual(wkt_w.write(Point(1. / 3, 2. / 3)), b'POINT (0 1)') wkt_w.precision = None self.assertIsNone(wkt_w.precision) self.assertEqual(wkt_w.write(Point(1. / 3, 2. / 3)), b'POINT (0.3333333333333333 0.6666666666666666)') with self.assertRaisesMessage(AttributeError, 'WKT output rounding precision must be '): wkt_w.precision = 'potato'
def test_wkt_writer_precision(self): wkt_w = WKTWriter() self.assertEqual(wkt_w.precision, None) self.assertEqual(wkt_w.write(Point(1. / 3, 2. / 3)), b'POINT (0.3333333333333333 0.6666666666666666)') wkt_w.precision = 1 self.assertEqual(wkt_w.precision, 1) self.assertEqual(wkt_w.write(Point(1. / 3, 2. / 3)), b'POINT (0.3 0.7)') wkt_w.precision = 0 self.assertEqual(wkt_w.precision, 0) self.assertEqual(wkt_w.write(Point(1. / 3, 2. / 3)), b'POINT (0 1)') wkt_w.precision = None self.assertEqual(wkt_w.precision, None) self.assertEqual(wkt_w.write(Point(1. / 3, 2. / 3)), b'POINT (0.3333333333333333 0.6666666666666666)') with self.assertRaisesMessage(AttributeError, 'WKT output rounding precision must be '): wkt_w.precision = 'potato'
def to_representation(self, value): if isinstance(value, dict) or value is None: return value new_value = copy.copy(value) new_value = new_value.buffer(0.5) # Use Douglas-Peucker to simplify geom (one vertex 0.2m) for large polygons if new_value.num_coords > 1000: new_value = new_value.simplify(0.2, preserve_topology=False) new_value.transform(4326) wkt_w = WKTWriter() # number of decimals wkt_w.precision = 6 if new_value.area > 0: return wkt_w.write(new_value).decode() return 'POLYGON EMPTY'