- if ($aPlaceLine) {
- if (CONST_Debug) var_dump('found housenumber in interpolation lines table', $aPlaceLine);
- if ($aPlace['rank_search'] == 30) {
- // if a house was already found in placex, we have to find out,
- // if the placex house or the interpolated house are closer to the searched point
- // distance between point and placex house
- $sSQL = 'SELECT ST_distance('.$sPointSQL.', house.geometry) as distance FROM placex as house WHERE house.place_id='.$iPlaceID;
- $aDistancePlacex = chksql(
- $this->oDB->getRow($sSQL),
- "Could not determine distance between searched point and placex house."
- );
- $fDistancePlacex = $aDistancePlacex['distance'];
- // distance between point and interpolated house (fraction on interpolation line)
- $sSQL = 'SELECT ST_distance('.$sPointSQL.', ST_LineInterpolatePoint(linegeo, '.$aPlaceLine['fraction'].')) as distance';
- $sSQL .= ' FROM location_property_osmline WHERE place_id = '.$aPlaceLine['place_id'];
- $aDistanceInterpolation = chksql(
- $this->oDB->getRow($sSQL),
- "Could not determine distance between searched point and interpolated house."
- );
- $fDistanceInterpolation = $aDistanceInterpolation['distance'];
- if ($fDistanceInterpolation < $fDistancePlacex) {
- // interpolation is closer to point than placex house
- $bPlaceIsLine = true;
- $aPlace = $aPlaceLine;
- $iPlaceID = $aPlaceLine['place_id'];
- $iParentPlaceID = $aPlaceLine['parent_place_id']; // the street
- $fFraction = $aPlaceLine['fraction'];
- $iMaxRank = 30;
+ if ($aPlace) {
+ $oResult = new Result($aPlace['place_id']);
+ $iParentPlaceID = $aPlace['parent_place_id'];
+ if ($bDoInterpolation) {
+ if ($aPlace['rank_search'] == 26 || $aPlace['rank_search'] == 27) {
+ $bIsTigerStreet = ($aPlace['country_code'] == 'us');
+ } elseif ($aPlace['rank_search'] == 30) {
+ // If a house was found, make sure there isn't an
+ // interpolation line that is closer.
+ $aHouse = $this->lookupInterpolation(
+ $sPointSQL,
+ $aPlace['distance']
+ );
+ if ($aHouse && $aPlace['distance'] < $aHouse['distance']) {
+ $oResult = new Result(
+ $aHouse['place_id'],
+ Result::TABLE_OSMLINE
+ );
+ $oResult->iHouseNumber = closestHouseNumber($aHouse);
+
+ $aPlace = $aHouse;
+ $iParentPlaceID = $aHouse['parent_place_id'];
+ }