mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-25 14:02:12 +03:00
add node grids for tests and test for interpolation update
This commit is contained in:
parent
0916d72ddf
commit
e04838cc71
@ -196,6 +196,15 @@ class OSMDataFactory(object):
|
||||
|
||||
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):
|
||||
# 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
|
||||
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(
|
||||
"""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',
|
||||
|
Loading…
Reference in New Issue
Block a user