protected $sQuery = false;
protected $aStructuredQuery = false;
+
function Geocode(&$oDB)
{
$this->oDB =& $oDB;
function setFeatureType($sFeatureType)
{
switch ($sFeatureType) {
- case 'country':
- $this->setRankRange(4, 4);
- break;
- case 'state':
- $this->setRankRange(8, 8);
- break;
- case 'city':
- $this->setRankRange(14, 16);
- break;
- case 'settlement':
- $this->setRankRange(8, 20);
- break;
+ case 'country':
+ $this->setRankRange(4, 4);
+ break;
+ case 'state':
+ $this->setRankRange(8, 8);
+ break;
+ case 'city':
+ $this->setRankRange(14, 16);
+ break;
+ case 'settlement':
+ $this->setRankRange(8, 20);
+ break;
}
}
$sSQL .= ",extratags->'place' ";
if (30 >= $this->iMinAddressRank && 30 <= $this->iMaxAddressRank) {
- //only Tiger housenumbers and interpolation lines need to be interpolated, because they are saved as lines
+ // only Tiger housenumbers and interpolation lines need to be interpolated, because they are saved as lines
// with start- and endnumber, the common osm housenumbers are usually saved as points
$sHousenumbers = "";
$i = 0;
if ($i<$length) $sHousenumbers .= ", ";
}
if (CONST_Use_US_Tiger_Data) {
- //Tiger search only if a housenumber was searched and if it was found (i.e. aPlaceIDs[placeID] = housenumber != -1) (realized through a join)
+ // Tiger search only if a housenumber was searched and if it was found (i.e. aPlaceIDs[placeID] = housenumber != -1) (realized through a join)
$sSQL .= " union";
$sSQL .= " select 'T' as osm_type, place_id as osm_id, 'place' as class, 'house' as type, null as admin_level, 30 as rank_search, 30 as rank_address, min(place_id) as place_id, min(parent_place_id) as parent_place_id, 'us' as country_code";
$sSQL .= ", get_address_by_language(place_id, housenumber_for_place, $sLanguagePrefArraySQL) as langaddress ";
$sSQL .= ", (select max(p.importance*(p.rank_address+2)) from place_addressline s, placex p where s.place_id = min(blub.parent_place_id) and p.place_id = s.address_place_id and s.isaddress and p.importance is not null) as addressimportance ";
$sSQL .= ", null as extra_place ";
$sSQL .= " from (select place_id";
- //interpolate the Tiger housenumbers here
+ // interpolate the Tiger housenumbers here
$sSQL .= ", ST_LineInterpolatePoint(linegeo, (housenumber_for_place-startnumber::float)/(endnumber-startnumber)::float) as centroid, parent_place_id, housenumber_for_place";
$sSQL .= " from (location_property_tiger ";
$sSQL .= " join (values ".$sHousenumbers.") as housenumbers(place_id, housenumber_for_place) using(place_id)) ";
$sSQL .= " where s.place_id = min(blub.parent_place_id) and p.place_id = s.address_place_id and s.isaddress and p.importance is not null) as addressimportance,";
$sSQL .= " null as extra_place ";
$sSQL .= " from (select place_id, calculated_country_code ";
- //interpolate the housenumbers here
+ // interpolate the housenumbers here
$sSQL .= ", CASE WHEN startnumber != endnumber THEN ST_LineInterpolatePoint(linegeo, (housenumber_for_place-startnumber::float)/(endnumber-startnumber)::float) ";
$sSQL .= " ELSE ST_LineInterpolatePoint(linegeo, 0.5) END as centroid";
$sSQL .= ", parent_place_id, housenumber_for_place ";
$sSQL .= " order by importance desc";
if (CONST_Debug) {
- echo "<hr>"; var_dump($sSQL);
+ echo "<hr>";
+ var_dump($sSQL);
}
$aSearchResults = chksql(
$this->oDB->getAll($sSQL),
name: full name (currently the same as langaddress)
foundorder: secondary ordering for places with same importance
*/
+
+
function lookup()
{
if (!$this->sQuery && !$this->aStructuredQuery) return false;
}
} elseif (!isset($aValidTokens[$sToken]) && preg_match('/^([0-9]{5}) [0-9]{4}$/', $sToken, $aData)) {
// US ZIP+4 codes - if there is no token,
- // merge in the 5-digit ZIP code
+ // merge in the 5-digit ZIP code
if (isset($aValidTokens[$aData[1]])) {
foreach ($aValidTokens[$aData[1]] as $aToken) {
if (!$aToken['class']) {
}
if (CONST_Debug) {
- echo "<br><b>Place IDs:</b> "; var_Dump($aPlaceIDs);
+ echo "<br><b>Place IDs:</b> ";
+ var_Dump($aPlaceIDs);
}
foreach ($aPlaceIDs as $iPlaceID) {
}
if (CONST_Debug) {
- echo '<i>Recheck words:<\i>'; var_dump($aRecheckWords);
+ echo '<i>Recheck words:<\i>';
+ var_dump($aRecheckWords);
}
$oPlaceLookup = new PlaceLookup($this->oDB);
$aResult['name'] = $aResult['langaddress'];
// secondary ordering (for results with same importance (the smaller the better):
- // - approximate importance of address parts
+ // - approximate importance of address parts
$aResult['foundorder'] = -$aResult['addressimportance']/10;
- // - number of exact matches from the query
+ // - number of exact matches from the query
if (isset($this->exactMatchCache[$aResult['place_id']])) {
$aResult['foundorder'] -= $this->exactMatchCache[$aResult['place_id']];
} elseif (isset($this->exactMatchCache[$aResult['parent_place_id']])) {
$aResult['foundorder'] -= $this->exactMatchCache[$aResult['parent_place_id']];
}
- // - importance of the class/type
+ // - importance of the class/type
if (isset($aClassType[$aResult['class'].':'.$aResult['type']]['importance'])
&& $aClassType[$aResult['class'].':'.$aResult['type']]['importance']
) {
}
return $aSearchResults;
-
} // end lookup()
-
-
} // end class
-
{
private $aParams;
- function __construct($aParams = NULL)
+
+ function __construct($aParams = null)
{
- $this->aParams = ($aParams === NULL) ? $_GET : $aParams;
+ $this->aParams = ($aParams === null) ? $_GET : $aParams;
}
function getBool($sName, $bDefault = false)
return $aDefault;
}
- function getPreferredLanguages($sFallback = NULL)
+ function getPreferredLanguages($sFallback = null)
{
- if ($sFallback === NULL && isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) {
+ if ($sFallback === null && isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) {
$sFallback = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
}
- // returns an array which will contain the keys
- // aBoundingBox
- // and may also contain one or more of the keys
- // asgeojson
- // askml
- // assvg
- // astext
- // lat
- // lon
+ /* returns an array which will contain the keys
+ * aBoundingBox
+ * and may also contain one or more of the keys
+ * asgeojson
+ * askml
+ * assvg
+ * astext
+ * lat
+ * lon
+ */
+
+
function getOutlines($iPlaceID, $fLon = null, $fLat = null, $fRadius = null)
{
(string)$aPointPolygon['maxlon']
);
}
- } // CONST_Search_AreaPolygons
+ }
// as a fallback we generate a bounding box without knowing the size of the geometry
if ((!isset($aOutlineResult['aBoundingBox'])) && isset($fLon)) {
protected $oDB;
protected $iMaxRank = 28;
+
function ReverseGeocode(&$oDB)
{
$this->oDB =& $oDB;
}
+
function setZoom($iZoom)
{
// Zoom to rank, this could probably be calculated but a lookup gives fine control
$this->iMaxRank = (isset($iZoom) && isset($aZoomRank[$iZoom]))?$aZoomRank[$iZoom]:28;
}
- // returns { place_id =>, type => '(osm|tiger)' }
- // fails if no place was found
+
+ /* lookup()
+ * returns { place_id =>, type => '(osm|tiger)' }
+ * fails if no place was found
+ */
+
+
function lookup($fLat, $fLon, $bDoInterpolation = true)
{
$sPointSQL = 'ST_SetSRID(ST_Point('.$fLon.','.$fLat.'),4326)';
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 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;
'fraction' => ($bPlaceIsTiger || $bPlaceIsLine) ? $fFraction : -1
);
}
-
}
<?php
+
function getCmdOpt($aArg, $aSpec, &$aResult, $bExitOnError = false, $bExitOnUnknown = false)
{
$aQuick = array();
require_once('DB.php');
+
function &getDB($bNew = false, $bPersistent = false)
{
// Get the database object
*
*/
+
function chksql($oSql, $sMsg = "Database request failed")
{
if (!PEAR::isError($oSql)) return $oSql;
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') exit;
if (CONST_Debug) header('Content-type: text/html; charset=utf-8');
-
<?php
+
function fail($sError, $sUserError = false)
{
if (!$sUserError) $sUserError = $sError;
}
-/*
- GB Postcode functions
- */
-
function gbPostcodeCalculate($sPostcode, $sPostcodeSector, $sPostcodeEnd, &$oDB)
{
// Try an exact match on the gb_postcode table
return "'".$s."'";
}
-// returns boolean
function validLatLon($fLat, $fLon)
{
return ($fLat <= 90.1 && $fLat >= -90.1 && $fLon <= 180.1 && $fLon >= -180.1);
}
-// Do we have anything that looks like a lat/lon pair?
-// returns array(lat,lon,query_with_lat_lon_removed)
-// or null
function looksLikeLatLonPair($sQuery)
{
+ // Do we have anything that looks like a lat/lon pair?
+ // returns array(lat,lon,query_with_lat_lon_removed)
+ // or null
$sFound = null;
$fQueryLat = null;
$fQueryLon = null;
if (preg_match('/\\b([NS])[ ]+([0-9]+[0-9.]*)[° ]+([0-9.]+)?[′\']*[, ]+([EW])[ ]+([0-9]+)[° ]+([0-9]+[0-9.]*)[′\']*?\\b/', $sQuery, $aData)) {
- // 1 2 3 4 5 6
- // degrees decimal minutes
- // N 40 26.767, W 79 58.933
- // N 40°26.767′, W 79°58.933′
+ /* 1 2 3 4 5 6
+ * degrees decimal minutes
+ * N 40 26.767, W 79 58.933
+ * N 40°26.767′, W 79°58.933′
+ */
$sFound = $aData[0];
$fQueryLat = ($aData[1]=='N'?1:-1) * ($aData[2] + $aData[3]/60);
$fQueryLon = ($aData[4]=='E'?1:-1) * ($aData[5] + $aData[6]/60);
} elseif (preg_match('/\\b([0-9]+)[° ]+([0-9]+[0-9.]*)?[′\']*[ ]+([NS])[, ]+([0-9]+)[° ]+([0-9]+[0-9.]*)?[′\' ]+([EW])\\b/', $sQuery, $aData)) {
- // 1 2 3 4 5 6
- // degrees decimal minutes
- // 40 26.767 N, 79 58.933 W
- // 40° 26.767′ N 79° 58.933′ W
+ /* 1 2 3 4 5 6
+ * degrees decimal minutes
+ * 40 26.767 N, 79 58.933 W
+ * 40° 26.767′ N 79° 58.933′ W
+ */
$sFound = $aData[0];
$fQueryLat = ($aData[3]=='N'?1:-1) * ($aData[1] + $aData[2]/60);
$fQueryLon = ($aData[6]=='E'?1:-1) * ($aData[4] + $aData[5]/60);
} elseif (preg_match('/\\b([NS])[ ]([0-9]+)[° ]+([0-9]+)[′\' ]+([0-9]+)[″"]*[, ]+([EW])[ ]([0-9]+)[° ]+([0-9]+)[′\' ]+([0-9]+)[″"]*\\b/', $sQuery, $aData)) {
- // 1 2 3 4 5 6 7 8
- // degrees decimal seconds
- // N 40 26 46 W 79 58 56
- // N 40° 26′ 46″, W 79° 58′ 56″
+ /* 1 2 3 4 5 6 7 8
+ * degrees decimal seconds
+ * N 40 26 46 W 79 58 56
+ * N 40° 26′ 46″, W 79° 58′ 56″
+ */
$sFound = $aData[0];
$fQueryLat = ($aData[1]=='N'?1:-1) * ($aData[2] + $aData[3]/60 + $aData[4]/3600);
$fQueryLon = ($aData[5]=='E'?1:-1) * ($aData[6] + $aData[7]/60 + $aData[8]/3600);
} elseif (preg_match('/\\b([0-9]+)[° ]+([0-9]+)[′\' ]+([0-9]+)[″" ]+([NS])[, ]+([0-9]+)[° ]+([0-9]+)[′\' ]+([0-9]+)[″" ]+([EW])\\b/', $sQuery, $aData)) {
- // 1 2 3 4 5 6 7 8
- // degrees decimal seconds
- // 40 26 46 N 79 58 56 W
- // 40° 26′ 46″ N, 79° 58′ 56″ W
+ /* 1 2 3 4 5 6 7 8
+ * degrees decimal seconds
+ * 40 26 46 N 79 58 56 W
+ * 40° 26′ 46″ N, 79° 58′ 56″ W
+ */
$sFound = $aData[0];
$fQueryLat = ($aData[4]=='N'?1:-1) * ($aData[1] + $aData[2]/60 + $aData[3]/3600);
$fQueryLon = ($aData[8]=='E'?1:-1) * ($aData[5] + $aData[6]/60 + $aData[7]/3600);
} elseif (preg_match('/\\b([NS])[ ]([0-9]+[0-9]*\\.[0-9]+)[°]*[, ]+([EW])[ ]([0-9]+[0-9]*\\.[0-9]+)[°]*\\b/', $sQuery, $aData)) {
- // 1 2 3 4
- // degrees decimal
- // N 40.446° W 79.982°
+ /* 1 2 3 4
+ * degrees decimal
+ * N 40.446° W 79.982°
+ */
$sFound = $aData[0];
$fQueryLat = ($aData[1]=='N'?1:-1) * ($aData[2]);
$fQueryLon = ($aData[3]=='E'?1:-1) * ($aData[4]);
} elseif (preg_match('/\\b([0-9]+[0-9]*\\.[0-9]+)[° ]+([NS])[, ]+([0-9]+[0-9]*\\.[0-9]+)[° ]+([EW])\\b/', $sQuery, $aData)) {
- // 1 2 3 4
- // degrees decimal
- // 40.446° N 79.982° W
+ /* 1 2 3 4
+ * degrees decimal
+ * 40.446° N 79.982° W
+ */
$sFound = $aData[0];
$fQueryLat = ($aData[2]=='N'?1:-1) * ($aData[1]);
$fQueryLon = ($aData[4]=='E'?1:-1) * ($aData[3]);
} elseif (preg_match('/(\\[|^|\\b)(-?[0-9]+[0-9]*\\.[0-9]+)[, ]+(-?[0-9]+[0-9]*\\.[0-9]+)(\\]|$|\\b)/', $sQuery, $aData)) {
- // 1 2 3 4
- // degrees decimal
- // 12.34, 56.78
- // [12.456,-78.90]
+ /* 1 2 3 4
+ * degrees decimal
+ * 12.34, 56.78
+ * [12.456,-78.90]
+ */
$sFound = $aData[0];
$fQueryLat = $aData[2];
$fQueryLon = $aData[3];
function geometryText2Points($geometry_as_text, $fRadius)
{
- $aPolyPoints = NULL;
+ $aPolyPoints = null;
if (preg_match('#POLYGON\\(\\(([- 0-9.,]+)#', $geometry_as_text, $aMatch)) {
//
preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/', $aMatch[1], $aPolyPoints, PREG_SET_ORDER);
<?php
+
function logStart(&$oDB, $sType = '', $sQuery = '', $aLanguageList = array())
{
$fStartTime = microtime(true);
);
file_put_contents(CONST_Log_File, $aOutdata, FILE_APPEND | LOCK_EX);
}
-
}
<?php
+
function formatOSMType($sType, $bIncludeExternal = true)
{
if ($sType == 'N') return 'node';
return '<a href="details.php?place_id='.$aFeature['place_id'].'">'.($sTitle?$sTitle:$aFeature['place_id']).'</a>';
}
-
printf(
" %-40s | %12s | %7s | %13s | %31s | %8s\n",
$sKey,
- $aDetails['totalBlocks'],
+ $aDetails['totalBlocks'],
(int)$aDetails['currentBucketSize'],
- $aDetails['currentlyBlocked']?'Y':'N',
+ $aDetails['currentlyBlocked']?'Y':'N',
date("r", $aDetails['lastBlockTimestamp']),
$aDetails['isSleeping']?'Y':'N'
);
$oDB->query($sSQL);
}
+
function degreesAndMinutesToDecimal($iDegrees, $iMinutes = 0, $fSeconds = 0, $sNSEW = 'N')
{
$sNSEW = strtoupper($sNSEW);
return ($sNSEW == 'S' || $sNSEW == 'W'?-1:1) * ((float)$iDegrees + (float)$iMinutes/60 + (float)$fSeconds/3600);
}
+
function _parseWikipediaContent($sPageText)
{
$sPageText = str_replace("\n", ' ', $sPageText);
$aState = array('body');
foreach ($aPageText as $i => $sPart) {
switch ($sPart) {
- case '{{':
- array_unshift($aTemplateStack, array('', array()));
- array_unshift($aState, 'template');
- break;
- case '}}':
- if ($aState[0] == 'template' || $aState[0] == 'templateparam') {
- $aTemplate = array_shift($aTemplateStack);
- array_shift($aState);
-
- $aTemplates[] = $aTemplate;
- }
- break;
- case '[[':
- $sLinkPage = '';
- $sLinkSyn = '';
- array_unshift($aState, 'link');
- break;
- case ']]':
- if ($aState[0] == 'link' || $aState[0] == 'linksynonim') {
- if (!$sLinkSyn) $sLinkSyn = $sLinkPage;
- if (substr($sLinkPage, 0, 6) == 'Image:') $sLinkSyn = substr($sLinkPage, 6);
-
- $aLinks[] = array($sLinkPage, $sLinkSyn);
+ case '{{':
+ array_unshift($aTemplateStack, array('', array()));
+ array_unshift($aState, 'template');
+ break;
+ case '}}':
+ if ($aState[0] == 'template' || $aState[0] == 'templateparam') {
+ $aTemplate = array_shift($aTemplateStack);
+ array_shift($aState);
- array_shift($aState);
- switch ($aState[0]) {
- case 'template':
- $aTemplateStack[0][0] .= trim($sPart);
- break;
- case 'templateparam':
- $aTemplateStack[0][1][0] .= $sLinkSyn;
- break;
- case 'link':
- $sLinkPage .= trim($sPart);
- break;
- case 'linksynonim':
- $sLinkSyn .= $sPart;
- break;
- case 'body':
- $sPageBody .= $sLinkSyn;
- break;
- default:
- var_dump($aState, $sPageName, $aTemplateStack, $sPart, $aPageText);
- fail('unknown state');
+ $aTemplates[] = $aTemplate;
}
- }
- break;
- case '|':
- if ($aState[0] == 'template' || $aState[0] == 'templateparam') {
- // Create a new template paramater
- $aState[0] = 'templateparam';
- array_unshift($aTemplateStack[0][1], '');
- }
- if ($aState[0] == 'link') $aState[0] = 'linksynonim';
- break;
- default:
- switch ($aState[0]) {
- case 'template':
- $aTemplateStack[0][0] .= trim($sPart);
- break;
- case 'templateparam':
- $aTemplateStack[0][1][0] .= $sPart;
break;
- case 'link':
- $sLinkPage .= trim($sPart);
+ case '[[':
+ $sLinkPage = '';
+ $sLinkSyn = '';
+ array_unshift($aState, 'link');
break;
- case 'linksynonim':
- $sLinkSyn .= $sPart;
+ case ']]':
+ if ($aState[0] == 'link' || $aState[0] == 'linksynonim') {
+ if (!$sLinkSyn) $sLinkSyn = $sLinkPage;
+ if (substr($sLinkPage, 0, 6) == 'Image:') $sLinkSyn = substr($sLinkPage, 6);
+
+ $aLinks[] = array($sLinkPage, $sLinkSyn);
+
+ array_shift($aState);
+ switch ($aState[0]) {
+ case 'template':
+ $aTemplateStack[0][0] .= trim($sPart);
+ break;
+ case 'templateparam':
+ $aTemplateStack[0][1][0] .= $sLinkSyn;
+ break;
+ case 'link':
+ $sLinkPage .= trim($sPart);
+ break;
+ case 'linksynonim':
+ $sLinkSyn .= $sPart;
+ break;
+ case 'body':
+ $sPageBody .= $sLinkSyn;
+ break;
+ default:
+ var_dump($aState, $sPageName, $aTemplateStack, $sPart, $aPageText);
+ fail('unknown state');
+ }
+ }
break;
- case 'body':
- $sPageBody .= $sPart;
+ case '|':
+ if ($aState[0] == 'template' || $aState[0] == 'templateparam') {
+ // Create a new template paramater
+ $aState[0] = 'templateparam';
+ array_unshift($aTemplateStack[0][1], '');
+ }
+ if ($aState[0] == 'link') $aState[0] = 'linksynonim';
break;
default:
- var_dump($aState, $aPageText);
- fail('unknown state');
- }
- break;
+ switch ($aState[0]) {
+ case 'template':
+ $aTemplateStack[0][0] .= trim($sPart);
+ break;
+ case 'templateparam':
+ $aTemplateStack[0][1][0] .= $sPart;
+ break;
+ case 'link':
+ $sLinkPage .= trim($sPart);
+ break;
+ case 'linksynonim':
+ $sLinkSyn .= $sPart;
+ break;
+ case 'body':
+ $sPageBody .= $sPart;
+ break;
+ default:
+ var_dump($aState, $aPageText);
+ fail('unknown state');
+ }
+ break;
}
}
return $aTemplates;
foreach ($aTemplates as $iTemplate => $aTemplate) {
$aParams = array();
foreach (array_reverse($aTemplate[1]) as $iParam => $sParam) {
- if (($iPos = strpos($sParam, '=')) === FALSE) {
+ if (($iPos = strpos($sParam, '=')) === false) {
$aParams[] = trim($sParam);
} else {
$aParams[trim(substr($sParam, 0, $iPos))] = trim(substr($sParam, $iPos+1));
if (!isset($aPageProperties['sWebsite']) && isset($aParams['website']) && $aParams['website']) {
if (preg_match('#^\\[?([^ \\]]+)[^\\]]*\\]?$#', $aParams['website'], $aMatch)) {
$aPageProperties['sWebsite'] = $aMatch[1];
- if (strpos($aPageProperties['sWebsite'], ':/'.'/') === FALSE) {
+ if (strpos($aPageProperties['sWebsite'], ':/'.'/') === false) {
$aPageProperties['sWebsite'] = 'http:/'.'/'.$aPageProperties['sWebsite'];
}
}
if (isset($aCMDResult['parse-wikipedia'])) {
$oDB =& getDB();
$aArticleNames = $oDB->getCol('select page_title from content where page_namespace = 0 and page_id %10 = '.$aCMDResult['parse-wikipedia'].' and (page_content ilike \'%{{Coord%\' or (page_content ilike \'%lat%\' and page_content ilike \'%lon%\'))');
-// $aArticleNames = $oDB->getCol($sSQL = 'select page_title from content where page_namespace = 0 and (page_content ilike \'%{{Coord%\' or (page_content ilike \'%lat%\' and page_content ilike \'%lon%\')) and page_title in (\'Virginia\')');
+ // $aArticleNames = $oDB->getCol($sSQL = 'select page_title from content where page_namespace = 0 and (page_content ilike \'%{{Coord%\' or (page_content ilike \'%lat%\' and page_content ilike \'%lon%\')) and page_title in (\'Virginia\')');
foreach ($aArticleNames as $sArticleName) {
$sPageText = $oDB->getOne('select page_content from content where page_namespace = 0 and page_title = \''.pg_escape_string($sArticleName).'\'');
$aP = _templatesToProperties(_parseWikipediaContent($sPageText));
}
}
+
function nominatimXMLStart($hParser, $sName, $aAttr)
{
- global $aNominatRecords;
- switch ($sName) {
+ global $aNominatRecords;
+ switch ($sName) {
case 'PLACE':
- $aNominatRecords[] = $aAttr;
- break;
- }
+ $aNominatRecords[] = $aAttr;
+ break;
+ }
}
+
function nominatimXMLEnd($hParser, $sName)
{
}
$fMaxDist = 0.0000001;
$bUnknown = false;
switch (strtolower($aRecord['infobox_type'])) {
- case 'former country':
- continue 2;
- case 'sea':
- $fMaxDist = 60; // effectively turn it off
- $sURL .= "&viewbox=".($aRecord['lon']-$fMaxDist).",".($aRecord['lat']+$fMaxDist).",".($aRecord['lon']+$fMaxDist).",".($aRecord['lat']-$fMaxDist);
- break;
- case 'country':
- case 'island':
- case 'islands':
- case 'continent':
- $fMaxDist = 60; // effectively turn it off
- $sURL .= "&featuretype=country";
- $sURL .= "&viewbox=".($aRecord['lon']-$fMaxDist).",".($aRecord['lat']+$fMaxDist).",".($aRecord['lon']+$fMaxDist).",".($aRecord['lat']-$fMaxDist);
- break;
- case 'prefecture japan':
- $aRecord['name'] = trim(str_replace(' Prefecture', ' ', $aRecord['name']));
- break;
- case 'state':
- case '#us state':
- case 'county':
- case 'u.s. state':
- case 'u.s. state symbols':
- case 'german state':
- case 'province or territory of canada':
- case 'indian jurisdiction':
- case 'province':
- case 'french region':
- case 'region of italy':
- case 'kommune':
- case '#australia state or territory':
- case 'russian federal subject':
- $fMaxDist = 4;
- $sURL .= "&featuretype=state";
- $sURL .= "&viewbox=".($aRecord['lon']-$fMaxDist).",".($aRecord['lat']+$fMaxDist).",".($aRecord['lon']+$fMaxDist).",".($aRecord['lat']-$fMaxDist);
- break;
- case 'protected area':
- $fMaxDist = 1;
- $sURL .= "&nearlat=".$aRecord['lat'];
- $sURL .= "&nearlon=".$aRecord['lon'];
- $sURL .= "&viewbox=".($aRecord['lon']-$fMaxDist).",".($aRecord['lat']+$fMaxDist).",".($aRecord['lon']+$fMaxDist).",".($aRecord['lat']-$fMaxDist);
- break;
- case 'settlement':
- $bUnknown = true;
- break;
- case 'french commune':
- case 'italian comune':
- case 'uk place':
- case 'italian comune':
- case 'australian place':
- case 'german place':
- case '#geobox':
- case 'u.s. county':
- case 'municipality':
- case 'city japan':
- case 'russian inhabited locality':
- case 'finnish municipality/land area':
- case 'england county':
- case 'israel municipality':
- case 'russian city':
- case 'city':
- $fMaxDist = 0.2;
- $sURL .= "&featuretype=settlement";
- $sURL .= "&viewbox=".($aRecord['lon']-0.5).",".($aRecord['lat']+0.5).",".($aRecord['lon']+0.5).",".($aRecord['lat']-0.5);
- break;
- case 'mountain':
- case 'mountain pass':
- case 'river':
- case 'lake':
- case 'airport':
- $fMaxDist = 0.2;
- $sURL .= "&viewbox=".($aRecord['lon']-0.5).",".($aRecord['lat']+0.5).",".($aRecord['lon']+0.5).",".($aRecord['lat']-0.5);
- break;
- case 'ship begin':
- $fMaxDist = 0.1;
- $aTypes = array('wreck');
- $sURL .= "&viewbox=".($aRecord['lon']-0.01).",".($aRecord['lat']+0.01).",".($aRecord['lon']+0.01).",".($aRecord['lat']-0.01);
- $sURL .= "&nearlat=".$aRecord['lat'];
- $sURL .= "&nearlon=".$aRecord['lon'];
- break;
- case 'road':
- case 'university':
- case 'company':
- case 'department':
- $fMaxDist = 0.005;
- $sURL .= "&viewbox=".($aRecord['lon']-0.01).",".($aRecord['lat']+0.01).",".($aRecord['lon']+0.01).",".($aRecord['lat']-0.01);
- $sURL .= "&bounded=1";
- $sURL .= "&nearlat=".$aRecord['lat'];
- $sURL .= "&nearlon=".$aRecord['lon'];
- break;
- default:
- $bUnknown = true;
- $fMaxDist = 0.005;
- $sURL .= "&viewbox=".($aRecord['lon']-0.01).",".($aRecord['lat']+0.01).",".($aRecord['lon']+0.01).",".($aRecord['lat']-0.01);
-// $sURL .= "&bounded=1";
- $sURL .= "&nearlat=".$aRecord['lat'];
- $sURL .= "&nearlon=".$aRecord['lon'];
- echo "-- Unknown: ".$aRecord['infobox_type']."\n";
- break;
+ case 'former country':
+ continue 2;
+ case 'sea':
+ $fMaxDist = 60; // effectively turn it off
+ $sURL .= "&viewbox=".($aRecord['lon']-$fMaxDist).",".($aRecord['lat']+$fMaxDist).",".($aRecord['lon']+$fMaxDist).",".($aRecord['lat']-$fMaxDist);
+ break;
+ case 'country':
+ case 'island':
+ case 'islands':
+ case 'continent':
+ $fMaxDist = 60; // effectively turn it off
+ $sURL .= "&featuretype=country";
+ $sURL .= "&viewbox=".($aRecord['lon']-$fMaxDist).",".($aRecord['lat']+$fMaxDist).",".($aRecord['lon']+$fMaxDist).",".($aRecord['lat']-$fMaxDist);
+ break;
+ case 'prefecture japan':
+ $aRecord['name'] = trim(str_replace(' Prefecture', ' ', $aRecord['name']));
+ break;
+ case 'state':
+ case '#us state':
+ case 'county':
+ case 'u.s. state':
+ case 'u.s. state symbols':
+ case 'german state':
+ case 'province or territory of canada':
+ case 'indian jurisdiction':
+ case 'province':
+ case 'french region':
+ case 'region of italy':
+ case 'kommune':
+ case '#australia state or territory':
+ case 'russian federal subject':
+ $fMaxDist = 4;
+ $sURL .= "&featuretype=state";
+ $sURL .= "&viewbox=".($aRecord['lon']-$fMaxDist).",".($aRecord['lat']+$fMaxDist).",".($aRecord['lon']+$fMaxDist).",".($aRecord['lat']-$fMaxDist);
+ break;
+ case 'protected area':
+ $fMaxDist = 1;
+ $sURL .= "&nearlat=".$aRecord['lat'];
+ $sURL .= "&nearlon=".$aRecord['lon'];
+ $sURL .= "&viewbox=".($aRecord['lon']-$fMaxDist).",".($aRecord['lat']+$fMaxDist).",".($aRecord['lon']+$fMaxDist).",".($aRecord['lat']-$fMaxDist);
+ break;
+ case 'settlement':
+ $bUnknown = true;
+ break;
+ case 'french commune':
+ case 'italian comune':
+ case 'uk place':
+ case 'italian comune':
+ case 'australian place':
+ case 'german place':
+ case '#geobox':
+ case 'u.s. county':
+ case 'municipality':
+ case 'city japan':
+ case 'russian inhabited locality':
+ case 'finnish municipality/land area':
+ case 'england county':
+ case 'israel municipality':
+ case 'russian city':
+ case 'city':
+ $fMaxDist = 0.2;
+ $sURL .= "&featuretype=settlement";
+ $sURL .= "&viewbox=".($aRecord['lon']-0.5).",".($aRecord['lat']+0.5).",".($aRecord['lon']+0.5).",".($aRecord['lat']-0.5);
+ break;
+ case 'mountain':
+ case 'mountain pass':
+ case 'river':
+ case 'lake':
+ case 'airport':
+ $fMaxDist = 0.2;
+ $sURL .= "&viewbox=".($aRecord['lon']-0.5).",".($aRecord['lat']+0.5).",".($aRecord['lon']+0.5).",".($aRecord['lat']-0.5);
+ break;
+ case 'ship begin':
+ $fMaxDist = 0.1;
+ $aTypes = array('wreck');
+ $sURL .= "&viewbox=".($aRecord['lon']-0.01).",".($aRecord['lat']+0.01).",".($aRecord['lon']+0.01).",".($aRecord['lat']-0.01);
+ $sURL .= "&nearlat=".$aRecord['lat'];
+ $sURL .= "&nearlon=".$aRecord['lon'];
+ break;
+ case 'road':
+ case 'university':
+ case 'company':
+ case 'department':
+ $fMaxDist = 0.005;
+ $sURL .= "&viewbox=".($aRecord['lon']-0.01).",".($aRecord['lat']+0.01).",".($aRecord['lon']+0.01).",".($aRecord['lat']-0.01);
+ $sURL .= "&bounded=1";
+ $sURL .= "&nearlat=".$aRecord['lat'];
+ $sURL .= "&nearlon=".$aRecord['lon'];
+ break;
+ default:
+ $bUnknown = true;
+ $fMaxDist = 0.005;
+ $sURL .= "&viewbox=".($aRecord['lon']-0.01).",".($aRecord['lat']+0.01).",".($aRecord['lon']+0.01).",".($aRecord['lat']-0.01);
+ // $sURL .= "&bounded=1";
+ $sURL .= "&nearlat=".$aRecord['lat'];
+ $sURL .= "&nearlon=".$aRecord['lon'];
+ echo "-- Unknown: ".$aRecord['infobox_type']."\n";
+ break;
}
$sNameURL = $sURL.'&q='.urlencode($aRecord['name']);
$hXMLParser = xml_parser_create();
xml_set_element_handler($hXMLParser, 'nominatimXMLStart', 'nominatimXMLEnd');
xml_parse($hXMLParser, $sXML, true);
- xml_parser_free($hXMLParser);#
+ xml_parser_free($hXMLParser);
}
}
} else {
$sSQL = "update wikipedia_article set osm_type=";
switch ($aNominatRecords[$i]['OSM_TYPE']) {
- case 'relation': $sSQL .= "'R'"; break;
- case 'way': $sSQL .= "'W'"; break;
- case 'node': $sSQL .= "'N'"; break;
+ case 'relation':
+ $sSQL .= "'R'";
+ break;
+ case 'way':
+ $sSQL .= "'W'";
+ break;
+ case 'node':
+ $sSQL .= "'N'";
+ break;
}
$sSQL .= ", osm_id=".$aNominatRecords[$i]['OSM_ID']." where language = '".pg_escape_string($aRecord['language'])."' and title = '".pg_escape_string($aRecord['title'])."'";
$oDB->query($sSQL);
#!/usr/bin/php -Cq
<?php
-// Apache log file
-$sFile = "sample.log.txt";
+$sFile = "sample.log.txt"; // Apache log file
$sHost1 = 'http://mq-open-search-lm02.ihost.aol.com:8000/nominatim/v1';
$sHost2 = 'http://mq-open-search-lm03.ihost.aol.com:8000/nominatim/v1';
$sRes = $sURL1.":\n";
for ($j = 0; $j < strlen($sRes1); $j+=40) {
- $sRes .= substr($sRes1, $j, 40)."\n";
+ $sRes .= substr($sRes1, $j, 40)."\n";
}
file_put_contents('log/'.$i.'.1', $sRes);
$sRes = $sURL2.":\n";
for ($j = 0; $j < strlen($sRes2); $j+=40) {
- $sRes .= substr($sRes2, $j, 40)."\n";
+ $sRes .= substr($sRes2, $j, 40)."\n";
}
file_put_contents('log/'.$i.'.2', $sRes);
}
if ($aCMDResult['setup-db'] || $aCMDResult['all']) {
echo "Setup DB\n";
$bDidSomething = true;
- // TODO: path detection, detection memory, etc.
+ // TODO: path detection, detection memory, etc.
+ //
$oDB =& getDB();
$fPostgresVersion = getPostgresVersion($oDB);
echo "Setup finished.\n";
}
+
function pgsqlRunScriptFile($sFilename)
{
if (!file_exists($sFilename)) fail('unable to find '.$sFilename);
fclose($ahGzipPipes[1]);
proc_close($hGzipProcess);
}
-
}
function pgsqlRunScript($sScript, $bfatal = true)
$sCMD .= ' -v ON_ERROR_STOP=1';
$aDescriptors = array(
0 => array('pipe', 'r'),
- 1 => STDOUT,
+ 1 => STDOUT,
2 => STDERR
);
$ahPipes = null;
$sTemplate = str_replace('-- %NOAUXDATA% ', '', $sTemplate);
}
pgsqlRunScript($sTemplate);
-
}
-
$sLabel = trim($aMatch[1]);
$sClass = trim($aMatch[2]);
$sType = trim($aMatch[3]);
- # hack around a bug where building=yes was imported with
- # quotes into the wiki
+ // hack around a bug where building=yes was imported with
+ // quotes into the wiki
$sType = preg_replace('/"/', '', $sType);
- # sanity check, in case somebody added garbage in the wiki
+ // sanity check, in case somebody added garbage in the wiki
if (preg_match('/^\\w+$/', $sClass) < 1
|| preg_match('/^\\w+$/', $sType) < 1
) {
trigger_error("Bad class/type for language $sLanguage: $sClass=$sType");
exit;
}
- # blacklisting: disallow certain class/type combinations
+ // blacklisting: disallow certain class/type combinations
if (isset($aTagsBlacklist[$sClass]) && in_array($sType, $aTagsBlacklist[$sClass])) {
- # fwrite(STDERR, "Blacklisted: ".$sClass."/".$sType."\n");
+ // fwrite(STDERR, "Blacklisted: ".$sClass."/".$sType."\n");
continue;
}
- # whitelisting: if class is in whitelist, allow only tags in the list
+ // whitelisting: if class is in whitelist, allow only tags in the list
if (isset($aTagsWhitelist[$sClass]) && !in_array($sType, $aTagsWhitelist[$sClass])) {
- # fwrite(STDERR, "Non-Whitelisted: ".$sClass."/".$sType."\n");
+ // fwrite(STDERR, "Non-Whitelisted: ".$sClass."/".$sType."\n");
continue;
}
$aPairs[$sClass.'|'.$sType] = array($sClass, $sType);
// First check if there are new updates published (except for minutelies - there's always new diffs to process)
if (CONST_Replication_Update_Interval > 60) {
unset($aReplicationLag);
- exec($sCMDCheckReplicationLag, $aReplicationLag, $iErrorLevel);
+ exec($sCMDCheckReplicationLag, $aReplicationLag, $iErrorLevel);
while ($iErrorLevel > 0 || $aReplicationLag[0] < 1) {
if ($iErrorLevel) {
echo "Error: $iErrorLevel. ";
}
sleep(CONST_Replication_Recheck_Interval);
unset($aReplicationLag);
- exec($sCMDCheckReplicationLag, $aReplicationLag, $iErrorLevel);
+ exec($sCMDCheckReplicationLag, $aReplicationLag, $iErrorLevel);
}
// There are new replication files - use osmosis to download the file
echo "\n".date('Y-m-d H:i:s')." Replication Delay is ".$aReplicationLag[0]."\n";
}
}
+
function getosmosistimestamp($sOsmosisConfigDirectory)
{
$sStateFile = file_get_contents($sOsmosisConfigDirectory.'/state.txt');
<?php
- require_once(dirname(dirname(__FILE__)).'/settings/settings.php');
- require_once(CONST_BasePath.'/lib/init-website.php');
- require_once(CONST_BasePath.'/lib/log.php');
- require_once(CONST_BasePath.'/lib/output.php');
- ini_set('memory_limit', '200M');
- $sOutputFormat = 'html';
+require_once(dirname(dirname(__FILE__)).'/settings/settings.php');
+require_once(CONST_BasePath.'/lib/init-website.php');
+require_once(CONST_BasePath.'/lib/log.php');
+require_once(CONST_BasePath.'/lib/output.php');
+ini_set('memory_limit', '200M');
- $oDB =& getDB();
+$sOutputFormat = 'html';
- $sSQL = "select placex.place_id, calculated_country_code as country_code, name->'name' as name, i.* from placex, import_polygon_delete i where placex.osm_id = i.osm_id and placex.osm_type = i.osm_type and placex.class = i.class and placex.type = i.type";
- $aPolygons = chksql($oDB->getAll($sSQL), "Could not get list of deleted OSM elements.");
+$oDB =& getDB();
+
+$sSQL = "select placex.place_id, calculated_country_code as country_code, name->'name' as name, i.* from placex, import_polygon_delete i where placex.osm_id = i.osm_id and placex.osm_type = i.osm_type and placex.class = i.class and placex.type = i.type";
+$aPolygons = chksql($oDB->getAll($sSQL), "Could not get list of deleted OSM elements.");
+
+if (CONST_DEBUG) {
+ var_dump($aPolygons);
+ exit;
+}
- if (CONST_DEBUG) {
- var_dump($aPolygons);
- exit;
- }
?>
<!DOCTYPE html>
<html>
<table>
<?php
- if (!$aPolygons) exit;
+
+if (!$aPolygons) exit;
+echo "<tr>";
+// var_dump($aPolygons[0]);
+foreach ($aPolygons[0] as $sCol => $sVal) {
+ echo "<th>".$sCol."</th>";
+}
+echo "</tr>";
+foreach ($aPolygons as $aRow) {
echo "<tr>";
-//var_dump($aPolygons[0]);
- foreach ($aPolygons[0] as $sCol => $sVal) {
- echo "<th>".$sCol."</th>";
- }
- echo "</tr>";
- foreach ($aPolygons as $aRow) {
- echo "<tr>";
- foreach ($aRow as $sCol => $sVal) {
- switch ($sCol) {
- case 'osm_id':
- echo '<td>'.osmLink($aRow).'</td>';
- break;
- case 'place_id':
- echo '<td>'.detailsLink($aRow).'</td>';
- break;
- default:
- echo "<td>".($sVal?$sVal:' ')."</td>";
- break;
- }
+ foreach ($aRow as $sCol => $sVal) {
+ switch ($sCol) {
+ case 'osm_id':
+ echo '<td>'.osmLink($aRow).'</td>';
+ break;
+ case 'place_id':
+ echo '<td>'.detailsLink($aRow).'</td>';
+ break;
+ default:
+ echo "<td>".($sVal?$sVal:' ')."</td>";
+ break;
}
- echo "</tr>";
}
+ echo "</tr>";
+}
+
?>
</table>
userError('Bulk User: Only ' . CONST_Places_Max_ID_count . " ids are allowed in one request.");
}
-foreach ($aOsmIds AS $sItem) {
+foreach ($aOsmIds as $sItem) {
// Skip empty sItem
if (empty($sItem)) continue;
<?php
- require_once(dirname(dirname(__FILE__)).'/settings/settings.php');
- require_once(CONST_BasePath.'/lib/init-website.php');
- require_once(CONST_BasePath.'/lib/log.php');
- require_once(CONST_BasePath.'/lib/output.php');
- ini_set('memory_limit', '200M');
- $oParams = new ParameterParser();
+require_once(dirname(dirname(__FILE__)).'/settings/settings.php');
+require_once(CONST_BasePath.'/lib/init-website.php');
+require_once(CONST_BasePath.'/lib/log.php');
+require_once(CONST_BasePath.'/lib/output.php');
+ini_set('memory_limit', '200M');
- $sOutputFormat = 'html';
- $iDays = $oParams->getInt('days', 1);
- $bReduced = $oParams->getBool('reduced', false);
- $sClass = $oParams->getString('class', false);
+$oParams = new ParameterParser();
- $oDB =& getDB();
+$sOutputFormat = 'html';
+$iDays = $oParams->getInt('days', 1);
+$bReduced = $oParams->getBool('reduced', false);
+$sClass = $oParams->getString('class', false);
- $iTotalBroken = (int) chksql($oDB->getOne('select count(*) from import_polygon_error'));
+$oDB =& getDB();
- $aPolygons = array();
- while ($iTotalBroken && !sizeof($aPolygons)) {
- $sSQL = 'select osm_type as "type",osm_id as "id",class as "key",type as "value",name->\'name\' as "name",';
- $sSQL .= 'country_code as "country",errormessage as "error message",updated';
- $sSQL .= " from import_polygon_error";
- $sSQL .= " where updated > 'now'::timestamp - '".$iDays." day'::interval";
- $iDays++;
+$iTotalBroken = (int) chksql($oDB->getOne('select count(*) from import_polygon_error'));
- if ($bReduced) $sSQL .= " and errormessage like 'Area reduced%'";
- if ($sClass) $sSQL .= " and class = '".pg_escape_string($sClass)."'";
- $sSQL .= " order by updated desc limit 1000";
- $aPolygons = chksql($oDB->getAll($sSQL));
- }
+$aPolygons = array();
+while ($iTotalBroken && !sizeof($aPolygons)) {
+ $sSQL = 'select osm_type as "type",osm_id as "id",class as "key",type as "value",name->\'name\' as "name",';
+ $sSQL .= 'country_code as "country",errormessage as "error message",updated';
+ $sSQL .= " from import_polygon_error";
+ $sSQL .= " where updated > 'now'::timestamp - '".$iDays." day'::interval";
+ $iDays++;
+
+ if ($bReduced) $sSQL .= " and errormessage like 'Area reduced%'";
+ if ($sClass) $sSQL .= " and class = '".pg_escape_string($sClass)."'";
+ $sSQL .= " order by updated desc limit 1000";
+ $aPolygons = chksql($oDB->getAll($sSQL));
+}
+
+if (CONST_Debug) {
+ var_dump($aPolygons);
+ exit;
+}
- if (CONST_Debug) {
- var_dump($aPolygons);
- exit;
- }
?>
<!DOCTYPE html>
<html>
<?php
- echo "<p>Total number of broken polygons: $iTotalBroken</p>";
- if (!$aPolygons) exit;
- echo "<table>";
- echo "<tr>";
+echo "<p>Total number of broken polygons: $iTotalBroken</p>";
+if (!$aPolygons) exit;
+echo "<table>";
+echo "<tr>";
//var_dump($aPolygons[0]);
- foreach ($aPolygons[0] as $sCol => $sVal) {
- echo "<th>".$sCol."</th>";
- }
- echo "<th> </th>";
- echo "<th> </th>";
- echo "</tr>";
- $aSeen = array();
- foreach ($aPolygons as $aRow) {
- if (isset($aSeen[$aRow['type'].$aRow['id']])) continue;
- $aSeen[$aRow['type'].$aRow['id']] = 1;
- echo "<tr>";
- foreach ($aRow as $sCol => $sVal) {
- switch ($sCol) {
+foreach ($aPolygons[0] as $sCol => $sVal) {
+ echo "<th>".$sCol."</th>";
+}
+echo "<th> </th>";
+echo "<th> </th>";
+echo "</tr>";
+$aSeen = array();
+foreach ($aPolygons as $aRow) {
+ if (isset($aSeen[$aRow['type'].$aRow['id']])) continue;
+ $aSeen[$aRow['type'].$aRow['id']] = 1;
+ echo "<tr>";
+ foreach ($aRow as $sCol => $sVal) {
+ switch ($sCol) {
case 'error message':
if (preg_match('/Self-intersection\\[([0-9.\\-]+) ([0-9.\\-]+)\\]/', $sVal, $aMatch)) {
$aRow['lat'] = $aMatch[2];
default:
echo "<td>".($sVal?$sVal:' ')."</td>";
break;
- }
- }
- echo "<td><a href=\"http://localhost:8111/import?url=http://www.openstreetmap.org/api/0.6/".$sOSMType.'/'.$aRow['id']."/full\" target=\"josm\">josm</a></td>";
- if (isset($aRow['lat'])) {
- echo "<td><a href=\"http://open.mapquestapi.com/dataedit/index_flash.html?lat=".$aRow['lat']."&lon=".$aRow['lon']."&zoom=18\" target=\"potlatch2\">P2</a></td>";
- } else {
- echo "<td> </td>";
}
- echo "</tr>";
}
- echo "</table>";
+ echo "<td><a href=\"http://localhost:8111/import?url=http://www.openstreetmap.org/api/0.6/".$sOSMType.'/'.$aRow['id']."/full\" target=\"josm\">josm</a></td>";
+ if (isset($aRow['lat'])) {
+ echo "<td><a href=\"http://open.mapquestapi.com/dataedit/index_flash.html?lat=".$aRow['lat']."&lon=".$aRow['lon']."&zoom=18\" target=\"potlatch2\">P2</a></td>";
+ } else {
+ echo "<td> </td>";
+ }
+ echo "</tr>";
+}
+echo "</table>";
+
?>
</body>
</html>
require_once(dirname(dirname(__FILE__)).'/settings/settings.php');
require_once(CONST_BasePath.'/lib/init-website.php');
+
function statusError($sMsg)
{
header("HTTP/1.0 500 Internal Server Error");
echo "OK";
exit;
-