X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/80a74181e463efeb071a3904346107d05e88a7a6..5f19b23f49aee9989267ac03b488049f9d681166:/test/bdd/steps/osm_data.py diff --git a/test/bdd/steps/osm_data.py b/test/bdd/steps/osm_data.py index 926fb9ab..122b2461 100644 --- a/test/bdd/steps/osm_data.py +++ b/test/bdd/steps/osm_data.py @@ -4,16 +4,52 @@ import random import os from nose.tools import * # for assert functions +@given(u'the (\d+ )?grid') +def define_node_grid(context, grid_step): + """ + Define a grid of node positions. + """ + if grid_step is not None: + grid_step = int(grd_step.strip()) + else: + grid_step = 0.00001 + + context.osm.clear_grid() + + i = 0 + for h in context.table.headings: + if h.isdigit(): + context.osm.add_grid_node(int(h), 0, i) + i += grid_step + + x = grid_step + for r in context.table: + y = 0 + for h in r: + if h.isdigit(): + context.osm.add_grid_node(int(h), x, y) + y += grid_step + x += grid_step + + @when(u'loading osm data') def load_osm_file(context): + """ + Load the given data into a freshly created test data using osm2pgsql. + No further indexing is done. + The data is expected as attached text in OPL format. + """ # create a OSM file in /tmp and import it with tempfile.NamedTemporaryFile(dir='/tmp', suffix='.opl', delete=False) as fd: fname = fd.name for line in context.text.splitlines(): if line.startswith('n') and line.find(' x') < 0: - line += " x%d y%d" % (random.random() * 360 - 180, - random.random() * 180 - 90) + coord = context.osm.grid_node(int(line[1:].split(' ')[0])) + if coord is None: + coord = (random.random() * 360 - 180, + random.random() * 180 - 90) + line += " x%f y%f" % coord fd.write(line.encode('utf-8')) fd.write(b'\n') @@ -33,12 +69,22 @@ def load_osm_file(context): @when(u'updating osm data') def update_from_osm_file(context): + """ + Update a database previously populated with 'loading osm data'. + Needs to run indexing on the existing data first to yield the correct result. + + The data is expected as attached text in OPL format. + """ context.nominatim.run_setup_script('create-functions', 'create-partition-functions') cur = context.db.cursor() - cur.execute("""insert into placex (osm_type, osm_id, class, type, name, - admin_level, housenumber, street, addr_place, isin, postcode, - country_code, extratags, geometry) select * from place""") + cur.execute("""insert into placex (osm_type, osm_id, class, type, name, admin_level, address, extratags, geometry) + select osm_type, osm_id, class, type, name, admin_level, address, extratags, geometry from place""") + cur.execute( + """insert into location_property_osmline (osm_id, address, linegeo) + SELECT osm_id, address, geometry from place + WHERE class='place' and type='houses' and osm_type='W' + and ST_GeometryType(geometry) = 'ST_LineString'""") context.db.commit() context.nominatim.run_setup_script('index', 'index-noanalyse') context.nominatim.run_setup_script('create-functions', 'create-partition-functions',