add node grids for tests and test for interpolation update

This commit is contained in:
Sarah Hoffmann
2017-01-09 20:41:57 +01:00
parent 0916d72ddf
commit e04838cc71
3 changed files with 97 additions and 2 deletions

View File

@@ -196,6 +196,15 @@ class OSMDataFactory(object):
return scene return scene
def clear_grid(self):
self.grid = {}
def add_grid_node(self, nodeid, x, y):
self.grid[nodeid] = (x, y)
def grid_node(self, nodeid):
return self.grid.get(nodeid)
def before_all(context): def before_all(context):
# logging setup # logging setup

View File

@@ -0,0 +1,40 @@
@DB
Feature: Update of interpolations
@wip
# Test case for #598
Scenario: add an interpolation way
Given the grid
| 4 | 7 | 5 |
| 10| | 12|
When loading osm data
"""
n3
n4 Taddr:housenumber=1
n5 Taddr:housenumber=5
n10
n12
w11 Thighway=residential,name=X Nn4,n5
w12 Thighway=residential,name=Highway Nn10,n12
"""
And updating osm data
"""
n4 Taddr:housenumber=1
n5 Taddr:housenumber=5
w1 Taddr:interpolation=odd Nn4,n5
w2 Tbuilding=yes,name=ggg Nn4,n10,n7,n4
w3 Tbuilding=yes,name=ggg Nn4,n10,n7,n4
w4 Tbuilding=yes,name=ggg Nn4,n10,n7,n4
w5 Tbuilding=yes,name=ggg Nn4,n10,n7,n4
w6 Tbuilding=yes,name=ggg Nn4,n10,n7,n4
w7 Tbuilding=yes,name=ggg Nn4,n10,n7,n4
w11 dD
"""
Then place contains
| object | housenumber |
| N4:place | 1 |
| N5:place | 5 |
| W1:place | odd |
And W1 expands to interpolation
| start | end |
| 1 | 5 |

View File

@@ -4,16 +4,52 @@ import random
import os import os
from nose.tools import * # for assert functions 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') @when(u'loading osm data')
def load_osm_file(context): 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 # create a OSM file in /tmp and import it
with tempfile.NamedTemporaryFile(dir='/tmp', suffix='.opl', delete=False) as fd: with tempfile.NamedTemporaryFile(dir='/tmp', suffix='.opl', delete=False) as fd:
fname = fd.name fname = fd.name
for line in context.text.splitlines(): for line in context.text.splitlines():
if line.startswith('n') and line.find(' x') < 0: if line.startswith('n') and line.find(' x') < 0:
line += " x%d y%d" % (random.random() * 360 - 180, coord = context.osm.grid_node(int(line[1:].split(' ')[0]))
random.random() * 180 - 90) 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(line.encode('utf-8'))
fd.write(b'\n') fd.write(b'\n')
@@ -33,12 +69,22 @@ def load_osm_file(context):
@when(u'updating osm data') @when(u'updating osm data')
def update_from_osm_file(context): 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') context.nominatim.run_setup_script('create-functions', 'create-partition-functions')
cur = context.db.cursor() cur = context.db.cursor()
cur.execute("""insert into placex (osm_type, osm_id, class, type, name, cur.execute("""insert into placex (osm_type, osm_id, class, type, name,
admin_level, housenumber, street, addr_place, isin, postcode, admin_level, housenumber, street, addr_place, isin, postcode,
country_code, extratags, geometry) select * from place""") country_code, extratags, geometry) select * from place""")
cur.execute(
"""select insert_osmline (osm_id, housenumber, street, addr_place,
postcode, country_code, geometry)
from place where class='place' and type='houses' and osm_type='W'""")
context.db.commit() context.db.commit()
context.nominatim.run_setup_script('index', 'index-noanalyse') context.nominatim.run_setup_script('index', 'index-noanalyse')
context.nominatim.run_setup_script('create-functions', 'create-partition-functions', context.nominatim.run_setup_script('create-functions', 'create-partition-functions',