mirror of
https://github.com/enzet/map-machine.git
synced 2025-04-28 17:57:11 +02:00
120 lines
2.9 KiB
Python
120 lines
2.9 KiB
Python
"""Test OSM XML parsing."""
|
|
import numpy as np
|
|
|
|
from map_machine.osm.osm_reader import (
|
|
OSMData,
|
|
OSMNode,
|
|
OSMRelation,
|
|
OSMWay,
|
|
parse_levels,
|
|
)
|
|
|
|
__author__ = "Sergey Vartanov"
|
|
__email__ = "me@enzet.ru"
|
|
|
|
|
|
def test_node() -> None:
|
|
"""Test OSM node parsing from XML."""
|
|
osm_data: OSMData = OSMData()
|
|
osm_data.parse_osm_text(
|
|
"""<?xml version="1.0"?>
|
|
<osm>
|
|
<node id="42" lon="5" lat="10" />
|
|
</osm>"""
|
|
)
|
|
assert 42 in osm_data.nodes
|
|
node: OSMNode = osm_data.nodes[42]
|
|
assert node.id_ == 42
|
|
assert np.allclose(node.coordinates, np.array([10, 5]))
|
|
|
|
|
|
def test_node_with_tag() -> None:
|
|
"""Test OSM node parsing from XML."""
|
|
osm_data: OSMData = OSMData()
|
|
osm_data.parse_osm_text(
|
|
"""<?xml version="1.0"?>
|
|
<osm>
|
|
<node id="42" lon="5" lat="10">
|
|
<tag k="key" v="value" />
|
|
</node>
|
|
</osm>"""
|
|
)
|
|
assert 42 in osm_data.nodes
|
|
node: OSMNode = osm_data.nodes[42]
|
|
assert node.id_ == 42
|
|
assert np.allclose(node.coordinates, np.array([10, 5]))
|
|
assert node.tags["key"] == "value"
|
|
|
|
|
|
def test_way() -> None:
|
|
"""Test OSM way parsing from XML."""
|
|
osm_data: OSMData = OSMData()
|
|
osm_data.parse_osm_text(
|
|
"""<?xml version="1.0"?>
|
|
<osm>
|
|
<way id="42" />
|
|
</osm>"""
|
|
)
|
|
assert 42 in osm_data.ways
|
|
way: OSMWay = osm_data.ways[42]
|
|
assert way.id_ == 42
|
|
|
|
|
|
def test_nodes() -> None:
|
|
"""Test OSM node parsing from XML."""
|
|
osm_data: OSMData = OSMData()
|
|
osm_data.parse_osm_text(
|
|
"""<?xml version="1.0"?>
|
|
<osm>
|
|
<node id="1" lon="5" lat="10" />
|
|
<way id="2">
|
|
<nd ref="1" />
|
|
<tag k="key" v="value" />
|
|
</way>
|
|
</osm>"""
|
|
)
|
|
way: OSMWay = osm_data.ways[2]
|
|
assert len(way.nodes) == 1
|
|
assert way.nodes[0].id_ == 1
|
|
assert way.tags["key"] == "value"
|
|
|
|
|
|
def test_relation() -> None:
|
|
"""Test OSM node parsing from XML."""
|
|
osm_data: OSMData = OSMData()
|
|
osm_data.parse_osm_text(
|
|
"""<?xml version="1.0"?>
|
|
<osm>
|
|
<node id="1" lon="5" lat="10" />
|
|
<way id="2">
|
|
<nd ref="1" />
|
|
</way>
|
|
<relation id="3">
|
|
<member type="way" ref="2" role="outer" />
|
|
<tag k="key" v="value" />
|
|
</relation>
|
|
</osm>"""
|
|
)
|
|
assert 3 in osm_data.relations
|
|
relation: OSMRelation = osm_data.relations[3]
|
|
assert relation.id_ == 3
|
|
assert relation.tags["key"] == "value"
|
|
assert len(relation.members) == 1
|
|
assert relation.members[0].type_ == "way"
|
|
assert relation.members[0].ref == 2
|
|
|
|
|
|
def test_parse_levels() -> None:
|
|
"""Test level parsing."""
|
|
assert parse_levels("1") == [1]
|
|
assert parse_levels("-1") == [-1]
|
|
assert parse_levels("1.5") == [1.5]
|
|
assert parse_levels("1,5") == [1.5]
|
|
|
|
|
|
def test_parse_levels_list() -> None:
|
|
"""Test list of levels parsing."""
|
|
assert parse_levels("0;1") == [0, 1]
|
|
assert parse_levels("0;2") == [0, 2]
|
|
assert parse_levels("0;2.5") == [0, 2.5]
|
|
assert parse_levels("0;2,5") == [0, 2.5]
|