File: map_query_test.py

package info (click to toggle)
python-mapnik 1%3A0.0~20240222-5ab32f020-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 11,364 kB
  • sloc: python: 11,685; cpp: 5,776; sh: 242; makefile: 10
file content (124 lines) | stat: -rw-r--r-- 5,104 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import os
import mapnik
import pytest
from .utilities import execution_path

@pytest.fixture(scope="module")
def setup():
    # All of the paths used are relative, if we run the tests
    # from another directory we need to chdir()
    os.chdir(execution_path('.'))
    yield

# map has no layers
def test_map_query_throw1(setup):
    with pytest.raises(IndexError):
        m = mapnik.Map(256, 256)
        m.zoom_to_box(mapnik.Box2d(-1, -1, 0, 0))
        m.query_point(0, 0, 0)

# only positive indexes
def test_map_query_throw2():
    with pytest.raises(IndexError):
        m = mapnik.Map(256, 256)
        m.query_point(-1, 0, 0)

# map has never been zoomed (nodata)
def test_map_query_throw3():
    with pytest.raises(RuntimeError):
        m = mapnik.Map(256, 256)
        m.query_point(0, 0, 0)

if 'shape' in mapnik.DatasourceCache.plugin_names():
    # map has never been zoomed (even with data)
    def test_map_query_throw4():
        if not os.path.exists('../data/good_maps/agg_poly_gamma_map.xml'):
            pytest.skip('Missing data')

        with pytest.raises(RuntimeError):
            m = mapnik.Map(256, 256)
            mapnik.load_map(m, '../data/good_maps/agg_poly_gamma_map.xml')
            m.query_point(0, 0, 0)

    # invalid coords in general (do not intersect)
    def test_map_query_throw5():
        if not os.path.exists('../data/good_maps/agg_poly_gamma_map.xml'):
            pytest.skip('Missing data')

        with pytest.raises(RuntimeError):
            m = mapnik.Map(256, 256)
            mapnik.load_map(m, '../data/good_maps/agg_poly_gamma_map.xml')
            m.zoom_all()
            m.query_point(0, 9999999999999999, 9999999999999999)

    def test_map_query_works1():
        if not os.path.exists('../data/good_maps/wgs842merc_reprojection.xml'):
            pytest.skip('Missing data')

        m = mapnik.Map(256, 256)
        mapnik.load_map(m, '../data/good_maps/wgs842merc_reprojection.xml')
        merc_bounds = mapnik.Box2d(-20037508.34, -
                                   20037508.34, 20037508.34, 20037508.34)
        m.maximum_extent = merc_bounds
        m.zoom_all()
        # somewhere in kansas
        fs = m.query_point(0, -11012435.5376, 4599674.6134)
        feat = fs.next()
        assert feat.attributes['NAME_FORMA'] ==  u'United States of America'

    def test_map_query_works2():
        if not os.path.exists('../data/good_maps/merc2wgs84_reprojection.xml'):
            pytest.skip('Missing data')

        m = mapnik.Map(256, 256)
        mapnik.load_map(m, '../data/good_maps/merc2wgs84_reprojection.xml')
        wgs84_bounds = mapnik.Box2d(-179.999999975, -
                                    85.0511287776, 179.999999975, 85.0511287776)
        m.maximum_extent = wgs84_bounds
        # caution - will go square due to evil aspect_fix_mode backhandedness
        m.zoom_all()
        # mapnik.render_to_file(m,'works2.png')
        # validate that aspect_fix_mode modified the bbox reasonably
        e = m.envelope()
        assert e.minx == pytest.approx(-179.999999975, abs=1e-7)
        assert e.miny == pytest.approx(-167.951396161, abs=1e-7)
        assert e.maxx == pytest.approx(179.999999975, abs=1e-7)
        assert e.maxy == pytest.approx(192.048603789, abs=1e-7)
        fs = m.query_point(0, -98.9264, 38.1432)  # somewhere in kansas
        feat = fs.next()
        assert feat.attributes['NAME'] ==  u'United States'

    def test_map_query_in_pixels_works1():
        if not os.path.exists('../data/good_maps/wgs842merc_reprojection.xml'):
            pytest.skip('Missing data')

        m = mapnik.Map(256, 256)
        mapnik.load_map(m, '../data/good_maps/wgs842merc_reprojection.xml')
        merc_bounds = mapnik.Box2d(-20037508.34, -
                                   20037508.34, 20037508.34, 20037508.34)
        m.maximum_extent = merc_bounds
        m.zoom_all()
        fs = m.query_map_point(0, 55, 100)  # somewhere in middle of us
        feat = fs.next()
        assert feat.attributes['NAME_FORMA'] ==  u'United States of America'

    def test_map_query_in_pixels_works2():
        if not os.path.exists('../data/good_maps/merc2wgs84_reprojection.xml'):
            pytest.skip('Missing data')

        m = mapnik.Map(256, 256)
        mapnik.load_map(m, '../data/good_maps/merc2wgs84_reprojection.xml')
        wgs84_bounds = mapnik.Box2d(-179.999999975, -
                                    85.0511287776, 179.999999975, 85.0511287776)
        m.maximum_extent = wgs84_bounds
        # caution - will go square due to evil aspect_fix_mode backhandedness
        m.zoom_all()
        # validate that aspect_fix_mode modified the bbox reasonably
        e = m.envelope()
        assert e.minx == pytest.approx(-179.999999975, abs=1e-7)
        assert e.miny == pytest.approx(-167.951396161, abs=1e-7)
        assert e.maxx == pytest.approx(179.999999975, abs=1e-7)
        assert e.maxy == pytest.approx(192.048603789, abs=1e-7)
        fs = m.query_map_point(0, 55, 100)  # somewhere in Canada
        feat = fs.next()
        assert feat.attributes['NAME'] ==  u'Canada'