mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-06 18:14:16 +00:00
add node grids for tests and test for interpolation update
This commit is contained in:
@@ -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
|
||||||
|
|||||||
40
test/bdd/osm2pgsql/update/interpolation.feature
Normal file
40
test/bdd/osm2pgsql/update/interpolation.feature
Normal 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 |
|
||||||
@@ -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',
|
||||||
|
|||||||
Reference in New Issue
Block a user