X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/c79dcfad9a1d9dc2ca3cf81f4394a1a425323115..64abc90d3072bbfbc9aae316f5ef709b8782532e:/lib-php/SearchDescription.php diff --git a/lib-php/SearchDescription.php b/lib-php/SearchDescription.php index 4962d9ff..d2995e8e 100644 --- a/lib-php/SearchDescription.php +++ b/lib-php/SearchDescription.php @@ -1,4 +1,12 @@ sHouseNumber)) { - $sIpolHnr = 'SELECT * FROM location_property_osmline '; - $sIpolHnr .= 'WHERE parent_place_id = search_name.place_id '; + $sIpolHnr = 'WHERE parent_place_id = search_name.place_id '; $sIpolHnr .= ' AND startnumber is not NULL'; $sIpolHnr .= ' AND '.$this->sHouseNumber.'>=startnumber '; $sIpolHnr .= ' AND '.$this->sHouseNumber.'<=endnumber '; @@ -606,7 +613,11 @@ class SearchDescription $sSql = '(CASE WHEN address_rank = 30 THEN EXISTS('.$sSelfHnr.') '; $sSql .= ' ELSE EXISTS('.$sChildHnr.') '; if ($sIpolHnr) { - $sSql .= 'OR EXISTS('.$sIpolHnr.') '; + $sSql .= 'OR EXISTS(SELECT * FROM location_property_osmline '.$sIpolHnr.') '; + if (CONST_Use_US_Tiger_Data) { + $sSql .= "OR (country_code = 'us' AND "; + $sSql .= ' EXISTS(SELECT * FROM location_property_tiger '.$sIpolHnr.')) '; + } } $sSql .= 'END) DESC'; @@ -758,18 +769,9 @@ class SearchDescription // if nothing found, search in the interpolation line table $sSQL = 'SELECT distinct place_id FROM location_property_osmline'; $sSQL .= ' WHERE startnumber is not NULL'; - $sSQL .= ' AND parent_place_id in ('.$sRoadPlaceIDs.') AND ('; - if ($iHousenumber % 2 == 0) { - // If housenumber is even, look for housenumber in streets - // with interpolationtype even or all. - $sSQL .= "interpolationtype='even'"; - } else { - // Else look for housenumber with interpolationtype odd or all. - $sSQL .= "interpolationtype='odd'"; - } - $sSQL .= " or interpolationtype='all') and "; - $sSQL .= $iHousenumber.'>=startnumber and '; - $sSQL .= $iHousenumber.'<=endnumber'; + $sSQL .= ' and parent_place_id in ('.$sRoadPlaceIDs.')'; + $sSQL .= ' and ('.$iHousenumber.' - startnumber) % step = 0'; + $sSQL .= ' and '.$iHousenumber.' between startnumber and endnumber'; $sSQL .= $this->oContext->excludeSQL(' AND place_id'); Debug::printSQL($sSQL); @@ -784,15 +786,9 @@ class SearchDescription // If nothing found then search in Tiger data (location_property_tiger) if (CONST_Use_US_Tiger_Data && $sRoadPlaceIDs && $bIsIntHouseNumber && empty($aResults)) { $sSQL = 'SELECT place_id FROM location_property_tiger'; - $sSQL .= ' WHERE parent_place_id in ('.$sRoadPlaceIDs.') and ('; - if ($iHousenumber % 2 == 0) { - $sSQL .= "interpolationtype='even'"; - } else { - $sSQL .= "interpolationtype='odd'"; - } - $sSQL .= " or interpolationtype='all') and "; - $sSQL .= $iHousenumber.'>=startnumber and '; - $sSQL .= $iHousenumber.'<=endnumber'; + $sSQL .= ' WHERE parent_place_id in ('.$sRoadPlaceIDs.')'; + $sSQL .= ' and ('.$iHousenumber.' - startnumber) % step = 0'; + $sSQL .= ' and '.$iHousenumber.' between startnumber and endnumber'; $sSQL .= $this->oContext->excludeSQL(' AND place_id'); Debug::printSQL($sSQL);