X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/30511fd3ab9d731b0afec202386fc2425a0b1b9f..63f53beb972ef51cc0c0c6ecc3c134e7d4cb6284:/lib/lib.php diff --git a/lib/lib.php b/lib/lib.php index b5fbee3e..6c56d5d9 100644 --- a/lib/lib.php +++ b/lib/lib.php @@ -38,7 +38,7 @@ function getDatabaseDate(&$oDB) // Find the newest node in the DB $iLastOSMID = $oDB->getOne("select max(osm_id) from place where osm_type = 'N'"); // Lookup the timestamp that node was created - $sLastNodeURL = 'https://www.openstreetmap.org/api/0.6/node/'.$iLastOSMID."/1"; + $sLastNodeURL = 'https://www.openstreetmap.org/api/0.6/node/'.$iLastOSMID.'/1'; $sLastNodeXML = file_get_contents($sLastNodeURL); if ($sLastNodeXML === false) { @@ -60,54 +60,6 @@ function byImportance($a, $b) } -function getWordSets($aWords, $iDepth) -{ - $aResult = array(array(join(' ', $aWords))); - $sFirstToken = ''; - if ($iDepth < 7) { - while (sizeof($aWords) > 1) { - $sWord = array_shift($aWords); - $sFirstToken .= ($sFirstToken?' ':'').$sWord; - $aRest = getWordSets($aWords, $iDepth+1); - foreach ($aRest as $aSet) { - $aResult[] = array_merge(array($sFirstToken), $aSet); - } - } - } - return $aResult; -} - -function getInverseWordSets($aWords, $iDepth) -{ - $aResult = array(array(join(' ', $aWords))); - $sFirstToken = ''; - if ($iDepth < 8) { - while (sizeof($aWords) > 1) { - $sWord = array_pop($aWords); - $sFirstToken = $sWord.($sFirstToken?' ':'').$sFirstToken; - $aRest = getInverseWordSets($aWords, $iDepth+1); - foreach ($aRest as $aSet) { - $aResult[] = array_merge(array($sFirstToken), $aSet); - } - } - } - return $aResult; -} - - -function getTokensFromSets($aSets) -{ - $aTokens = array(); - foreach ($aSets as $aSet) { - foreach ($aSet as $sWord) { - $aTokens[' '.$sWord] = ' '.$sWord; - $aTokens[$sWord] = $sWord; - } - } - return $aTokens; -} - - function getClassTypes() { return array( @@ -461,11 +413,11 @@ function javascript_renderData($xVal, $iOptions = 0) $jsonout = json_encode($xVal, $iOptions); if (!isset($_GET['json_callback'])) { - header("Content-Type: application/json; charset=UTF-8"); + header('Content-Type: application/json; charset=UTF-8'); echo $jsonout; } else { if (preg_match('/^[$_\p{L}][$_\p{L}\p{Nd}.[\]]*$/u', $_GET['json_callback'])) { - header("Content-Type: application/javascript; charset=UTF-8"); + header('Content-Type: application/javascript; charset=UTF-8'); echo $_GET['json_callback'].'('.$jsonout.')'; } else { header('HTTP/1.0 400 Bad Request'); @@ -487,16 +439,16 @@ function _debugDumpGroupedSearches($aData, $aTokens) } } } - echo ""; - echo ""; - echo ""; - echo ""; + echo '
rankName TokensName NotAddress TokensAddress Notcountryoperatorclasstypepostcodehousenumber
'; + echo ''; + echo ''; + echo ''; foreach ($aData as $iRank => $aRankedSet) { foreach ($aRankedSet as $aRow) { $aRow->dumpAsHtmlTableRow($aWordsIDs); } } - echo "
rankName TokensName NotAddress TokensAddress Notcountryoperatorclasstypepostcodehousenumber
"; + echo ''; } @@ -504,7 +456,7 @@ function getAddressDetails(&$oDB, $sLanguagePrefArraySQL, $iPlaceID, $sCountryCo { $sSQL = "select *,get_name_by_language(name,$sLanguagePrefArraySQL) as localname from get_addressdata($iPlaceID, $housenumber)"; if (!$bRaw) $sSQL .= " WHERE isaddress OR type = 'country_code'"; - $sSQL .= " order by rank_address desc,isaddress desc"; + $sSQL .= ' order by rank_address desc,isaddress desc'; $aAddressLines = chksql($oDB->getAll($sSQL)); if ($bRaw) return $aAddressLines; @@ -632,10 +584,10 @@ function geometryText2Points($geometry_as_text, $fRadius) // preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/', $aMatch[1], $aPolyPoints, PREG_SET_ORDER); // - } elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#', $geometry_as_text, $aMatch)) { +/* } elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#', $geometry_as_text, $aMatch)) { // preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/', $aMatch[1], $aPolyPoints, PREG_SET_ORDER); - // + */ } elseif (preg_match('#POINT\\((-?[0-9.]+) (-?[0-9.]+)\\)#', $geometry_as_text, $aMatch)) { // $aPolyPoints = createPointsAroundCenter($aMatch[1], $aMatch[2], $fRadius); @@ -663,3 +615,23 @@ function createPointsAroundCenter($fLon, $fLat, $fRadius) } return $aPolyPoints; } + +function closestHouseNumber($aRow) +{ + $fHouse = $aRow['startnumber'] + + ($aRow['endnumber'] - $aRow['startnumber']) * $aRow['fraction']; + + switch ($aRow['interpolationtype']) { + case 'odd': + $iHn = (int)($fHouse/2) * 2 + 1; + break; + case 'even': + $iHn = (int)(round($fHouse/2)) * 2; + break; + default: + $iHn = (int)(round($fHouse)); + break; + } + + return max(min($aRow['endnumber'], $iHn), $aRow['startnumber']); +}