]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib/lib.php
fix format error in polygon output
[nominatim.git] / lib / lib.php
index 8db122f2b33d2ac7b0d3b942ddfb2080ad96af39..1959ded3d4748738215e4349f3bb35a1aad25267 100644 (file)
                return sizeof($aMatches[0]);
        }
 
+       function getTotalMemoryMB()
+       {
+               $sCPU = file_get_contents('/proc/meminfo');
+               preg_match('#MemTotal: +([0-9]+) kB#', $sCPU, $aMatches);
+               return (int)($aMatches[1]/1024);
+       }
+
+       function getCacheMemoryMB()
+       {
+               $sCPU = file_get_contents('/proc/meminfo');
+               preg_match('#Cached: +([0-9]+) kB#', $sCPU, $aMatches);
+               return (int)($aMatches[1]/1024);
+       }
+
        function bySearchRank($a, $b)
        {
                if ($a['iSearchRank'] == $b['iSearchRank']) return 0;
@@ -65,9 +79,9 @@
 
        function byImportance($a, $b)
        {
-/*
                if ($a['importance'] != $b['importance'])
                        return ($a['importance'] > $b['importance']?-1:1);
+/*
                if ($a['aPointPolygon']['numfeatures'] != $b['aPointPolygon']['numfeatures'])
                        return ($a['aPointPolygon']['numfeatures'] > $b['aPointPolygon']['numfeatures']?-1:1);
                if ($a['aPointPolygon']['area'] != $b['aPointPolygon']['area'])
@@ -80,7 +94,7 @@
                return ($a['foundorder'] < $b['foundorder']?-1:1);
        }
 
-       function getPrefferedLangauges()
+       function getPreferredLanguages()
        {
                // If we have been provided the value in $_GET it overrides browser value
                if (isset($_GET['accept-language']) && $_GET['accept-language'])
                        exit;
                }
                
-
                if (sizeof($aNearPostcodes))
                {
                        return array(array('lat' => $aNearPostcodes[0]['lat'], 'lon' => $aNearPostcodes[0]['lon'], 'radius' => 0.005));
                }
 
                return false;
-
-               /* partial search disabled because it sequentially scans placex
-               
-               $sSQL = 'select substring(upper(postcode) from \'^[A-Z][A-Z]?[0-9][0-9A-Z]? [0-9]([A-Z][A-Z])$\'),ST_X(ST_Centroid(geometry)) as lon,ST_Y(ST_Centroid(geometry)) as lat from placex where country_code::text = \'gb\'::text AND substring(postcode from \'^([A-Z][A-Z]?[0-9][0-9A-Z]? [0-9])[A-Z][A-Z]$\') = \''.$sPostcodeSector.'\' and class=\'place\' and type=\'postcode\' ';
-               $sSQL .= ' union ';
-               $sSQL .= 'select substring(upper(postcode) from \'^[A-Z][A-Z]?[0-9][0-9A-Z]? [0-9]([A-Z][A-Z])$\'),ST_X(ST_Centroid(geometry)) as lon,ST_Y(ST_Centroid(geometry)) as lat from gb_postcode where substring(postcode from \'^([A-Z][A-Z]?[0-9][0-9A-Z]? [0-9])[A-Z][A-Z]$\') = \''.$sPostcodeSector.'\'';
-               $aNearPostcodes = $oDB->getAll($sSQL);
-               if (PEAR::IsError($aNearPostcodes))
-               {
-                       var_dump($sSQL, $aNearPostcodes);
-                       exit;
-               }
-
-               if (!sizeof($aNearPostcodes))
-               {
-                       return false;
-               }
-
-               $fTotalLat = 0;
-               $fTotalLon = 0;
-               $fTotalFac = 0;
-               foreach($aNearPostcodes as $aPostcode)
-               {
-                       $iDiff = gbPostcodeAlphaDifference($sPostcodeEnd, $aPostcode['substring'])*2 + 1;
-                       if ($iDiff == 0)
-                               $fFac = 1;
-                       else
-                               $fFac = 1/($iDiff*$iDiff);
-                       
-                       $fTotalFac += $fFac;
-                       $fTotalLat += $aPostcode['lat'] * $fFac;
-                       $fTotalLon += $aPostcode['lon'] * $fFac;
-               }
-               if ($fTotalFac)
-               {
-                       $fLat = $fTotalLat / $fTotalFac;
-                       $fLon = $fTotalLon / $fTotalFac;
-                       $fRadius = min(0.1 / $fTotalFac, 0.02);
-                       return array(array('lat' => $fLat, 'lon' => $fLon, 'radius' => $fRadius));
-               }
-               return false;
-               */
-               /*
-                       $fTotalFac is a suprisingly good indicator of accuracy
-                       $iZoom = 18 + round(log($fTotalFac,32));
-                       $iZoom = max(13,min(18,$iZoom));
-               */
        }
 
        function usPostcodeCalculate($sPostcode, &$oDB)
                return false;
 
                /*
-                       $fTotalFac is a suprisingly good indicator of accuracy
+                       $fTotalFac is a surprisingly good indicator of accuracy
                        $iZoom = 18 + round(log($fTotalFac,32));
                        $iZoom = max(13,min(18,$iZoom));
                */
        }
        
        
-        function javascript_isarray($xVal)
-        {
-                if (!is_array($xVal)) return false;
-                for($i = 0; $i < sizeof($xVal); $i++)
-                {
-                        if (!array_key_exists($i, $xVal)) return false;
-                }
-                return true;
-        }
 
-        function javascript_renderData($xVal, $bForceHash = false)
-        {
-                if (is_array($xVal))
-                {
-                        $aVals = array();
-                        if (javascript_isarray($xVal) && !$bForceHash)
-                        {
-                                foreach($xVal as $sKey => $xData)
-                                {
-                                        $aVals[] = javascript_renderData($xData);
-                                }
-                                return '['.join(',',$aVals).']';
-                        }
-                        else
-                        {
-                                foreach($xVal as $sKey => $xData)
-                                {
-                                        $aVals[] = '"'.addslashes($sKey).'"'.':'.javascript_renderData($xData);
-                                }
-                                return '{'.join(',',$aVals).'}';
-                        }
-                }
-                else
-                {
-                        if (is_bool($xVal)) return $xVal?'true':'false';
-//                     if (is_numeric($xVal)) return $xVal;
-                        return '"'.str_replace('>','\\>',str_replace(array("\n","\r"),'\\n',str_replace(array("\n\r","\r\n"),'\\n',str_replace('"','\\"',$xVal)))).'"';
-                }
-        }
+    function javascript_renderData($xVal)
+    {
+        header("Access-Control-Allow-Origin: *");
+
+        $jsonout = json_encode($xVal);
+
+               if( ! isset($_GET['json_callback'])) {
+                       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");
+                               echo $_GET['json_callback'].'('.$jsonout.')';
+                       } else {
+                               header('HTTP/1.0 400 Bad Request');
+                       }
+               }
+    }
 
        function _debugDumpGroupedSearches($aData, $aTokens)
        {