$sSQL .= ' , ST_Distance(linegeo,'.$sPointSQL.') as distance';
$sSQL .= ' FROM location_property_osmline';
$sSQL .= ' WHERE ST_DWithin('.$sPointSQL.', linegeo, '.$fSearchDiam.')';
- $sSQL .= ' and indexed_status = 0 ';
+ $sSQL .= ' and indexed_status = 0 and startnumber is not NULL ';
$sSQL .= ' ORDER BY ST_distance('.$sPointSQL.', linegeo) ASC limit 1';
return chksql(
);
}
+ public function lookup($fLat, $fLon, $bDoInterpolation = true)
+ {
+ return $this->lookupPoint(
+ 'ST_SetSRID(ST_Point('.$fLon.','.$fLat.'),4326)',
+ $bDoInterpolation
+ );
+ }
+
/* lookup()
* returns { place_id =>, type => '(osm|tiger)' }
* fails if no place was found
*/
- public function lookup($fLat, $fLon, $bDoInterpolation = true)
+ public function lookupPoint($sPointSQL, $bDoInterpolation = true)
{
- $sPointSQL = 'ST_SetSRID(ST_Point('.$fLon.','.$fLat.'),4326)';
$iMaxRank = $this->iMaxRank;
// Find the nearest point
$iMaxRank = 26;
}
- $sSQL = 'select place_id,parent_place_id,rank_search,calculated_country_code';
+ $sSQL = 'select place_id,parent_place_id,rank_search,country_code';
$sSQL .= ' FROM placex';
$sSQL .= ' WHERE ST_DWithin('.$sPointSQL.', geometry, '.$fSearchDiam.')';
$sSQL .= ' and rank_search != 28 and rank_search >= '.$iMaxRank;
);
$iPlaceID = $aPlace['place_id'];
$iParentPlaceID = $aPlace['parent_place_id'];
- $bIsInUnitedStates = ($aPlace['calculated_country_code'] == 'us');
+ $bIsInUnitedStates = ($aPlace['country_code'] == 'us');
}
// If a house was found make sure there isn't an interpolation line
// look for an interpolation that is closer
$aPlaceLine = $this->lookupInterpolation($sPointSQL, $fDistancePlacex);
- if ($aPlaceLine) {
+ if ($aPlaceLine && (float) $aPlaceLine['distance'] < (float) $fDistancePlacex) {
// interpolation is closer to point than placex house
$bPlaceIsLine = true;
$aPlace = $aPlaceLine;