Ejemplo n.º 1
0
    def overpass_filter(self):
        nodes = set()
        ways = set()
        relations = set()

        def add_where(filters,key):
            geom_types = self.geom_types(key)
            if 'points' in geom_types:
                for e in filters:
                    nodes.add(e)
            if 'lines' in geom_types:
                for e in filters:
                    ways.add(e)
            if 'polygons' in geom_types:
                for e in filters:
                    ways.add(e)
                    relations.add(e)

        for key in self.themes:
            theme = self.doc[key]
            if 'where' in theme:
                if isinstance(theme['where'],list):
                    for clause in theme['where']:
                        add_where(OverpassFilter(clause).filter(),key)
                else:
                    add_where(OverpassFilter(theme['where']).filter(),key)
            else:
                add_where(("['" + x + "']" for x in theme['select']),key)

        return (list(nodes), list(ways), list(relations))
Ejemplo n.º 2
0
 def test_and_or(self):
     s = OverpassFilter("name1 = 'foo' or name2 = 'bar'")
     self.assertEqual(s.filter(), ["[name1='foo']", "[name2='bar']"])
     s = OverpassFilter(
         "(name1 = 'foo' and name2 = 'bar') or name3 = 'baz'")
     self.assertEqual(s.filter(),
                      ["[name1='foo']", "[name2='bar']", "[name3='baz']"])
Ejemplo n.º 3
0
 def test_notnull(self):
     s = OverpassFilter("name is not null")
     self.assertEqual(s.filter(),["[name]"])
Ejemplo n.º 4
0
 def test_whitespace(self):
     s = OverpassFilter("name = 'some value'")
     self.assertEqual(s.filter(),["[name='some value']"])
Ejemplo n.º 5
0
 def test_basic_list(self):
     s = OverpassFilter("name IN ('val1','val2')")
     self.assertEqual(s.filter(),["[name~'val1|val2']"])
Ejemplo n.º 6
0
 def test_basic(self):
     s = OverpassFilter("name = 'somename'")
     self.assertEqual(s.filter(),["[name='somename']"])
     s = OverpassFilter("level > 4")
     self.assertEqual(s.filter(),["[level]"])