def test_parse_area(): geometry = Geometry('foo', 'bar', 'baz', 2056) area = geometry._parse_area( XML(""" <Flaeche> <Surface> <Boundary> <Polyline> <COORD> <C1>0</C1> <C2>0</C2> </COORD> <COORD> <C1>1</C1> <C2>1</C2> </COORD> <COORD> <C1>1</C1> <C2>0</C2> </COORD> </Polyline> </Boundary> </Surface> </Flaeche> """), 2056) assert isinstance(area, Polygon) assert list(area.exterior.coords) == [(0, 0), (1, 1), (1, 0), (0, 0)]
def test_parse_coord(): geometry = Geometry('foo', 'bar', 'baz', 2056) coord = XML(""" <Coord> <C1>0</C1> <C2>1</C2> </Coord> """) assert geometry._parse_coord(coord, 2056) == (0.0, 1.0) assert geometry._parse_coord(coord, 21781) == geometry._reprojector.transform( (0.0, 1.0), from_srs=21781, to_srs=2056)
def test_parse_point(): point = XML(""" <Punkt> <Coord> <C1>0</C1> <C2>1</C2> </Coord> </Punkt> """) geometry = Geometry('foo', 'bar', 'baz', 2056) p = geometry._parse_point(point, 2056) assert isinstance(p, Point) assert p.x == 0.0 assert p.y == 1.0
def test_parse_arc(): geometry = Geometry('foo', 'bar', 'MULTILINESTRING', 2056, arc_max_diff=0.1) coords = [(0, 0)] element = XML(""" <ARC> <C1>2</C1> <C2>0</C2> <A1>1</A1> <A2>1</A2> </ARC> """) coords.extend(geometry._parse_arc(element, coords[-1], 2056)) assert coords == [(0.0, 0.0), (0.293, 0.707), (1.0, 1.0), (1.707, 0.707), (2.0, 0.0)]
def test_parse_line(): geometry = Geometry('foo', 'bar', 'baz', 2056) line = geometry._parse_line( XML(""" <Linie> <Polyline> <COORD> <C1>0</C1> <C2>0</C2> </COORD> <COORD> <C1>1</C1> <C2>1</C2> </COORD> </Polyline> </Linie> """), 2056) assert isinstance(line, LineString) assert list(line.coords) == [(0, 0), (1, 1)]
def _parse_transfer_structure(self, session, transfer_structure, laws=False): """ Parses the transfer structure content. Args: session (sqlalchemy.orm.session.Session): The SQLAlchemy session for database interaction. transfer_structure (lxml.etree.Element): The transfer structure element. laws (bool): True if the parsed file is the XML containing the federal laws. """ office = Office(session, self._models.Office) document = Document(session, self._models.Document) article = Article(session, self._models.Article) legend_entry = LegendEntry(session, self._models.LegendEntry, self._topic_settings.get('code')) view_service = ViewService(session, self._models.ViewService, legend_entry) public_law_restriction = PublicLawRestriction( session, self._models.PublicLawRestriction, self._topic_settings.get('code')) geometry = Geometry(session, self._models.Geometry, self._topic_settings.get('geometry_type'), self._srid, arc_max_diff=self._arc_max_diff, arc_precision=self._arc_precision) document_reference = DocumentReference(session, self._models.DocumentReference) public_law_restriction_document = PublicLawRestrictionDocument( session, self._models.PublicLawRestrictionDocument) reference_definition = ReferenceDefinition( session, self._models.ReferenceDefinition, self._topic_settings.get('code')) document_reference_definition = DocumentReferenceDefinition( session, self._models.DocumentReferenceDefinition) base_refinement = BaseRefinement( session, self._models.PublicLawRestrictionBase, self._models.PublicLawRestrictionRefinement) for element in transfer_structure: tag = get_tag(element) if tag == self.TAG_OFFICE: # Use the last office ID for data integration self._data_integration_office_id = element.attrib['TID'] office.parse(element) elif tag == self.TAG_DOCUMENT: document.parse(element, 'Law' if laws else 'Hint') elif tag == self.TAG_LEGAL_PROVISION: document.parse(element, 'LegalProvision') elif tag == self.TAG_ARTICLE: article.parse(element) elif tag == self.TAG_VIEW_SERVICE: view_service.parse(element) elif tag == self.TAG_PLR: public_law_restriction.parse(element) elif tag == self.TAG_GEOMETRY: geometry.parse(element) elif tag == self.TAG_DOCUMENT_REFERENCE: document_reference.parse(element) elif tag == self.TAG_PUBLIC_LAW_RESTRICTION_DOCUMENT: public_law_restriction_document.parse(element) elif tag == self.TAG_REFERENCE_DEFINITION: reference_definition.parse(element) elif tag == self.TAG_DOCUMENT_REFERENCE_DEFINITION: document_reference_definition.parse(element) elif tag == self.TAG_BASE_REFINEMENT: base_refinement.parse(element) else: self._log.error('NOT IMPLEMENTED: {0}'.format( get_tag(element)))
def test_parse_geom(element, geometry_type, instance_type): geometry = Geometry('foo', 'bar', geometry_type, 2056) geom = geometry._parse_geom(element) assert isinstance(to_shape(geom), instance_type)
def test_geometry_init(): geometry = Geometry('foo', 'bar', 'baz', 2056) assert geometry._session == 'foo' assert geometry._model == 'bar' assert geometry._geometry_type == 'baz' assert isinstance(geometry._reprojector, Reprojector)