<?php
+/**
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * This file is part of Nominatim. (https://nominatim.org)
+ *
+ * Copyright (C) 2022 by the Nominatim developer community.
+ * For a full list of authors see the git log.
+ */
namespace Nominatim;
{
Debug::newFunction('lookupInterpolation');
$sSQL = 'SELECT place_id, parent_place_id, 30 as rank_search,';
- $sSQL .= ' ST_LineLocatePoint(linegeo,'.$sPointSQL.') as fraction,';
- $sSQL .= ' startnumber, endnumber, interpolationtype,';
+ $sSQL .= ' (endnumber - startnumber) * ST_LineLocatePoint(linegeo,'.$sPointSQL.') as fhnr,';
+ $sSQL .= ' startnumber, endnumber, step,';
$sSQL .= ' ST_Distance(linegeo,'.$sPointSQL.') as distance';
$sSQL .= ' FROM location_property_osmline';
$sSQL .= ' WHERE ST_DWithin('.$sPointSQL.', linegeo, '.$fSearchDiam.')';
if ($aHouse) {
$oResult = new Result($aHouse['place_id'], Result::TABLE_OSMLINE);
- $oResult->iHouseNumber = closestHouseNumber($aHouse);
+ $iRndNum = max(0, round($aHouse['fhnr'] / $aHouse['step']) * $aHouse['step']);
+ $oResult->iHouseNumber = $aHouse['startnumber'] + $iRndNum;
+ if ($oResult->iHouseNumber > $aHouse['endnumber']) {
+ $oResult->iHouseNumber = $aHouse['endnumber'];
+ }
$aPlace = $aHouse;
}
}