--- /dev/null
+@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 |
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')
@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(
+ """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.nominatim.run_setup_script('index', 'index-noanalyse')
context.nominatim.run_setup_script('create-functions', 'create-partition-functions',