Merge pull request #469 from lonvia/refactor-php

Some refactoring of website php
This commit is contained in:
Sarah Hoffmann 2016-06-13 20:13:38 +02:00 committed by GitHub
commit b14bc75dc4
27 changed files with 456 additions and 489 deletions

View File

@ -514,12 +514,8 @@
$sSQL .= " order by importance desc"; $sSQL .= " order by importance desc";
if (CONST_Debug) { echo "<hr>"; var_dump($sSQL); } if (CONST_Debug) { echo "<hr>"; var_dump($sSQL); }
$aSearchResults = $this->oDB->getAll($sSQL); $aSearchResults = chksql($this->oDB->getAll($sSQL),
"Could not get details for place.");
if (PEAR::IsError($aSearchResults))
{
failInternalError("Could not get details for place.", $sSQL, $aSearchResults);
}
return $aSearchResults; return $aSearchResults;
} }
@ -883,19 +879,13 @@
$sViewboxCentreSQL .= ")'::geometry,4326)"; $sViewboxCentreSQL .= ")'::geometry,4326)";
$sSQL = "select st_buffer(".$sViewboxCentreSQL.",".(float)($_GET['routewidth']/69).")"; $sSQL = "select st_buffer(".$sViewboxCentreSQL.",".(float)($_GET['routewidth']/69).")";
$this->sViewboxSmallSQL = $this->oDB->getOne($sSQL); $this->sViewboxSmallSQL = chksql($this->oDB->getOne($sSQL),
if (PEAR::isError($this->sViewboxSmallSQL)) "Could not get small viewbox.");
{
failInternalError("Could not get small viewbox.", $sSQL, $this->sViewboxSmallSQL);
}
$this->sViewboxSmallSQL = "'".$this->sViewboxSmallSQL."'::geometry"; $this->sViewboxSmallSQL = "'".$this->sViewboxSmallSQL."'::geometry";
$sSQL = "select st_buffer(".$sViewboxCentreSQL.",".(float)($_GET['routewidth']/30).")"; $sSQL = "select st_buffer(".$sViewboxCentreSQL.",".(float)($_GET['routewidth']/30).")";
$this->sViewboxLargeSQL = $this->oDB->getOne($sSQL); $this->sViewboxLargeSQL = chksql($this->oDB->getOne($sSQL),
if (PEAR::isError($this->sViewboxLargeSQL)) "Could not get large viewbox.");
{
failInternalError("Could not get large viewbox.", $sSQL, $this->sViewboxLargeSQL);
}
$this->sViewboxLargeSQL = "'".$this->sViewboxLargeSQL."'::geometry"; $this->sViewboxLargeSQL = "'".$this->sViewboxLargeSQL."'::geometry";
$bBoundingBoxSearch = $this->bBoundedSearch; $bBoundingBoxSearch = $this->bBoundedSearch;
} }
@ -961,11 +951,11 @@
foreach($aSpecialTermsRaw as $aSpecialTerm) foreach($aSpecialTermsRaw as $aSpecialTerm)
{ {
$sQuery = str_replace($aSpecialTerm[0], ' ', $sQuery); $sQuery = str_replace($aSpecialTerm[0], ' ', $sQuery);
$sToken = $this->oDB->getOne("select make_standard_name('".$aSpecialTerm[1]."') as string"); $sToken = chksql($this->oDB->getOne("select make_standard_name('".$aSpecialTerm[1]."') as string"));
$sSQL = 'select * from (select word_id,word_token, word, class, type, country_code, operator'; $sSQL = 'select * from (select word_id,word_token, word, class, type, country_code, operator';
$sSQL .= ' from word where word_token in (\' '.$sToken.'\')) as x where (class is not null and class not in (\'place\')) or country_code is not null'; $sSQL .= ' from word where word_token in (\' '.$sToken.'\')) as x where (class is not null and class not in (\'place\')) or country_code is not null';
if (CONST_Debug) var_Dump($sSQL); if (CONST_Debug) var_Dump($sSQL);
$aSearchWords = $this->oDB->getAll($sSQL); $aSearchWords = chksql($this->oDB->getAll($sSQL));
$aNewSearches = array(); $aNewSearches = array();
foreach($aSearches as $aSearch) foreach($aSearches as $aSearch)
{ {
@ -1010,13 +1000,8 @@
$aTokens = array(); $aTokens = array();
foreach($aPhrases as $iPhrase => $sPhrase) foreach($aPhrases as $iPhrase => $sPhrase)
{ {
$aPhrase = $this->oDB->getRow("select make_standard_name('".pg_escape_string($sPhrase)."') as string"); $aPhrase = chksql($this->oDB->getRow("select make_standard_name('".pg_escape_string($sPhrase)."') as string"),
if (PEAR::isError($aPhrase)) "Cannot nomralize query string (is it an UTF-8 string?)");
{
userError("Illegal query string (not an UTF-8 string): ".$sPhrase);
if (CONST_Debug) var_dump($aPhrase);
exit;
}
if (trim($aPhrase['string'])) if (trim($aPhrase['string']))
{ {
$aPhrases[$iPhrase] = $aPhrase; $aPhrases[$iPhrase] = $aPhrase;
@ -1043,11 +1028,14 @@
if (CONST_Debug) var_Dump($sSQL); if (CONST_Debug) var_Dump($sSQL);
$aValidTokens = array(); $aValidTokens = array();
if (sizeof($aTokens)) $aDatabaseWords = $this->oDB->getAll($sSQL); if (sizeof($aTokens))
else $aDatabaseWords = array();
if (PEAR::IsError($aDatabaseWords))
{ {
failInternalError("Could not get word tokens.", $sSQL, $aDatabaseWords); $aDatabaseWords = chksql($this->oDB->getAll($sSQL),
"Could not get word tokens.");
}
else
{
$aDatabaseWords = array();
} }
$aPossibleMainWordIDs = array(); $aPossibleMainWordIDs = array();
$aWordFrequencyScores = array(); $aWordFrequencyScores = array();
@ -1264,7 +1252,7 @@
$sSQL .= " and _st_intersects($this->sViewboxSmallSQL, geometry)"; $sSQL .= " and _st_intersects($this->sViewboxSmallSQL, geometry)";
$sSQL .= " order by st_area(geometry) desc limit 1"; $sSQL .= " order by st_area(geometry) desc limit 1";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aPlaceIDs = $this->oDB->getCol($sSQL); $aPlaceIDs = chksql($this->oDB->getCol($sSQL));
} }
else else
{ {
@ -1276,7 +1264,7 @@
if (!$bBoundingBoxSearch && !$aSearch['fLon']) continue; if (!$bBoundingBoxSearch && !$aSearch['fLon']) continue;
if (!$aSearch['sClass']) continue; if (!$aSearch['sClass']) continue;
$sSQL = "select count(*) from pg_tables where tablename = 'place_classtype_".$aSearch['sClass']."_".$aSearch['sType']."'"; $sSQL = "select count(*) from pg_tables where tablename = 'place_classtype_".$aSearch['sClass']."_".$aSearch['sType']."'";
if ($this->oDB->getOne($sSQL)) if (chksql($this->oDB->getOne($sSQL)))
{ {
$sSQL = "select place_id from place_classtype_".$aSearch['sClass']."_".$aSearch['sType']." ct"; $sSQL = "select place_id from place_classtype_".$aSearch['sClass']."_".$aSearch['sType']." ct";
if ($sCountryCodesSQL) $sSQL .= " join placex using (place_id)"; if ($sCountryCodesSQL) $sSQL .= " join placex using (place_id)";
@ -1289,7 +1277,7 @@
if ($sViewboxCentreSQL) $sSQL .= " order by st_distance($sViewboxCentreSQL, ct.centroid) asc"; if ($sViewboxCentreSQL) $sSQL .= " order by st_distance($sViewboxCentreSQL, ct.centroid) asc";
$sSQL .= " limit $this->iLimit"; $sSQL .= " limit $this->iLimit";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aPlaceIDs = $this->oDB->getCol($sSQL); $aPlaceIDs = chksql($this->oDB->getCol($sSQL));
// If excluded place IDs are given, it is fair to assume that // If excluded place IDs are given, it is fair to assume that
// there have been results in the small box, so no further // there have been results in the small box, so no further
@ -1304,7 +1292,7 @@
if ($sViewboxCentreSQL) $sSQL .= " order by st_distance($sViewboxCentreSQL, ct.centroid) asc"; if ($sViewboxCentreSQL) $sSQL .= " order by st_distance($sViewboxCentreSQL, ct.centroid) asc";
$sSQL .= " limit $this->iLimit"; $sSQL .= " limit $this->iLimit";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aPlaceIDs = $this->oDB->getCol($sSQL); $aPlaceIDs = chksql($this->oDB->getCol($sSQL));
} }
} }
else else
@ -1315,7 +1303,7 @@
if ($sViewboxCentreSQL) $sSQL .= " order by st_distance($sViewboxCentreSQL, centroid) asc"; if ($sViewboxCentreSQL) $sSQL .= " order by st_distance($sViewboxCentreSQL, centroid) asc";
$sSQL .= " limit $this->iLimit"; $sSQL .= " limit $this->iLimit";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aPlaceIDs = $this->oDB->getCol($sSQL); $aPlaceIDs = chksql($this->oDB->getCol($sSQL));
} }
} }
} }
@ -1426,11 +1414,8 @@
$sSQL .= " limit ".$this->iLimit; $sSQL .= " limit ".$this->iLimit;
if (CONST_Debug) { var_dump($sSQL); } if (CONST_Debug) { var_dump($sSQL); }
$aViewBoxPlaceIDs = $this->oDB->getAll($sSQL); $aViewBoxPlaceIDs = chksql($this->oDB->getAll($sSQL),
if (PEAR::IsError($aViewBoxPlaceIDs)) "Could not get places for search terms.");
{
failInternalError("Could not get places for search terms.", $sSQL, $aViewBoxPlaceIDs);
}
//var_dump($aViewBoxPlaceIDs); //var_dump($aViewBoxPlaceIDs);
// Did we have an viewbox matches? // Did we have an viewbox matches?
$aPlaceIDs = array(); $aPlaceIDs = array();
@ -1464,7 +1449,7 @@
} }
$sSQL .= " limit $this->iLimit"; $sSQL .= " limit $this->iLimit";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aPlaceIDs = $this->oDB->getCol($sSQL); $aPlaceIDs = chksql($this->oDB->getCol($sSQL));
// if nothing found, search in the interpolation line table // if nothing found, search in the interpolation line table
if(!sizeof($aPlaceIDs)) if(!sizeof($aPlaceIDs))
@ -1486,7 +1471,7 @@
//$sSQL .= " limit $this->iLimit"; //$sSQL .= " limit $this->iLimit";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
//get place IDs //get place IDs
$aPlaceIDs = $this->oDB->getCol($sSQL, 0); $aPlaceIDs = chksql($this->oDB->getCol($sSQL, 0));
} }
// If nothing found try the aux fallback table // If nothing found try the aux fallback table
@ -1499,7 +1484,7 @@
} }
//$sSQL .= " limit $this->iLimit"; //$sSQL .= " limit $this->iLimit";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aPlaceIDs = $this->oDB->getCol($sSQL); $aPlaceIDs = chksql($this->oDB->getCol($sSQL));
} }
//if nothing was found in placex or location_property_aux, then search in Tiger data for this housenumber(location_property_tiger) //if nothing was found in placex or location_property_aux, then search in Tiger data for this housenumber(location_property_tiger)
@ -1521,7 +1506,7 @@
//$sSQL .= " limit $this->iLimit"; //$sSQL .= " limit $this->iLimit";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
//get place IDs //get place IDs
$aPlaceIDs = $this->oDB->getCol($sSQL, 0); $aPlaceIDs = chksql($this->oDB->getCol($sSQL, 0));
} }
// Fallback to the road (if no housenumber was found) // Fallback to the road (if no housenumber was found)
@ -1548,18 +1533,18 @@
if ($sCountryCodesSQL) $sSQL .= " and calculated_country_code in ($sCountryCodesSQL)"; if ($sCountryCodesSQL) $sSQL .= " and calculated_country_code in ($sCountryCodesSQL)";
$sSQL .= " order by rank_search asc limit $this->iLimit"; $sSQL .= " order by rank_search asc limit $this->iLimit";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aClassPlaceIDs = $this->oDB->getCol($sSQL); $aClassPlaceIDs = chksql($this->oDB->getCol($sSQL));
} }
if (!$aSearch['sOperator'] || $aSearch['sOperator'] == 'near') // & in if (!$aSearch['sOperator'] || $aSearch['sOperator'] == 'near') // & in
{ {
$sSQL = "select count(*) from pg_tables where tablename = 'place_classtype_".$aSearch['sClass']."_".$aSearch['sType']."'"; $sSQL = "select count(*) from pg_tables where tablename = 'place_classtype_".$aSearch['sClass']."_".$aSearch['sType']."'";
$bCacheTable = $this->oDB->getOne($sSQL); $bCacheTable = chksql($this->oDB->getOne($sSQL));
$sSQL = "select min(rank_search) from placex where place_id in ($sPlaceIDs)"; $sSQL = "select min(rank_search) from placex where place_id in ($sPlaceIDs)";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$this->iMaxRank = ((int)$this->oDB->getOne($sSQL)); $this->iMaxRank = ((int)chksql($this->oDB->getOne($sSQL)));
// For state / country level searches the normal radius search doesn't work very well // For state / country level searches the normal radius search doesn't work very well
$sPlaceGeom = false; $sPlaceGeom = false;
@ -1568,7 +1553,7 @@
// Try and get a polygon to search in instead // Try and get a polygon to search in instead
$sSQL = "select geometry from placex where place_id in ($sPlaceIDs) and rank_search < $this->iMaxRank + 5 and st_geometrytype(geometry) in ('ST_Polygon','ST_MultiPolygon') order by rank_search asc limit 1"; $sSQL = "select geometry from placex where place_id in ($sPlaceIDs) and rank_search < $this->iMaxRank + 5 and st_geometrytype(geometry) in ('ST_Polygon','ST_MultiPolygon') order by rank_search asc limit 1";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$sPlaceGeom = $this->oDB->getOne($sSQL); $sPlaceGeom = chksql($this->oDB->getOne($sSQL));
} }
if ($sPlaceGeom) if ($sPlaceGeom)
@ -1580,7 +1565,7 @@
$this->iMaxRank += 5; $this->iMaxRank += 5;
$sSQL = "select place_id from placex where place_id in ($sPlaceIDs) and rank_search < $this->iMaxRank"; $sSQL = "select place_id from placex where place_id in ($sPlaceIDs) and rank_search < $this->iMaxRank";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aPlaceIDs = $this->oDB->getCol($sSQL); $aPlaceIDs = chksql($this->oDB->getCol($sSQL));
$sPlaceIDs = join(',',$aPlaceIDs); $sPlaceIDs = join(',',$aPlaceIDs);
} }
@ -1619,7 +1604,7 @@
if ($this->iOffset) $sSQL .= " offset $this->iOffset"; if ($this->iOffset) $sSQL .= " offset $this->iOffset";
$sSQL .= " limit $this->iLimit"; $sSQL .= " limit $this->iLimit";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aClassPlaceIDs = array_merge($aClassPlaceIDs, $this->oDB->getCol($sSQL)); $aClassPlaceIDs = array_merge($aClassPlaceIDs, chksql($this->oDB->getCol($sSQL)));
} }
else else
{ {
@ -1641,7 +1626,7 @@
if ($this->iOffset) $sSQL .= " offset $this->iOffset"; if ($this->iOffset) $sSQL .= " offset $this->iOffset";
$sSQL .= " limit $this->iLimit"; $sSQL .= " limit $this->iLimit";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aClassPlaceIDs = array_merge($aClassPlaceIDs, $this->oDB->getCol($sSQL)); $aClassPlaceIDs = array_merge($aClassPlaceIDs, chksql($this->oDB->getCol($sSQL)));
} }
} }
} }
@ -1652,11 +1637,6 @@
} }
if (PEAR::IsError($aPlaceIDs))
{
failInternalError("Could not get place IDs from tokens." ,$sSQL, $aPlaceIDs);
}
if (CONST_Debug) { echo "<br><b>Place IDs:</b> "; var_Dump($aPlaceIDs); } if (CONST_Debug) { echo "<br><b>Place IDs:</b> "; var_Dump($aPlaceIDs); }
foreach($aPlaceIDs as $iPlaceID) foreach($aPlaceIDs as $iPlaceID)
@ -1685,7 +1665,7 @@
$sSQL .= ") UNION select place_id from location_property_osmline where place_id in (".join(',',array_keys($aResultPlaceIDs)).")"; $sSQL .= ") UNION select place_id from location_property_osmline where place_id in (".join(',',array_keys($aResultPlaceIDs)).")";
$sSQL .= " and (30 between $this->iMinAddressRank and $this->iMaxAddressRank)"; $sSQL .= " and (30 between $this->iMinAddressRank and $this->iMaxAddressRank)";
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aFilteredPlaceIDs = $this->oDB->getCol($sSQL); $aFilteredPlaceIDs = chksql($this->oDB->getCol($sSQL));
$tempIDs = array(); $tempIDs = array();
foreach($aFilteredPlaceIDs as $placeID) foreach($aFilteredPlaceIDs as $placeID)
{ {

View File

@ -100,7 +100,7 @@
function setOSMID($sType, $iID) function setOSMID($sType, $iID)
{ {
$sSQL = "select place_id from placex where osm_type = '".pg_escape_string($sType)."' and osm_id = ".(int)$iID." order by type = 'postcode' asc"; $sSQL = "select place_id from placex where osm_type = '".pg_escape_string($sType)."' and osm_id = ".(int)$iID." order by type = 'postcode' asc";
$this->iPlaceID = $this->oDB->getOne($sSQL); $this->iPlaceID = chksql($this->oDB->getOne($sSQL));
} }
function lookupPlace($details) function lookupPlace($details)
@ -175,13 +175,7 @@
$sSQL .= " from placex where place_id = ".(int)$this->iPlaceID; $sSQL .= " from placex where place_id = ".(int)$this->iPlaceID;
} }
$aPlace = $this->oDB->getRow($sSQL); $aPlace = chksql($this->oDB->getRow($sSQL), "Could not lookup place");
if (PEAR::IsError($aPlace))
{
failInternalError("Could not lookup place.", $sSQL, $aPlace);
}
if (!$aPlace['place_id']) return null; if (!$aPlace['place_id']) return null;
@ -248,13 +242,7 @@
if (!$bAll) $sSQL .= " WHERE isaddress OR type = 'country_code'"; if (!$bAll) $sSQL .= " WHERE isaddress OR type = 'country_code'";
$sSQL .= " order by rank_address desc,isaddress desc"; $sSQL .= " order by rank_address desc,isaddress desc";
$aAddressLines = $this->oDB->getAll($sSQL); return chksql($this->oDB->getAll($sSQL));
if (PEAR::IsError($aAddressLines))
{
var_dump($aAddressLines);
exit;
}
return $aAddressLines;
} }
function getAddressNames($housenumber = -1) function getAddressNames($housenumber = -1)
@ -332,12 +320,8 @@
$sSQL .= $sFrom; $sSQL .= $sFrom;
} }
$aPointPolygon = $this->oDB->getRow($sSQL); $aPointPolygon = chksql($this->oDB->getRow($sSQL),
if (PEAR::IsError($aPointPolygon)) "Could not get outline");
{
echo var_dump($aPointPolygon);
failInternalError("Could not get outline.", $sSQL, $aPointPolygon);
}
if ($aPointPolygon['place_id']) if ($aPointPolygon['place_id'])
{ {

View File

@ -148,11 +148,8 @@
$sSQL .= ' OR ST_DWithin('.$sPointSQL.', centroid, '.$fSearchDiam.'))'; $sSQL .= ' OR ST_DWithin('.$sPointSQL.', centroid, '.$fSearchDiam.'))';
$sSQL .= ' ORDER BY ST_distance('.$sPointSQL.', geometry) ASC limit 1'; $sSQL .= ' ORDER BY ST_distance('.$sPointSQL.', geometry) ASC limit 1';
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aPlace = $this->oDB->getRow($sSQL); $aPlace = chksql($this->oDB->getRow($sSQL),
if (PEAR::IsError($aPlace)) "Could not determine closest place.");
{
failInternalError("Could not determine closest place.", $sSQL, $aPlace);
}
$iPlaceID = $aPlace['place_id']; $iPlaceID = $aPlace['place_id'];
$iParentPlaceID = $aPlace['parent_place_id']; $iParentPlaceID = $aPlace['parent_place_id'];
$bIsInUnitedStates = ($aPlace['calculated_country_code'] == 'us'); $bIsInUnitedStates = ($aPlace['calculated_country_code'] == 'us');
@ -172,17 +169,14 @@
$sSQL = preg_replace('/limit 1/', 'limit 100', $sSQL); $sSQL = preg_replace('/limit 1/', 'limit 100', $sSQL);
var_dump($sSQL); var_dump($sSQL);
$aAllHouses = $this->oDB->getAll($sSQL); $aAllHouses = chksql($this->oDB->getAll($sSQL));
foreach($aAllHouses as $i) foreach($aAllHouses as $i)
{ {
echo $i['housenumber'] . ' | ' . $i['distance'] * 1000 . ' | ' . $i['lat'] . ' | ' . $i['lon']. ' | '. "<br>\n"; echo $i['housenumber'] . ' | ' . $i['distance'] * 1000 . ' | ' . $i['lat'] . ' | ' . $i['lon']. ' | '. "<br>\n";
} }
} }
$aPlaceLine = $this->oDB->getRow($sSQL); $aPlaceLine = chksql($this->oDB->getRow($sSQL),
if (PEAR::IsError($aPlaceLine)) "Could not determine closest housenumber on an osm interpolation line.");
{
failInternalError("Could not determine closest housenumber on an osm interpolation line.", $sSQL, $aPlaceLine);
}
if ($aPlaceLine) if ($aPlaceLine)
{ {
if (CONST_Debug) var_dump('found housenumber in interpolation lines table', $aPlaceLine); if (CONST_Debug) var_dump('found housenumber in interpolation lines table', $aPlaceLine);
@ -192,20 +186,14 @@
// if the placex house or the interpolated house are closer to the searched point // if the placex house or the interpolated house are closer to the searched point
// distance between point and placex house // distance between point and placex house
$sSQL = 'SELECT ST_distance('.$sPointSQL.', house.geometry) as distance FROM placex as house WHERE house.place_id='.$iPlaceID; $sSQL = 'SELECT ST_distance('.$sPointSQL.', house.geometry) as distance FROM placex as house WHERE house.place_id='.$iPlaceID;
$aDistancePlacex = $this->oDB->getRow($sSQL); $aDistancePlacex = chksql($this->oDB->getRow($sSQL),
if (PEAR::IsError($aDistancePlacex)) "Could not determine distance between searched point and placex house.");
{
failInternalError("Could not determine distance between searched point and placex house.", $sSQL, $aDistancePlacex);
}
$fDistancePlacex = $aDistancePlacex['distance']; $fDistancePlacex = $aDistancePlacex['distance'];
// distance between point and interpolated house (fraction on interpolation line) // distance between point and interpolated house (fraction on interpolation line)
$sSQL = 'SELECT ST_distance('.$sPointSQL.', ST_LineInterpolatePoint(linegeo, '.$aPlaceLine['fraction'].')) as distance'; $sSQL = 'SELECT ST_distance('.$sPointSQL.', ST_LineInterpolatePoint(linegeo, '.$aPlaceLine['fraction'].')) as distance';
$sSQL .= ' FROM location_property_osmline WHERE place_id = '.$aPlaceLine['place_id']; $sSQL .= ' FROM location_property_osmline WHERE place_id = '.$aPlaceLine['place_id'];
$aDistanceInterpolation = $this->oDB->getRow($sSQL); $aDistanceInterpolation = chksql($this->oDB->getRow($sSQL),
if (PEAR::IsError($aDistanceInterpolation)) "Could not determine distance between searched point and interpolated house.");
{
failInternalError("Could not determine distance between searched point and interpolated house.", $sSQL, $aDistanceInterpolation);
}
$fDistanceInterpolation = $aDistanceInterpolation['distance']; $fDistanceInterpolation = $aDistanceInterpolation['distance'];
if ($fDistanceInterpolation < $fDistancePlacex) if ($fDistanceInterpolation < $fDistancePlacex)
{ {
@ -244,18 +232,15 @@
$sSQL = preg_replace('/limit 1/', 'limit 100', $sSQL); $sSQL = preg_replace('/limit 1/', 'limit 100', $sSQL);
var_dump($sSQL); var_dump($sSQL);
$aAllHouses = $this->oDB->getAll($sSQL); $aAllHouses = chksql($this->oDB->getAll($sSQL));
foreach($aAllHouses as $i) foreach($aAllHouses as $i)
{ {
echo $i['housenumber'] . ' | ' . $i['distance'] * 1000 . ' | ' . $i['lat'] . ' | ' . $i['lon']. ' | '. "<br>\n"; echo $i['housenumber'] . ' | ' . $i['distance'] * 1000 . ' | ' . $i['lat'] . ' | ' . $i['lon']. ' | '. "<br>\n";
} }
} }
$aPlaceTiger = $this->oDB->getRow($sSQL); $aPlaceTiger = chksql($this->oDB->getRow($sSQL),
if (PEAR::IsError($aPlaceTiger)) "Could not determine closest Tiger place.");
{
failInternalError("Could not determine closest Tiger place.", $sSQL, $aPlaceTiger);
}
if ($aPlaceTiger) if ($aPlaceTiger)
{ {
if (CONST_Debug) var_dump('found Tiger housenumber', $aPlaceTiger); if (CONST_Debug) var_dump('found Tiger housenumber', $aPlaceTiger);
@ -279,11 +264,8 @@
$sSQL .= " WHERE place_id = $iPlaceID"; $sSQL .= " WHERE place_id = $iPlaceID";
$sSQL .= " ORDER BY abs(cached_rank_address - $iMaxRank) asc,cached_rank_address desc,isaddress desc,distance desc"; $sSQL .= " ORDER BY abs(cached_rank_address - $iMaxRank) asc,cached_rank_address desc,isaddress desc,distance desc";
$sSQL .= ' LIMIT 1'; $sSQL .= ' LIMIT 1';
$iPlaceID = $this->oDB->getOne($sSQL); $iPlaceID = chksql($this->oDB->getOne($sSQL),
if (PEAR::IsError($iPlaceID)) "Could not get parent for place.");
{
failInternalError("Could not get parent for place.", $sSQL, $iPlaceID);
}
if (!$iPlaceID) if (!$iPlaceID)
{ {
$iPlaceID = $aPlace['place_id']; $iPlaceID = $aPlace['place_id'];

View File

@ -4,13 +4,8 @@
function &getDB($bNew = false, $bPersistent = false) function &getDB($bNew = false, $bPersistent = false)
{ {
// Get the database object // Get the database object
$oDB = DB::connect(CONST_Database_DSN.($bNew?'?new_link=true':''), $bPersistent); $oDB = chksql(DB::connect(CONST_Database_DSN.($bNew?'?new_link=true':''), $bPersistent),
if (PEAR::IsError($oDB)) "Failed to establish database connection");
{
var_dump(CONST_Database_DSN);
var_Dump($oDB);
fail($oDB->getMessage());
}
$oDB->setFetchMode(DB_FETCHMODE_ASSOC); $oDB->setFetchMode(DB_FETCHMODE_ASSOC);
$oDB->query("SET DateStyle TO 'sql,european'"); $oDB->query("SET DateStyle TO 'sql,european'");
$oDB->query("SET client_encoding TO 'utf-8'"); $oDB->query("SET client_encoding TO 'utf-8'");

View File

@ -1,5 +1,6 @@
<?php <?php
require_once('init.php'); require_once('init.php');
require_once('website.php');
if (CONST_NoAccessControl) if (CONST_NoAccessControl)
{ {

View File

@ -1,51 +1,5 @@
<?php <?php
function failInternalError($sError, $sSQL = false, $vDumpVar = false)
{
header('HTTP/1.0 500 Internal Server Error');
header('Content-type: text/html; charset=utf-8');
echo "<html><body><h1>Internal Server Error</h1>";
echo '<p>Nominatim has encountered an internal error while processing your request. This is most likely because of a bug in the software.</p>';
echo "<p><b>Details:</b> ".$sError,"</p>";
echo '<p>Feel free to report the bug in the <a href="http://trac.openstreetmap.org">OSM bug database</a>. Please include the error message above and the URL you used.</p>';
if (CONST_Debug)
{
echo "<hr><h2>Debugging Information</h2><br>";
if ($sSQL)
{
echo "<h3>SQL query</h3><code>".$sSQL."</code>";
}
if ($vDumpVar)
{
echo "<h3>Result</h3> <code>";
var_dump($vDumpVar);
echo "</code>";
}
}
echo "\n</body></html>\n";
exit;
}
function userError($sError)
{
header('HTTP/1.0 400 Bad Request');
header('Content-type: text/html; charset=utf-8');
echo "<html><body><h1>Bad Request</h1>";
echo '<p>Nominatim has encountered an error with your request.</p>';
echo "<p><b>Details:</b> ".$sError,"</p>";
echo '<p>If you feel this error is incorrect feel free to report the bug in the <a href="http://trac.openstreetmap.org">OSM bug database</a>. Please include the error message above and the URL you used.</p>';
echo "\n</body></html>\n";
exit;
}
function getParamBool($name, $default=false)
{
if (!isset($_GET[$name])) return $default;
return (bool) $_GET[$name];
}
function fail($sError, $sUserError = false) function fail($sError, $sUserError = false)
{ {
if (!$sUserError) $sUserError = $sError; if (!$sUserError) $sUserError = $sError;
@ -223,12 +177,7 @@
{ {
// Try an exact match on the gb_postcode table // Try an exact match on the gb_postcode table
$sSQL = 'select \'AA\', ST_X(ST_Centroid(geometry)) as lon,ST_Y(ST_Centroid(geometry)) as lat from gb_postcode where postcode = \''.$sPostcode.'\''; $sSQL = 'select \'AA\', ST_X(ST_Centroid(geometry)) as lon,ST_Y(ST_Centroid(geometry)) as lat from gb_postcode where postcode = \''.$sPostcode.'\'';
$aNearPostcodes = $oDB->getAll($sSQL); $aNearPostcodes = chksql($oDB->getAll($sSQL));
if (PEAR::IsError($aNearPostcodes))
{
var_dump($sSQL, $aNearPostcodes);
exit;
}
if (sizeof($aNearPostcodes)) if (sizeof($aNearPostcodes))
{ {
@ -701,12 +650,7 @@
if (!$bRaw) $sSQL .= " WHERE isaddress OR type = 'country_code'"; 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 = $oDB->getAll($sSQL); $aAddressLines = chksql($oDB->getAll($sSQL));
if (PEAR::IsError($aAddressLines))
{
var_dump($aAddressLines);
exit;
}
if ($bRaw) return $aAddressLines; if ($bRaw) return $aAddressLines;
//echo "<pre>"; //echo "<pre>";
//var_dump($aAddressLines); //var_dump($aAddressLines);
@ -804,12 +748,7 @@
$sSQL .= ' OR ST_DWithin('.$sPointSQL.', ST_Centroid(geometry), '.$fSearchDiam.'))'; $sSQL .= ' OR ST_DWithin('.$sPointSQL.', ST_Centroid(geometry), '.$fSearchDiam.'))';
$sSQL .= ' ORDER BY ST_distance('.$sPointSQL.', geometry) ASC limit 1'; $sSQL .= ' ORDER BY ST_distance('.$sPointSQL.', geometry) ASC limit 1';
//var_dump($sSQL); //var_dump($sSQL);
$aPlace = $oDB->getRow($sSQL); $aPlace = chksql($oDB->getRow($sSQL));
if (PEAR::IsError($aPlace))
{
var_Dump($sSQL, $aPlace);
exit;
}
$iPlaceID = $aPlace['place_id']; $iPlaceID = $aPlace['place_id'];
} }
@ -817,22 +756,12 @@
if ($iPlaceID) if ($iPlaceID)
{ {
$sSQL = "select address_place_id from place_addressline where cached_rank_address <= $iMaxRank and place_id = $iPlaceID order by cached_rank_address desc,isaddress desc,distance desc limit 1"; $sSQL = "select address_place_id from place_addressline where cached_rank_address <= $iMaxRank and place_id = $iPlaceID order by cached_rank_address desc,isaddress desc,distance desc limit 1";
$iPlaceID = $oDB->getOne($sSQL); $iPlaceID = chksql($oDB->getOne($sSQL));
if (PEAR::IsError($iPlaceID))
{
var_Dump($sSQL, $iPlaceID);
exit;
}
if ($iPlaceID && $aPlace['place_id'] && $iMaxRank < 28) if ($iPlaceID && $aPlace['place_id'] && $iMaxRank < 28)
{ {
$sSQL = "select address_place_id from place_addressline where cached_rank_address <= $iMaxRank and place_id = ".$aPlace['place_id']." order by cached_rank_address desc,isaddress desc,distance desc"; $sSQL = "select address_place_id from place_addressline where cached_rank_address <= $iMaxRank and place_id = ".$aPlace['place_id']." order by cached_rank_address desc,isaddress desc,distance desc";
$iPlaceID = $oDB->getOne($sSQL); $iPlaceID = chksql($oDB->getOne($sSQL));
if (PEAR::IsError($iPlaceID))
{
var_Dump($sSQL, $iPlaceID);
exit;
}
} }
if (!$iPlaceID) if (!$iPlaceID)
{ {

43
lib/output.php Normal file
View File

@ -0,0 +1,43 @@
<?php
function formatOSMType($sType, $bIncludeExternal=true)
{
if ($sType == 'N') return 'node';
if ($sType == 'W') return 'way';
if ($sType == 'R') return 'relation';
if (!$bIncludeExternal) return '';
if ($sType == 'T') return 'tiger';
if ($sType == 'I') return 'way';
return '';
}
function osmLink($aFeature, $sRefText=false)
{
$sOSMType = formatOSMType($aFeature['osm_type'], false);
if ($sOSMType)
{
return '<a href="//www.openstreetmap.org/'.$sOSMType.'/'.$aFeature['osm_id'].'">'.$sOSMType.' '.($sRefText?$sRefText:$aFeature['osm_id']).'</a>';
}
return '';
}
function wikipediaLink($aFeature)
{
if ($aFeature['wikipedia'])
{
list($sLanguage, $sArticle) = explode(':',$aFeature['wikipedia']);
return '<a href="https://'.$sLanguage.'.wikipedia.org/wiki/'.urlencode($sArticle).'" target="_blank">'.$aFeature['wikipedia'].'</a>';
}
return '';
}
function detailsLink($aFeature, $sTitle=false)
{
if (!$aFeature['place_id']) return '';
return '<a href="details.php?place_id='.$aFeature['place_id'].'">'.($sTitle?$sTitle:$aFeature['place_id']).'</a>';
}

View File

@ -12,8 +12,7 @@
{ {
if (isset($aPlace['place_id'])) $aFilteredPlaces['place_id'] = $aPlace['place_id']; if (isset($aPlace['place_id'])) $aFilteredPlaces['place_id'] = $aPlace['place_id'];
$aFilteredPlaces['licence'] = "Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright"; $aFilteredPlaces['licence'] = "Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright";
$sOSMType = ($aPlace['osm_type'] == 'N'?'node':($aPlace['osm_type'] == 'W'?'way':($aPlace['osm_type'] == 'R'?'relation': $sOSMType = formatOSMType($aPlace['osm_type']);
($aPlace['osm_type'] == 'T'?'tiger':($aPlace['osm_type'] == 'I'?'interpolation':'')))));
if ($sOSMType) if ($sOSMType)
{ {
$aFilteredPlaces['osm_type'] = $sOSMType; $aFilteredPlaces['osm_type'] = $sOSMType;
@ -29,11 +28,6 @@
if (isset($aPlace['aBoundingBox'])) if (isset($aPlace['aBoundingBox']))
{ {
$aFilteredPlaces['boundingbox'] = $aPlace['aBoundingBox']; $aFilteredPlaces['boundingbox'] = $aPlace['aBoundingBox'];
if (isset($aPlace['aPolyPoints']) && $bAsPoints)
{
$aFilteredPlaces['polygonpoints'] = $aPlace['aPolyPoints'];
}
} }
if (isset($aPlace['asgeojson'])) if (isset($aPlace['asgeojson']))
@ -55,8 +49,6 @@
{ {
$aFilteredPlaces['geokml'] = $aPlace['askml']; $aFilteredPlaces['geokml'] = $aPlace['askml'];
} }
} }
javascript_renderData($aFilteredPlaces); javascript_renderData($aFilteredPlaces);

View File

@ -12,8 +12,7 @@
{ {
if ($aPlace['place_id']) $aFilteredPlaces['place_id'] = $aPlace['place_id']; if ($aPlace['place_id']) $aFilteredPlaces['place_id'] = $aPlace['place_id'];
$aFilteredPlaces['licence'] = "Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright"; $aFilteredPlaces['licence'] = "Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright";
$sOSMType = ($aPlace['osm_type'] == 'N'?'node':($aPlace['osm_type'] == 'W'?'way':($aPlace['osm_type'] == 'R'?'relation': $sOSMType = formatOSMType($aPlace['osm_type']);
($aPlace['osm_type'] == 'T'?'tiger':($aPlace['osm_type'] == 'I'?'interpolation':'')))));
if ($sOSMType) if ($sOSMType)
{ {
$aFilteredPlaces['osm_type'] = $sOSMType; $aFilteredPlaces['osm_type'] = $sOSMType;
@ -41,11 +40,6 @@
if (isset($aPlace['aBoundingBox'])) if (isset($aPlace['aBoundingBox']))
{ {
$aFilteredPlaces['boundingbox'] = $aPlace['aBoundingBox']; $aFilteredPlaces['boundingbox'] = $aPlace['aBoundingBox'];
if (isset($aPlace['aPolyPoints']) && $bAsPoints)
{
$aFilteredPlaces['polygonpoints'] = $aPlace['aPolyPoints'];
}
} }
if (isset($aPlace['asgeojson'])) if (isset($aPlace['asgeojson']))

View File

@ -22,8 +22,7 @@
{ {
echo "<result"; echo "<result";
if ($aPlace['place_id']) echo ' place_id="'.$aPlace['place_id'].'"'; if ($aPlace['place_id']) echo ' place_id="'.$aPlace['place_id'].'"';
$sOSMType = ($aPlace['osm_type'] == 'N'?'node':($aPlace['osm_type'] == 'W'?'way':($aPlace['osm_type'] == 'R'?'relation': $sOSMType = formatOSMType($aPlace['osm_type']);
($aPlace['osm_type'] == 'T'?'tiger':($aPlace['osm_type'] == 'I'?'interpolation':'')))));
if ($sOSMType) echo ' osm_type="'.$sOSMType.'"'.' osm_id="'.$aPlace['osm_id'].'"'; if ($sOSMType) echo ' osm_type="'.$sOSMType.'"'.' osm_id="'.$aPlace['osm_id'].'"';
if ($aPlace['ref']) echo ' ref="'.htmlspecialchars($aPlace['ref']).'"'; if ($aPlace['ref']) echo ' ref="'.htmlspecialchars($aPlace['ref']).'"';
if (isset($aPlace['lat'])) echo ' lat="'.htmlspecialchars($aPlace['lat']).'"'; if (isset($aPlace['lat'])) echo ' lat="'.htmlspecialchars($aPlace['lat']).'"';
@ -33,13 +32,6 @@
echo ' boundingbox="'; echo ' boundingbox="';
echo join(',', $aPlace['aBoundingBox']); echo join(',', $aPlace['aBoundingBox']);
echo '"'; echo '"';
if ($bAsPoints && isset($aPlace['aPolyPoints']))
{
echo ' polygonpoints=\'';
echo json_encode($aPlace['aPolyPoints']);
echo '\'';
}
} }
if (isset($aPlace['asgeojson'])) if (isset($aPlace['asgeojson']))

View File

@ -9,27 +9,18 @@
<?php <?php
function osm_link($aFeature) function osmMapUrl($aFeature)
{ {
$sOSMType = ($aFeature['osm_type'] == 'N'?'node':($aFeature['osm_type'] == 'W'?'way':($aFeature['osm_type'] == 'R'?'relation':''))); if (isset($sFeature['error_x']) && isset($sFeature['error_y']))
if ($sOSMType) {
return '<a href="http://www.openstreetmap.org/browse/'.$sOSMType.'/'.$aFeature['osm_id'].'">'.$sOSMType.' '.$aFeature['osm_id'].'</a>';
}
return '';
}
function osm_map_url($aFeature)
{
$sLon = $aFeature['error_x'];
$sLat = $aFeature['error_y'];
if (isset($sLat))
{ {
$sOSMType = ($aFeature['osm_type'] == 'N'?'node':($aFeature['osm_type'] == 'W'?'way':($aFeature['osm_type'] == 'R'?'relation':''))); $sBaseUrl = '//www.openstreetmap.org/';
$sOSMType = formatOSMType($aFeature['osm_type'], false);
if ($sOSMType) if ($sOSMType)
{ {
return "http://www.openstreetmap.org/?lat=".$sLat."&lon=".$sLon."&zoom=18&layers=M&".$sOSMType."=".$aFeature['osm_id']; $sBaseUrl += $sOSMType.'/'.$aFeature['osm_id'];
} }
return '<a href="'.$sBaseUrl.'?mlat='.$aFeature['error_y'].'&mlon='.$aFeature['error_x'].'">view on osm.org</a>';
} }
return ''; return '';
} }
@ -45,7 +36,7 @@
return "http://localhost:8111/load_and_zoom?left=".($sLon-$fWidth)."&right=".($sLon+$fWidth)."&top=".($sLat+$fWidth)."&bottom=".($sLat-$fWidth); return "http://localhost:8111/load_and_zoom?left=".($sLon-$fWidth)."&right=".($sLon+$fWidth)."&top=".($sLat+$fWidth)."&bottom=".($sLat-$fWidth);
} }
$sOSMType = ($aFeature['osm_type'] == 'N'?'node':($aFeature['osm_type'] == 'W'?'way':($aFeature['osm_type'] == 'R'?'relation':''))); $sOSMType = formatOSMType($aFeature['osm_type'], false);
if ($sOSMType) if ($sOSMType)
{ {
return 'http://localhost:8111/import?url=http://www.openstreetmap.org/api/0.6/'.$sOSMType.'/'.$aFeature['osm_id'].'/full'; return 'http://localhost:8111/import?url=http://www.openstreetmap.org/api/0.6/'.$sOSMType.'/'.$aFeature['osm_id'].'/full';
@ -63,7 +54,7 @@
if (isset($sLat)) if (isset($sLat))
{ {
return "http://www.openstreetmap.org/edit?editor=potlatch2&bbox=".($sLon-$fWidth).",".($sLat-$fWidth).",".($sLon+$fWidth).",".($sLat+$fWidth); return "//www.openstreetmap.org/edit?editor=potlatch2&bbox=".($sLon-$fWidth).",".($sLat-$fWidth).",".($sLon+$fWidth).",".($sLat+$fWidth);
} }
return ''; return '';
} }
@ -87,7 +78,7 @@
</div> </div>
<div> <div>
OSM: <span class="label"><?php echo osm_link($aPointDetails); ?><span> OSM: <span class="label"><?php echo osmLink($aPointDetails); ?><span>
</div> </div>
@ -95,9 +86,7 @@
<p> <p>
<?php echo $aPointDetails['errormessage']?$aPointDetails['errormessage']:'unknown'; ?> <?php echo $aPointDetails['errormessage']?$aPointDetails['errormessage']:'unknown'; ?>
</p> </p>
<?php if (osm_map_url($aPointDetails)) { ?> <?php echo osmMapUrl($aPointDetails); ?>
<a href="<?php echo osm_map_url($aPointDetails); ?>">view on osm.org</a>
<?php } ?>
<h4>Edit</h4> <h4>Edit</h4>
<ul> <ul>
@ -130,4 +119,4 @@
<?php include(CONST_BasePath.'/lib/template/includes/html-footer.php'); ?> <?php include(CONST_BasePath.'/lib/template/includes/html-footer.php'); ?>
</body> </body>
</html> </html>

View File

@ -7,7 +7,6 @@
</head> </head>
<?php <?php
function headline($sTitle) function headline($sTitle)
@ -20,30 +19,6 @@
echo "<tr class='all-columns'><td colspan='6'><h3>".$sTitle."</h3></td></tr>\n"; echo "<tr class='all-columns'><td colspan='6'><h3>".$sTitle."</h3></td></tr>\n";
} }
function osm_link($aFeature)
{
$sOSMType = ($aFeature['osm_type'] == 'N'?'node':($aFeature['osm_type'] == 'W'?'way':($aFeature['osm_type'] == 'R'?'relation':'')));
if ($sOSMType)
{
return '<a href="http://www.openstreetmap.org/browse/'.$sOSMType.'/'.$aFeature['osm_id'].'">'.$sOSMType.' '.$aFeature['osm_id'].'</a>';
}
return '';
}
function wikipedia_link($aFeature)
{
if ($aFeature['wikipedia'])
{
list($sWikipediaLanguage,$sWikipediaArticle) = explode(':',$aFeature['wikipedia']);
return '<a href="https://'.$sWikipediaLanguage.'.wikipedia.org/wiki/'.urlencode($sWikipediaArticle).'" target="_blank">'.$aFeature['wikipedia'].'</a>';
}
return '';
}
function nominatim_link($aFeature, $sTitle)
{
return '<a href="details.php?place_id='.$aFeature['place_id'].'">'.$sTitle.'</a>';
}
function format_distance($fDistance) function format_distance($fDistance)
{ {
@ -92,10 +67,10 @@
echo '<tr class="' . ($bNotUsed?'notused':'') . '">'."\n"; echo '<tr class="' . ($bNotUsed?'notused':'') . '">'."\n";
echo ' <td class="name">'.(trim($aAddressLine['localname'])?$aAddressLine['localname']:'<span class="noname">No Name</span>')."</td>\n"; echo ' <td class="name">'.(trim($aAddressLine['localname'])?$aAddressLine['localname']:'<span class="noname">No Name</span>')."</td>\n";
echo ' <td>' . $aAddressLine['class'].':'.$aAddressLine['type'] . "</td>\n"; echo ' <td>' . $aAddressLine['class'].':'.$aAddressLine['type'] . "</td>\n";
echo ' <td>' . osm_link($aAddressLine) . "</td>\n"; echo ' <td>' . osmLink($aAddressLine) . "</td>\n";
echo ' <td>' . (isset($aAddressLine['admin_level']) ? $aAddressLine['admin_level'] : '') . "</td>\n"; echo ' <td>' . (isset($aAddressLine['admin_level']) ? $aAddressLine['admin_level'] : '') . "</td>\n";
echo ' <td>' . format_distance($aAddressLine['distance'])."</td>\n"; echo ' <td>' . format_distance($aAddressLine['distance'])."</td>\n";
echo ' <td>' . nominatim_link($aAddressLine,'details &gt;') . "</td>\n"; echo ' <td>' . detailsLink($aAddressLine,'details &gt;') . "</td>\n";
echo "</tr>\n"; echo "</tr>\n";
} }
@ -143,10 +118,10 @@
} }
kv('Coverage' , ($aPointDetails['isarea']=='t'?'Polygon':'Point') ); kv('Coverage' , ($aPointDetails['isarea']=='t'?'Polygon':'Point') );
kv('Centre Point' , $aPointDetails['lat'].','.$aPointDetails['lon'] ); kv('Centre Point' , $aPointDetails['lat'].','.$aPointDetails['lon'] );
kv('OSM' , osm_link($aPointDetails) ); kv('OSM' , osmLink($aPointDetails) );
if ($aPointDetails['wikipedia']) if ($aPointDetails['wikipedia'])
{ {
kv('Wikipedia Calculated' , wikipedia_link($aPointDetails) ); kv('Wikipedia Calculated' , wikipediaLink($aPointDetails) );
} }
kv('Extra Tags' , hash_to_subtable($aPointDetails['aExtraTags']) ); kv('Extra Tags' , hash_to_subtable($aPointDetails['aExtraTags']) );

View File

@ -14,7 +14,7 @@
'place_id'=>$aPointDetails['place_id'], 'place_id'=>$aPointDetails['place_id'],
); );
$sOSMType = ($aPointDetails['osm_type'] == 'N'?'node':($aPointDetails['osm_type'] == 'W'?'way':($aPointDetails['osm_type'] == 'R'?'relation':''))); $sOSMType = formatOSMType($aPointDetails['osm_type']);
if ($sOSMType) if ($sOSMType)
{ {
$aPlace['osm_type'] = $sOSMType; $aPlace['osm_type'] = $sOSMType;

View File

@ -9,8 +9,7 @@
'licence'=>"Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright", 'licence'=>"Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright",
); );
$sOSMType = ($aPointDetails['osm_type'] == 'N'?'node':($aPointDetails['osm_type'] == 'W'?'way':($aPointDetails['osm_type'] == 'R'? $sOSMType = formatOSMType($aPointDetails['osm_type']);
'relation':($aPointDetails['osm_type'] == 'T'?'tiger':($aPointDetails['osm_type'] == 'I'?'interpolation':'')))));
if ($sOSMType) if ($sOSMType)
{ {
$aPlace['osm_type'] = $sOSMType; $aPlace['osm_type'] = $sOSMType;

View File

@ -7,7 +7,7 @@
'licence'=>"Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright", 'licence'=>"Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright",
); );
$sOSMType = ($aPointDetails['osm_type'] == 'N'?'node':($aPointDetails['osm_type'] == 'W'?'way':($aPointDetails['osm_type'] == 'R'?'relation':($aPointDetails['osm_type'] == 'T'?'tiger':($aPointDetails['osm_type'] == 'I'?'interpolation':''))))); $sOSMType = formatOSMType($aPointDetails['osm_type']);
if ($sOSMType) if ($sOSMType)
{ {
$aPlace['osm_type'] = $sOSMType; $aPlace['osm_type'] = $sOSMType;

View File

@ -25,8 +25,7 @@
foreach($aSearchResults as $iResNum => $aResult) foreach($aSearchResults as $iResNum => $aResult)
{ {
echo "<place place_id='".$aResult['place_id']."'"; echo "<place place_id='".$aResult['place_id']."'";
$sOSMType = ($aResult['osm_type'] == 'N'?'node':($aResult['osm_type'] == 'W'?'way':($aResult['osm_type'] == 'R'?'relation': $sOSMType = formatOSMType($aResult['osm_type']);
($aResult['osm_type'] == 'T'?'tiger':($aResult['osm_type'] == 'I'?'interpolation':'')))));
if ($sOSMType) if ($sOSMType)
{ {
echo " osm_type='$sOSMType'"; echo " osm_type='$sOSMType'";

140
lib/website.php Normal file
View File

@ -0,0 +1,140 @@
<?php
/***************************************************************************
*
* Error handling functions
*
*/
function chksql($oSql, $sMsg = "Database request failed")
{
if (!PEAR::isError($oSql)) return $oSql;
header('HTTP/1.0 500 Internal Server Error');
header('Content-type: text/html; charset=utf-8');
$sSqlError = $oSql->getMessage();
echo <<<INTERNALFAIL
<html>
<head><title>Internal Server Error</title></head>
<body>
<h1>Internal Server Error</h1>
<p>Nominatim has encountered an internal error while accessing the database.
This may happen because the database is broken or because of a bug in
the software. If you think it is a bug, feel free to report
it over on <a href="https://github.com/twain47/Nominatim/issues">
Github</a>. Please include the URL that caused the problem and the
complete error details below.</p>
<p><b>Message:</b> $sMsg</p>
<p><b>SQL Error:</b> $sSqlError</p>
<p><b>Details:</b> <pre>
INTERNALFAIL;
if (CONST_Debug)
{
var_dump($oSql);
}
else
{
echo "<pre>\n".$oSql->getUserInfo()."</pre>";
}
echo "</pre></p></body></html>";
exit;
}
function failInternalError($sError, $sSQL = false, $vDumpVar = false)
{
header('HTTP/1.0 500 Internal Server Error');
header('Content-type: text/html; charset=utf-8');
echo "<html><body><h1>Internal Server Error</h1>";
echo '<p>Nominatim has encountered an internal error while processing your request. This is most likely because of a bug in the software.</p>';
echo "<p><b>Details:</b> ".$sError,"</p>";
echo '<p>Feel free to file an issue on <a href="https://github.com/twain47/Nominatim/issues">Github</a>. Please include the error message above and the URL you used.</p>';
if (CONST_Debug)
{
echo "<hr><h2>Debugging Information</h2><br>";
if ($sSQL)
{
echo "<h3>SQL query</h3><code>".$sSQL."</code>";
}
if ($vDumpVar)
{
echo "<h3>Result</h3> <code>";
var_dump($vDumpVar);
echo "</code>";
}
}
echo "\n</body></html>\n";
exit;
}
function userError($sError)
{
header('HTTP/1.0 400 Bad Request');
header('Content-type: text/html; charset=utf-8');
echo "<html><body><h1>Bad Request</h1>";
echo '<p>Nominatim has encountered an error with your request.</p>';
echo "<p><b>Details:</b> ".$sError."</p>";
echo '<p>If you feel this error is incorrect feel file an issue on <a href="https://github.com/twain47/Nominatim/issues">Github</a>. Please include the error message above and the URL you used.</p>';
echo "\n</body></html>\n";
exit;
}
/***************************************************************************
*
* Functions for parsing URL parameters
*
*/
function getParamBool($sName, $bDefault=false)
{
if (!isset($_GET[$sName]) || strlen($_GET[$sName]) == 0) return $bDefault;
return (bool) $_GET[$sName];
}
function getParamInt($sName, $bDefault=false)
{
if (!isset($_GET[$sName]) || strlen($_GET[$sName]) == 0) return $bDefault;
if (!preg_match('/^[+-]?[0-9]+$/', $_GET[$sName]))
{
userError("Integer number expected for parameter '$sName'");
}
return (int) $_GET[$sName];
}
function getParamFloat($sName, $bDefault=false)
{
if (!isset($_GET[$sName]) || strlen($_GET[$sName]) == 0) return $bDefault;
if (!preg_match('/^[+-]?[0-9]*\.?[0-9]+$/', $_GET[$sName]))
{
userError("Floating-point number expected for parameter '$sName'");
}
return (float) $_GET[$sName];
}
function getParamString($sName, $bDefault=false)
{
if (!isset($_GET[$sName]) || strlen($_GET[$sName]) == 0) return $bDefault;
return $_GET[$sName];
}
function getParamSet($sName, $aValues, $sDefault=false)
{
if (!isset($_GET[$sName]) || strlen($_GET[$sName]) == 0) return $sDefault;
if (!in_array($_GET[$sName], $aValues))
{
userError("Parameter '$sName' must be one of: ".join(', ', $aValues));
}
return $_GET[$sName];
}

View File

@ -99,35 +99,35 @@ Feature: Simple Reverse Tests
| lat | lat
| 51.51 | 51.51
When sending an API call reverse When sending an API call reverse
Then exactly 0 results are returned Then a HTTP 400 is returned
Scenario: Missing lat parameter Scenario: Missing lat parameter
Given the request parameters Given the request parameters
| lon | lon
| -79.39114 | -79.39114
When sending an API call reverse When sending an API call reverse
Then exactly 0 results are returned Then a HTTP 400 is returned
Scenario: Missing osm_id parameter Scenario: Missing osm_id parameter
Given the request parameters Given the request parameters
| osm_type | osm_type
| N | N
When sending an API call reverse When sending an API call reverse
Then exactly 0 results are returned Then a HTTP 400 is returned
Scenario: Missing osm_type parameter Scenario: Missing osm_type parameter
Given the request parameters Given the request parameters
| osm_id | osm_id
| 3498564 | 3498564
When sending an API call reverse When sending an API call reverse
Then exactly 0 results are returned Then a HTTP 400 is returned
Scenario Outline: Bad format for lat or lon Scenario Outline: Bad format for lat or lon
Given the request parameters Given the request parameters
| lat | lon | | lat | lon |
| <lat> | <lon> | | <lat> | <lon> |
When sending an API call reverse When sending an API call reverse
Then exactly 0 results are returned Then a HTTP 400 is returned
Examples: Examples:
| lat | lon | lat | lon
@ -137,4 +137,4 @@ Feature: Simple Reverse Tests
| 48.966.0 | 8.4482 | 48.966.0 | 8.4482
| 48.966 | 8.448.2 | 48.966 | 8.448.2
| Nan | 8.448 | Nan | 8.448
| 48.966 | Nan | 48.966 | Nan

View File

@ -187,7 +187,6 @@ Feature: Search queries
| 0.0 | 0.0
| 0.5 | 0.5
| 999 | 999
| nan
Scenario Outline: Search with polygon threshold (xml) Scenario Outline: Search with polygon threshold (xml)
Given the request parameters Given the request parameters
@ -203,7 +202,14 @@ Feature: Search queries
| 0.0 | 0.0
| 0.5 | 0.5
| 999 | 999
| nan
Scenario Outline: Search with invalid polygon threshold (xml)
Given the request parameters
| polygon_geojson | polygon_threshold
| 1 | <th>
When sending xml search query "switzerland"
Then a HTTP 400 is returned
Scenario Outline: Search with extratags Scenario Outline: Search with extratags
Given the request parameters Given the request parameters

View File

@ -61,7 +61,7 @@ Feature: Simple Tests
| format | format
| fd$# | fd$#
When sending search query "Berlin" When sending search query "Berlin"
Then the result is valid html Then a HTTP 400 is returned
Scenario Outline: Simple Searches Scenario Outline: Simple Searches
When sending search query "<query>" When sending search query "<query>"

View File

@ -2,6 +2,7 @@
require_once(dirname(dirname(__FILE__)).'/settings/settings.php'); require_once(dirname(dirname(__FILE__)).'/settings/settings.php');
require_once(CONST_BasePath.'/lib/init-website.php'); require_once(CONST_BasePath.'/lib/init-website.php');
require_once(CONST_BasePath.'/lib/log.php'); require_once(CONST_BasePath.'/lib/log.php');
require_once(CONST_BasePath.'/lib/output.php');
$sOutputFormat = 'html'; $sOutputFormat = 'html';
ini_set('memory_limit', '200M'); ini_set('memory_limit', '200M');
@ -9,13 +10,14 @@
$oDB =& getDB(); $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"; $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 = $oDB->getAll($sSQL); $aPolygons = chksql($oDB->getAll($sSQL),
if (PEAR::isError($aPolygons)) "Could not get list of deleted OSM elements.");
{
failInternalError("Could not get list of deleted OSM elements.", $sSQL, $aPolygons);
}
//var_dump($aPolygons); if (CONST_DEBUG)
{
var_dump($aPolygons);
exit;
}
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
@ -66,6 +68,7 @@ table td {
<table> <table>
<?php <?php
if (!$aPolygons) exit;
echo "<tr>"; echo "<tr>";
//var_dump($aPolygons[0]); //var_dump($aPolygons[0]);
foreach($aPolygons[0] as $sCol => $sVal) foreach($aPolygons[0] as $sCol => $sVal)
@ -81,11 +84,10 @@ table td {
switch($sCol) switch($sCol)
{ {
case 'osm_id': case 'osm_id':
$sOSMType = ($aRow['osm_type'] == 'N'?'node':($aRow['osm_type'] == 'W'?'way':($aRow['osm_type'] == 'R'?'relation':''))); echo '<td>'.osmLink($aRow).'</td>';
echo '<td><a href="http://www.openstreetmap.org/browse/'.$sOSMType.'/'.$sVal.'" target="_new">'.$sVal.'</a></td>';
break; break;
case 'place_id': case 'place_id':
echo '<td><a href="'.CONST_Website_BaseURL.'details?place_id='.$sVal.'">'.$sVal.'</a></td>'; echo '<td>'.detailsLink($aRow).'</td>';
break; break;
default: default:
echo "<td>".($sVal?$sVal:'&nbsp;')."</td>"; echo "<td>".($sVal?$sVal:'&nbsp;')."</td>";

View File

@ -4,6 +4,7 @@
require_once(dirname(dirname(__FILE__)).'/settings/settings.php'); require_once(dirname(dirname(__FILE__)).'/settings/settings.php');
require_once(CONST_BasePath.'/lib/init-website.php'); require_once(CONST_BasePath.'/lib/init-website.php');
require_once(CONST_BasePath.'/lib/log.php'); require_once(CONST_BasePath.'/lib/log.php');
require_once(CONST_BasePath.'/lib/output.php');
$sOutputFormat = 'html'; $sOutputFormat = 'html';
/* /*
@ -21,15 +22,18 @@
$aLangPrefOrder = getPreferredLanguages(); $aLangPrefOrder = getPreferredLanguages();
$sLanguagePrefArraySQL = "ARRAY[".join(',',array_map("getDBQuoted",$aLangPrefOrder))."]"; $sLanguagePrefArraySQL = "ARRAY[".join(',',array_map("getDBQuoted",$aLangPrefOrder))."]";
if (isset($_GET['osmtype']) && isset($_GET['osmid']) && (int)$_GET['osmid'] && ($_GET['osmtype'] == 'N' || $_GET['osmtype'] == 'W' || $_GET['osmtype'] == 'R')) $sPlaceId = getParamString('place_id');
$sOsmType = getParamSet('osmtype', array('N', 'W', 'R'));
$iOsmId = getParamInt('osmid', -1);
if ($sOsmType && $iOsmId > 0)
{ {
$_GET['place_id'] = $oDB->getOne("select place_id from placex where osm_type = '".$_GET['osmtype']."' and osm_id = ".(int)$_GET['osmid']." order by type = 'postcode' asc"); $sPlaceId = chksql($oDB->getOne("select place_id from placex where osm_type = '".$sOsmType."' and osm_id = ".$iOsmId." order by type = 'postcode' asc"));
// Be nice about our error messages for broken geometry // Be nice about our error messages for broken geometry
if (!$_GET['place_id']) if (!$sPlaceId)
{ {
$aPointDetails = $oDB->getRow("select osm_type, osm_id, errormessage, class, type, get_name_by_language(name,$sLanguagePrefArraySQL) as localname, ST_AsText(prevgeometry) as prevgeom, ST_AsText(newgeometry) as newgeom from import_polygon_error where osm_type = '".$_GET['osmtype']."' and osm_id = ".(int)$_GET['osmid']." order by updated desc limit 1"); $aPointDetails = chksql($oDB->getRow("select osm_type, osm_id, errormessage, class, type, get_name_by_language(name,$sLanguagePrefArraySQL) as localname, ST_AsText(prevgeometry) as prevgeom, ST_AsText(newgeometry) as newgeom from import_polygon_error where osm_type = '".$sOsmType."' and osm_id = ".$iOsmId." order by updated desc limit 1"));
if (!PEAR::isError($aPointDetails) && $aPointDetails) { if (!PEAR::isError($aPointDetails) && $aPointDetails) {
if (preg_match('/\[(-?\d+\.\d+) (-?\d+\.\d+)\]/', $aPointDetails['errormessage'], $aMatches)) if (preg_match('/\[(-?\d+\.\d+) (-?\d+\.\d+)\]/', $aPointDetails['errormessage'], $aMatches))
{ {
@ -48,32 +52,24 @@
} }
if (!isset($_GET['place_id'])) if (!$sPlaceId) userError("Please select a place id");
{
echo "Please select a place id";
exit;
}
$iPlaceID = (int)$_GET['place_id']; $iPlaceID = (int)$sPlaceId;
if (CONST_Use_US_Tiger_Data) if (CONST_Use_US_Tiger_Data)
{ {
$iParentPlaceID = $oDB->getOne('select parent_place_id from location_property_tiger where place_id = '.$iPlaceID); $iParentPlaceID = chksql($oDB->getOne('select parent_place_id from location_property_tiger where place_id = '.$iPlaceID));
if ($iParentPlaceID) $iPlaceID = $iParentPlaceID; if ($iParentPlaceID) $iPlaceID = $iParentPlaceID;
} }
if (CONST_Use_Aux_Location_data) if (CONST_Use_Aux_Location_data)
{ {
$iParentPlaceID = $oDB->getOne('select parent_place_id from location_property_aux where place_id = '.$iPlaceID); $iParentPlaceID = chksql($oDB->getOne('select parent_place_id from location_property_aux where place_id = '.$iPlaceID));
if ($iParentPlaceID) $iPlaceID = $iParentPlaceID; if ($iParentPlaceID) $iPlaceID = $iParentPlaceID;
} }
$hLog = logStart($oDB, 'details', $_SERVER['QUERY_STRING'], $aLangPrefOrder); $hLog = logStart($oDB, 'details', $_SERVER['QUERY_STRING'], $aLangPrefOrder);
// Make sure the point we are reporting on is fully indexed
//$sSQL = "UPDATE placex set indexed = true where indexed = false and place_id = $iPlaceID";
//$oDB->query($sSQL);
// Get the details for this point // Get the details for this point
$sSQL = "select place_id, osm_type, osm_id, class, type, name, admin_level, housenumber, street, isin, postcode, calculated_country_code as country_code, importance, wikipedia,"; $sSQL = "select place_id, osm_type, osm_id, class, type, name, admin_level, housenumber, street, isin, postcode, calculated_country_code as country_code, importance, wikipedia,";
$sSQL .= " to_char(indexed_date, 'YYYY-MM-DD HH24:MI') as indexed_date, parent_place_id, rank_address, rank_search, get_searchrank_label(rank_search) as rank_search_label, get_name_by_language(name,$sLanguagePrefArraySQL) as localname, "; $sSQL .= " to_char(indexed_date, 'YYYY-MM-DD HH24:MI') as indexed_date, parent_place_id, rank_address, rank_search, get_searchrank_label(rank_search) as rank_search_label, get_name_by_language(name,$sLanguagePrefArraySQL) as localname, ";
@ -83,11 +79,8 @@
$sSQL .= " case when importance = 0 OR importance IS NULL then 0.75-(rank_search::float/40) else importance end as calculated_importance, "; $sSQL .= " case when importance = 0 OR importance IS NULL then 0.75-(rank_search::float/40) else importance end as calculated_importance, ";
$sSQL .= " ST_AsText(CASE WHEN ST_NPoints(geometry) > 5000 THEN ST_SimplifyPreserveTopology(geometry, 0.0001) ELSE geometry END) as outlinestring"; $sSQL .= " ST_AsText(CASE WHEN ST_NPoints(geometry) > 5000 THEN ST_SimplifyPreserveTopology(geometry, 0.0001) ELSE geometry END) as outlinestring";
$sSQL .= " from placex where place_id = $iPlaceID"; $sSQL .= " from placex where place_id = $iPlaceID";
$aPointDetails = $oDB->getRow($sSQL); $aPointDetails = chksql($oDB->getRow($sSQL),
if (PEAR::IsError($aPointDetails)) "Could not get details of place object.");
{
failInternalError("Could not get details of place object.", $sSQL, $aPointDetails);
}
$aPointDetails['localname'] = $aPointDetails['localname']?$aPointDetails['localname']:$aPointDetails['housenumber']; $aPointDetails['localname'] = $aPointDetails['localname']?$aPointDetails['localname']:$aPointDetails['housenumber'];
$aClassType = getClassTypesWithImportance(); $aClassType = getClassTypesWithImportance();
@ -139,7 +132,7 @@
$aPlaceSearchNameKeywords = false; $aPlaceSearchNameKeywords = false;
$aPlaceSearchAddressKeywords = false; $aPlaceSearchAddressKeywords = false;
if (isset($_GET['keywords']) && $_GET['keywords']) if (getParamBool('keywords'))
{ {
$sSQL = "select * from search_name where place_id = $iPlaceID"; $sSQL = "select * from search_name where place_id = $iPlaceID";
$aPlaceSearchName = $oDB->getRow($sSQL); $aPlaceSearchName = $oDB->getRow($sSQL);
@ -169,10 +162,9 @@
if ($sOutputFormat=='html') if ($sOutputFormat=='html')
{ {
$sDataDate = $oDB->getOne("select TO_CHAR(lastimportdate - '2 minutes'::interval,'YYYY/MM/DD HH24:MI')||' GMT' from import_status limit 1"); $sDataDate = chksql($oDB->getOne("select TO_CHAR(lastimportdate - '2 minutes'::interval,'YYYY/MM/DD HH24:MI')||' GMT' from import_status limit 1"));
$sTileURL = CONST_Map_Tile_URL; $sTileURL = CONST_Map_Tile_URL;
$sTileAttribution = CONST_Map_Tile_Attribution; $sTileAttribution = CONST_Map_Tile_Attribution;
} }
include(CONST_BasePath.'/lib/template/details-'.$sOutputFormat.'.php'); include(CONST_BasePath.'/lib/template/details-'.$sOutputFormat.'.php');

View File

@ -5,29 +5,28 @@
require_once(CONST_BasePath.'/lib/init-website.php'); require_once(CONST_BasePath.'/lib/init-website.php');
require_once(CONST_BasePath.'/lib/log.php'); require_once(CONST_BasePath.'/lib/log.php');
require_once(CONST_BasePath.'/lib/PlaceLookup.php'); require_once(CONST_BasePath.'/lib/PlaceLookup.php');
require_once(CONST_BasePath.'/lib/output.php');
$sOutputFormat = 'html';
if (isset($_GET['format']) && ($_GET['format'] == 'html' || $_GET['format'] == 'xml' || $_GET['format'] == 'json' || $_GET['format'] == 'jsonv2'))
{
$sOutputFormat = $_GET['format'];
}
ini_set('memory_limit', '200M'); ini_set('memory_limit', '200M');
$oDB =& getDB(); $oDB =& getDB();
$sOutputFormat = getParamSet('format', array('html', 'json'), 'html');
$aLangPrefOrder = getPreferredLanguages(); $aLangPrefOrder = getPreferredLanguages();
$sLanguagePrefArraySQL = "ARRAY[".join(',',array_map("getDBQuoted",$aLangPrefOrder))."]"; $sLanguagePrefArraySQL = "ARRAY[".join(',',array_map("getDBQuoted",$aLangPrefOrder))."]";
if (isset($_GET['osmtype']) && isset($_GET['osmid']) && (int)$_GET['osmid'] && ($_GET['osmtype'] == 'N' || $_GET['osmtype'] == 'W' || $_GET['osmtype'] == 'R')) $sPlaceId = getParamString('place_id');
$sOsmType = getParamSet('osmtype', array('N', 'W', 'R'));
$iOsmId = getParamInt('osmid', -1);
if ($sOsmType && $iOsmId > 0)
{ {
$_GET['place_id'] = $oDB->getOne("select place_id from placex where osm_type = '".$_GET['osmtype']."' and osm_id = ".(int)$_GET['osmid']." order by type = 'postcode' asc"); $sPlaceId = chksql($oDB->getOne("select place_id from placex where osm_type = '".$sOsmType."' and osm_id = ".$iOsmId." order by type = 'postcode' asc"));
// Be nice about our error messages for broken geometry // Be nice about our error messages for broken geometry
if (!$_GET['place_id']) if (!$sPlaceId)
{ {
$aPointDetails = $oDB->getRow("select osm_type, osm_id, errormessage, class, type, get_name_by_language(name,$sLanguagePrefArraySQL) as localname, ST_AsText(prevgeometry) as prevgeom, ST_AsText(newgeometry) as newgeom from import_polygon_error where osm_type = '".$_GET['osmtype']."' and osm_id = ".(int)$_GET['osmid']." order by updated desc limit 1"); $aPointDetails = chksql($oDB->getRow("select osm_type, osm_id, errormessage, class, type, get_name_by_language(name,$sLanguagePrefArraySQL) as localname, ST_AsText(prevgeometry) as prevgeom, ST_AsText(newgeometry) as newgeom from import_polygon_error where osm_type = '".$sOsmType."' and osm_id = ".$iOsmId." order by updated desc limit 1"));
if (!PEAR::isError($aPointDetails) && $aPointDetails) { if ($aPointDetails) {
if (preg_match('/\[(-?\d+\.\d+) (-?\d+\.\d+)\]/', $aPointDetails['errormessage'], $aMatches)) if (preg_match('/\[(-?\d+\.\d+) (-?\d+\.\d+)\]/', $aPointDetails['errormessage'], $aMatches))
{ {
$aPointDetails['error_x'] = $aMatches[1]; $aPointDetails['error_x'] = $aMatches[1];
@ -39,23 +38,19 @@
} }
} }
if (!isset($_GET['place_id'])) if (!$sPlaceId) userError("Please select a place id");
{
echo "Please select a place id";
exit;
}
$iPlaceID = (int)$_GET['place_id']; $iPlaceID = (int)$sPlaceId;
if (CONST_Use_US_Tiger_Data) if (CONST_Use_US_Tiger_Data)
{ {
$iParentPlaceID = $oDB->getOne('select parent_place_id from location_property_tiger where place_id = '.$iPlaceID); $iParentPlaceID = chksql($oDB->getOne('select parent_place_id from location_property_tiger where place_id = '.$iPlaceID));
if ($iParentPlaceID) $iPlaceID = $iParentPlaceID; if ($iParentPlaceID) $iPlaceID = $iParentPlaceID;
} }
if (CONST_Use_Aux_Location_data) if (CONST_Use_Aux_Location_data)
{ {
$iParentPlaceID = $oDB->getOne('select parent_place_id from location_property_aux where place_id = '.$iPlaceID); $iParentPlaceID = chksql($oDB->getOne('select parent_place_id from location_property_aux where place_id = '.$iPlaceID));
if ($iParentPlaceID) $iPlaceID = $iParentPlaceID; if ($iParentPlaceID) $iPlaceID = $iParentPlaceID;
} }
@ -66,42 +61,43 @@
$aPlaceAddress = array_reverse($oPlaceLookup->getAddressDetails()); $aPlaceAddress = array_reverse($oPlaceLookup->getAddressDetails());
if (!sizeof($aPlaceAddress)) if (!sizeof($aPlaceAddress)) userError("Unknown place id.");
{
echo "Unknown place id.";
exit;
}
$aBreadcrums = array(); $aBreadcrums = array();
foreach($aPlaceAddress as $i => $aPlace) foreach($aPlaceAddress as $i => $aPlace)
{ {
if (!$aPlace['place_id']) continue; if (!$aPlace['place_id']) continue;
$aBreadcrums[] = array('placeId'=>$aPlace['place_id'], 'osmType'=>$aPlace['osm_type'], 'osmId'=>$aPlace['osm_id'], 'localName'=>$aPlace['localname']); $aBreadcrums[] = array('placeId' => $aPlace['place_id'],
$sPlaceUrl = 'hierarchy.php?place_id='.$aPlace['place_id']; 'osmType' => $aPlace['osm_type'],
$sOSMType = ($aPlace['osm_type'] == 'N'?'node':($aPlace['osm_type'] == 'W'?'way':($aPlace['osm_type'] == 'R'?'relation':''))); 'osmId' => $aPlace['osm_id'],
$sOSMUrl = 'http://www.openstreetmap.org/browse/'.$sOSMType.'/'.$aPlace['osm_id']; 'localName' => $aPlace['localname']);
if ($sOutputFormat == 'html') if ($i) echo " > ";
if ($sOutputFormat == 'html') echo '<a href="'.$sPlaceUrl.'">'.$aPlace['localname'].'</a> (<a href="'.$sOSMUrl.'">osm</a>)'; if ($sOutputFormat == 'html')
{
$sPlaceUrl = 'hierarchy.php?place_id='.$aPlace['place_id'];
if ($i) echo " &gt; ";
echo '<a href="'.$sPlaceUrl.'">'.$aPlace['localname'].'</a> ('.osmLink($aPlace).')';
}
} }
$aDetails = array();
$aDetails['breadcrumbs'] = $aBreadcrums;
if ($sOutputFormat == 'json') if ($sOutputFormat == 'json')
{ {
header("content-type: application/json; charset=UTF-8"); header("content-type: application/json; charset=UTF-8");
$aDetails = array();
$aDetails['breadcrumbs'] = $aBreadcrums;
javascript_renderData($aDetails); javascript_renderData($aDetails);
exit; exit;
} }
$aRelatedPlaceIDs = $oDB->getCol($sSQL = "select place_id from placex where linked_place_id = $iPlaceID or place_id = $iPlaceID"); $aRelatedPlaceIDs = chksql($oDB->getCol($sSQL = "select place_id from placex where linked_place_id = $iPlaceID or place_id = $iPlaceID"));
$sSQL = "select obj.place_id, osm_type, osm_id, class, type, housenumber, admin_level, rank_address, ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') as isarea, st_area(geometry) as area, "; $sSQL = "select obj.place_id, osm_type, osm_id, class, type, housenumber, admin_level, rank_address, ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') as isarea, st_area(geometry) as area, ";
$sSQL .= " get_name_by_language(name,$sLanguagePrefArraySQL) as localname, length(name::text) as namelength "; $sSQL .= " get_name_by_language(name,$sLanguagePrefArraySQL) as localname, length(name::text) as namelength ";
$sSQL .= " from (select placex.place_id, osm_type, osm_id, class, type, housenumber, admin_level, rank_address, rank_search, geometry, name from placex "; $sSQL .= " from (select placex.place_id, osm_type, osm_id, class, type, housenumber, admin_level, rank_address, rank_search, geometry, name from placex ";
$sSQL .= " where parent_place_id in (".join(',',$aRelatedPlaceIDs).") and name is not null order by rank_address asc,rank_search asc limit 500) as obj"; $sSQL .= " where parent_place_id in (".join(',',$aRelatedPlaceIDs).") and name is not null order by rank_address asc,rank_search asc limit 500) as obj";
$sSQL .= " order by rank_address asc,rank_search asc,localname,class, type,housenumber"; $sSQL .= " order by rank_address asc,rank_search asc,localname,class, type,housenumber";
$aParentOfLines = $oDB->getAll($sSQL); $aParentOfLines = chksql($oDB->getAll($sSQL));
if (sizeof($aParentOfLines)) if (sizeof($aParentOfLines))
{ {
@ -124,28 +120,29 @@
if (!isset($aGroupedAddressLines[$aAddressLine['label']])) $aGroupedAddressLines[$aAddressLine['label']] = array(); if (!isset($aGroupedAddressLines[$aAddressLine['label']])) $aGroupedAddressLines[$aAddressLine['label']] = array();
$aGroupedAddressLines[$aAddressLine['label']][] = $aAddressLine; $aGroupedAddressLines[$aAddressLine['label']][] = $aAddressLine;
}
foreach($aGroupedAddressLines as $sGroupHeading => $aParentOfLines)
{
echo "<h3>$sGroupHeading</h3>";
foreach($aParentOfLines as $aAddressLine)
{
$aAddressLine['localname'] = $aAddressLine['localname']?$aAddressLine['localname']:$aAddressLine['housenumber'];
$sOSMType = ($aAddressLine['osm_type'] == 'N'?'node':($aAddressLine['osm_type'] == 'W'?'way':($aAddressLine['osm_type'] == 'R'?'relation':'')));
echo '<div class="line">';
echo '<span class="name">'.(trim($aAddressLine['localname'])?$aAddressLine['localname']:'<span class="noname">No Name</span>').'</span>';
echo ' (';
echo '<span class="area">'.($aAddressLine['isarea']=='t'?'Polygon':'Point').'</span>';
if ($sOSMType) echo ', <span class="osm"><span class="label"></span>'.$sOSMType.' <a href="http://www.openstreetmap.org/browse/'.$sOSMType.'/'.$aAddressLine['osm_id'].'">'.$aAddressLine['osm_id'].'</a></span>';
echo ', <a href="hierarchy.php?place_id='.$aAddressLine['place_id'].'">GOTO</a>';
echo ', '.$aAddressLine['area'];
echo ')';
echo '</div>';
}
}
if (sizeof($aParentOfLines) >= 500) {
echo '<p>There are more child objects which are not shown.</p>';
}
echo '</div>';
} }
foreach($aGroupedAddressLines as $sGroupHeading => $aParentOfLines)
{
echo "<h3>$sGroupHeading</h3>";
foreach($aParentOfLines as $aAddressLine)
{
$aAddressLine['localname'] = $aAddressLine['localname']?$aAddressLine['localname']:$aAddressLine['housenumber'];
$sOSMType = formatOSMType($aAddressLine['osm_type'], false);
echo '<div class="line">';
echo '<span class="name">'.(trim($aAddressLine['localname'])?$aAddressLine['localname']:'<span class="noname">No Name</span>').'</span>';
echo ' (';
echo '<span class="area">'.($aAddressLine['isarea']=='t'?'Polygon':'Point').'</span>';
if ($sOSMType) echo ', <span class="osm"><span class="label"></span>'.$sOSMType.' '.osmLink($aAddressLine).'</span>';
echo ', <a href="hierarchy.php?place_id='.$aAddressLine['place_id'].'">GOTO</a>';
echo ', '.$aAddressLine['area'];
echo ')';
echo '</div>';
}
}
if (sizeof($aParentOfLines) >= 500) {
echo '<p>There are more child objects which are not shown.</p>';
}
echo '</div>';
}

View File

@ -5,6 +5,7 @@
require_once(CONST_BasePath.'/lib/init-website.php'); require_once(CONST_BasePath.'/lib/init-website.php');
require_once(CONST_BasePath.'/lib/log.php'); require_once(CONST_BasePath.'/lib/log.php');
require_once(CONST_BasePath.'/lib/PlaceLookup.php'); require_once(CONST_BasePath.'/lib/PlaceLookup.php');
require_once(CONST_BasePath.'/lib/output.php');
if (strpos(CONST_BulkUserIPs, ','.$_SERVER["REMOTE_ADDR"].',') !== false) if (strpos(CONST_BulkUserIPs, ','.$_SERVER["REMOTE_ADDR"].',') !== false)
{ {
@ -22,11 +23,7 @@
ini_set('memory_limit', '200M'); ini_set('memory_limit', '200M');
// Format for output // Format for output
$sOutputFormat = 'xml'; $sOutputFormat = getParamSet('format', array('xml', 'json'), 'xml');
if (isset($_GET['format']) && ($_GET['format'] == 'xml' || $_GET['format'] == 'json'))
{
$sOutputFormat = $_GET['format'];
}
// Preferred language // Preferred language
$aLangPrefOrder = getPreferredLanguages(); $aLangPrefOrder = getPreferredLanguages();
@ -35,45 +32,42 @@
$aSearchResults = array(); $aSearchResults = array();
$aCleanedQueryParts = array(); $aCleanedQueryParts = array();
if (isset($_GET['osm_ids']))
$oPlaceLookup = new PlaceLookup($oDB);
$oPlaceLookup->setLanguagePreference($aLangPrefOrder);
$oPlaceLookup->setIncludeAddressDetails(getParamBool('addressdetails', true));
$oPlaceLookup->setIncludeExtraTags(getParamBool('extratags', false));
$oPlaceLookup->setIncludeNameDetails(getParamBool('namedetails', false));
$aOsmIds = explode(',', getParamString('osm_ids', ''));
if (count($aOsmIds) > CONST_Places_Max_ID_count)
{ {
$oPlaceLookup = new PlaceLookup($oDB); userError('Bulk User: Only ' . CONST_Places_Max_ID_count . " ids are allowed in one request.");
$oPlaceLookup->setLanguagePreference($aLangPrefOrder); }
$oPlaceLookup->setIncludeAddressDetails(getParamBool('addressdetails', true));
$oPlaceLookup->setIncludeExtraTags(getParamBool('extratags', false)); foreach ($aOsmIds AS $sItem)
$oPlaceLookup->setIncludeNameDetails(getParamBool('namedetails', false)); {
// Skip empty sItem
if (empty($sItem)) continue;
$aOsmIds = explode(',', $_GET['osm_ids']); $sType = $sItem[0];
$iId = (int) substr($sItem, 1);
if ( count($aOsmIds) > CONST_Places_Max_ID_count ) if ( $iId > 0 && ($sType == 'N' || $sType == 'W' || $sType == 'R') )
{ {
userError('Bulk User: Only ' . CONST_Places_Max_ID_count . " ids are allowed in one request."); $aCleanedQueryParts[] = $sType . $iId;
exit; $oPlaceLookup->setOSMID($sType, $iId);
} $oPlace = $oPlaceLookup->lookup();
if ($oPlace){
foreach ($aOsmIds AS $sItem) // we want to use the search-* output templates, so we need to fill
{ // $aSearchResults and slightly change the (reverse search) oPlace
// Skip empty sItem // key names
if (empty($sItem)) continue; $oResult = $oPlace;
unset($oResult['aAddress']);
$sType = $sItem[0]; if (isset($oPlace['aAddress'])) $oResult['address'] = $oPlace['aAddress'];
$iId = (int) substr($sItem, 1); unset($oResult['langaddress']);
if ( $iId > 0 && ($sType == 'N' || $sType == 'W' || $sType == 'R') ) $oResult['name'] = $oPlace['langaddress'];
{ $aSearchResults[] = $oResult;
$aCleanedQueryParts[] = $sType . $iId;
$oPlaceLookup->setOSMID($sType, $iId);
$oPlace = $oPlaceLookup->lookup();
if ($oPlace){
// we want to use the search-* output templates, so we need to fill
// $aSearchResults and slightly change the (reverse search) oPlace
// key names
$oResult = $oPlace;
unset($oResult['aAddress']);
if (isset($oPlace['aAddress'])) $oResult['address'] = $oPlace['aAddress'];
unset($oResult['langaddress']);
$oResult['name'] = $oPlace['langaddress'];
$aSearchResults[] = $oResult;
}
} }
} }
} }

View File

@ -2,18 +2,17 @@
require_once(dirname(dirname(__FILE__)).'/settings/settings.php'); require_once(dirname(dirname(__FILE__)).'/settings/settings.php');
require_once(CONST_BasePath.'/lib/init-website.php'); require_once(CONST_BasePath.'/lib/init-website.php');
require_once(CONST_BasePath.'/lib/log.php'); require_once(CONST_BasePath.'/lib/log.php');
require_once(CONST_BasePath.'/lib/output.php');
$sOutputFormat = 'html';
ini_set('memory_limit', '200M'); ini_set('memory_limit', '200M');
$oDB =& getDB(); $oDB =& getDB();
if (!isset($_GET['days'])) $_GET['days'] = 1;
$bReduced = false;
if (isset($_GET['reduced'])) $bReduced = true;
$sClass = false;
if (isset($_GET['class'])) $sClass = $_GET['class'];
$iTotalBroken = (int) $oDB->getOne('select count(*) from import_polygon_error'); $sOutputFormat = 'html';
$iDays = getParamInt('days', 1);
$bReduced = getParamBool('reduced', false);
$sClass = getParamString('class', false);
$iTotalBroken = (int) chksql($oDB->getOne('select count(*) from import_polygon_error'));
$aPolygons = array(); $aPolygons = array();
while($iTotalBroken && !sizeof($aPolygons)) while($iTotalBroken && !sizeof($aPolygons))
@ -21,23 +20,20 @@
$sSQL = 'select osm_type as "type",osm_id as "id",class as "key",type as "value",name->\'name\' as "name",'; $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 .= 'country_code as "country",errormessage as "error message",updated';
$sSQL .= " from import_polygon_error"; $sSQL .= " from import_polygon_error";
if ($_GET['days']) $sSQL .= " where updated > 'now'::timestamp - '".$iDays." day'::interval";
{ $iDays++;
$sSQL .= " where updated > 'now'::timestamp - '".(int)$_GET['days']." day'::interval";
$_GET['days']++; if ($bReduced) $sSQL .= " and errormessage like 'Area reduced%'";
} if ($sClass) $sSQL .= " and class = '".pg_escape_string($sClass)."'";
if ($bReduced)
{
$sSQL .= " and errormessage like 'Area reduced%'";
}
if ($sClass)
{
$sSQL .= " and class = '".pg_escape_string($sClass)."'";
}
$sSQL .= " order by updated desc limit 1000"; $sSQL .= " order by updated desc limit 1000";
$aPolygons = $oDB->getAll($sSQL); $aPolygons = chksql($oDB->getAll($sSQL));
}
if (CONST_Debug)
{
var_dump($aPolygons);
exit;
} }
//var_dump($aPolygons);
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
@ -87,6 +83,7 @@ table td {
<?php <?php
echo "<p>Total number of broken polygons: $iTotalBroken</p>"; echo "<p>Total number of broken polygons: $iTotalBroken</p>";
if (!$aPolygons) exit;
echo "<table>"; echo "<table>";
echo "<tr>"; echo "<tr>";
//var_dump($aPolygons[0]); //var_dump($aPolygons[0]);
@ -120,8 +117,7 @@ table td {
} }
break; break;
case 'id': case 'id':
$sOSMType = ($aRow['type'] == 'N'?'node':($aRow['type'] == 'W'?'way':($aRow['type'] == 'R'?'relation':''))); echo '<td>'.osmLink($aRow).'</td>';
echo '<td><a href="http://www.openstreetmap.org/browse/'.$sOSMType.'/'.$aRow['id'].'" target="_new">'.$aRow['id'].'</a></td>';
break; break;
default: default:
echo "<td>".($sVal?$sVal:'&nbsp;')."</td>"; echo "<td>".($sVal?$sVal:'&nbsp;')."</td>";
@ -140,10 +136,6 @@ table td {
echo "</tr>"; echo "</tr>";
} }
echo "</table>"; echo "</table>";
// include(CONST_BasePath.'/lib/template/details-'.$sOutputFormat.'.php');
?> ?>
</body> </body>
</html> </html>

View File

@ -6,6 +6,7 @@
require_once(CONST_BasePath.'/lib/log.php'); require_once(CONST_BasePath.'/lib/log.php');
require_once(CONST_BasePath.'/lib/PlaceLookup.php'); require_once(CONST_BasePath.'/lib/PlaceLookup.php');
require_once(CONST_BasePath.'/lib/ReverseGeocode.php'); require_once(CONST_BasePath.'/lib/ReverseGeocode.php');
require_once(CONST_BasePath.'/lib/output.php');
if (strpos(CONST_BulkUserIPs, ','.$_SERVER["REMOTE_ADDR"].',') !== false) if (strpos(CONST_BulkUserIPs, ','.$_SERVER["REMOTE_ADDR"].',') !== false)
{ {
@ -20,17 +21,12 @@
} }
$bAsPoints = false; $bAsGeoJSON = getParamBool('polygon_geojson');
$bAsGeoJSON = (boolean)isset($_GET['polygon_geojson']) && $_GET['polygon_geojson']; $bAsKML = getParamBool('polygon_kml');
$bAsKML = (boolean)isset($_GET['polygon_kml']) && $_GET['polygon_kml']; $bAsSVG = getParamBool('polygon_svg');
$bAsSVG = (boolean)isset($_GET['polygon_svg']) && $_GET['polygon_svg']; $bAsText = getParamBool('polygon_text');
$bAsText = (boolean)isset($_GET['polygon_text']) && $_GET['polygon_text']; if ((($bAsGeoJSON?1:0) + ($bAsKML?1:0) + ($bAsSVG?1:0)
if ( ( ($bAsGeoJSON?1:0) + ($bAsText?1:0)) > CONST_PolygonOutput_MaximumTypes)
+ ($bAsKML?1:0)
+ ($bAsSVG?1:0)
+ ($bAsText?1:0)
+ ($bAsPoints?1:0)
) > CONST_PolygonOutput_MaximumTypes)
{ {
if (CONST_PolygonOutput_MaximumTypes) if (CONST_PolygonOutput_MaximumTypes)
{ {
@ -45,19 +41,14 @@
// Polygon simplification threshold (optional) // Polygon simplification threshold (optional)
$fThreshold = 0.0; $fThreshold = getParamFloat('polygon_threshold', 0.0);
if (isset($_GET['polygon_threshold'])) $fThreshold = (float)$_GET['polygon_threshold'];
$oDB =& getDB(); $oDB =& getDB();
ini_set('memory_limit', '200M'); ini_set('memory_limit', '200M');
// Format for output // Format for output
$sOutputFormat = 'xml'; $sOutputFormat = getParamSet('format', array('html', 'xml', 'json', 'jsonv2'), 'xml');
if (isset($_GET['format']) && ( $_GET['format'] == 'html' || $_GET['format'] == 'xml' || $_GET['format'] == 'json' || $_GET['format'] == 'jsonv2'))
{
$sOutputFormat = $_GET['format'];
}
// Preferred language // Preferred language
$aLangPrefOrder = getPreferredLanguages(); $aLangPrefOrder = getPreferredLanguages();
@ -65,24 +56,28 @@
$hLog = logStart($oDB, 'reverse', $_SERVER['QUERY_STRING'], $aLangPrefOrder); $hLog = logStart($oDB, 'reverse', $_SERVER['QUERY_STRING'], $aLangPrefOrder);
if (isset($_GET['osm_type']) && isset($_GET['osm_id']) && (int)$_GET['osm_id'] && ($_GET['osm_type'] == 'N' || $_GET['osm_type'] == 'W' || $_GET['osm_type'] == 'R')) $sOsmType = getParamSet('osm_type', array('N', 'W', 'R'));
$iOsmId = getParamInt('osm_id', -1);
$fLat = getParamFloat('lat');
$fLon = getParamFloat('lon');
if ($sOsmType && $iOsmId > 0)
{ {
$aLookup = array('osm_type' => $_GET['osm_type'], 'osm_id' => $_GET['osm_id']); $aLookup = array('osm_type' => $sOsmType, 'osm_id' => $iOsmId);
} }
else if (isset($_GET['lat']) && isset($_GET['lon']) && preg_match('/^[+-]?[0-9]*\.?[0-9]+$/', $_GET['lat']) && preg_match('/^[+-]?[0-9]*\.?[0-9]+$/', $_GET['lon'])) else if ($fLat !== false && $fLon !==false)
{ {
$oReverseGeocode = new ReverseGeocode($oDB); $oReverseGeocode = new ReverseGeocode($oDB);
$oReverseGeocode->setLanguagePreference($aLangPrefOrder); $oReverseGeocode->setLanguagePreference($aLangPrefOrder);
$oReverseGeocode->setLatLon($_GET['lat'], $_GET['lon']); $oReverseGeocode->setLatLon($fLat, $fLon);
$oReverseGeocode->setZoom(@$_GET['zoom']); $oReverseGeocode->setZoom(getParamInt('zoom', 18));
$aLookup = $oReverseGeocode->lookup(); $aLookup = $oReverseGeocode->lookup();
if (CONST_Debug) var_dump($aLookup); if (CONST_Debug) var_dump($aLookup);
} }
else else if ($sOutputFormat != 'html')
{ {
$aLookup = null; userError("Need coordinates or OSM object to lookup.");
} }
if ($aLookup) if ($aLookup)
@ -95,7 +90,7 @@
$aPlace = $oPlaceLookup->lookupPlace($aLookup); $aPlace = $oPlaceLookup->lookupPlace($aLookup);
$oPlaceLookup->setIncludePolygonAsPoints($bAsPoints); $oPlaceLookup->setIncludePolygonAsPoints(false);
$oPlaceLookup->setIncludePolygonAsText($bAsText); $oPlaceLookup->setIncludePolygonAsText($bAsText);
$oPlaceLookup->setIncludePolygonAsGeoJSON($bAsGeoJSON); $oPlaceLookup->setIncludePolygonAsGeoJSON($bAsGeoJSON);
$oPlaceLookup->setIncludePolygonAsKML($bAsKML); $oPlaceLookup->setIncludePolygonAsKML($bAsKML);
@ -124,7 +119,7 @@
if ($sOutputFormat=='html') if ($sOutputFormat=='html')
{ {
$sDataDate = $oDB->getOne("select TO_CHAR(lastimportdate - '2 minutes'::interval,'YYYY/MM/DD HH24:MI')||' GMT' from import_status limit 1"); $sDataDate = chksql($oDB->getOne("select TO_CHAR(lastimportdate - '2 minutes'::interval,'YYYY/MM/DD HH24:MI')||' GMT' from import_status limit 1"));
$sTileURL = CONST_Map_Tile_URL; $sTileURL = CONST_Map_Tile_URL;
$sTileAttribution = CONST_Map_Tile_Attribution; $sTileAttribution = CONST_Map_Tile_Attribution;
} }

View File

@ -5,6 +5,7 @@
require_once(CONST_BasePath.'/lib/init-website.php'); require_once(CONST_BasePath.'/lib/init-website.php');
require_once(CONST_BasePath.'/lib/log.php'); require_once(CONST_BasePath.'/lib/log.php');
require_once(CONST_BasePath.'/lib/Geocode.php'); require_once(CONST_BasePath.'/lib/Geocode.php');
require_once(CONST_BasePath.'/lib/output.php');
ini_set('memory_limit', '200M'); ini_set('memory_limit', '200M');
@ -25,24 +26,20 @@
} }
// Format for output // Format for output
$sOutputFormat = 'html'; $sOutputFormat = getParamSet('format', array('html', 'xml', 'json', 'jsonv2'), 'html');
if (isset($_GET['format']) && ($_GET['format'] == 'html' || $_GET['format'] == 'xml' || $_GET['format'] == 'json' || $_GET['format'] == 'jsonv2'))
{
$sOutputFormat = $_GET['format'];
}
// Show / use polygons // Show / use polygons
if ($sOutputFormat == 'html') if ($sOutputFormat == 'html')
{ {
if (isset($_GET['polygon'])) $oGeocode->setIncludePolygonAsText((bool)$_GET['polygon']); $oGeocode->setIncludePolygonAsText(getParamBool('polygon'));
} }
else else
{ {
$bAsPoints = (boolean)isset($_GET['polygon']) && $_GET['polygon']; $bAsPoints = getParamBool('polygon');
$bAsGeoJSON = (boolean)isset($_GET['polygon_geojson']) && $_GET['polygon_geojson']; $bAsGeoJSON = getParamBool('polygon_geojson');
$bAsKML = (boolean)isset($_GET['polygon_kml']) && $_GET['polygon_kml']; $bAsKML = getParamBool('polygon_kml');
$bAsSVG = (boolean)isset($_GET['polygon_svg']) && $_GET['polygon_svg']; $bAsSVG = getParamBool('polygon_svg');
$bAsText = (boolean)isset($_GET['polygon_text']) && $_GET['polygon_text']; $bAsText = getParamBool('polygon_text');
if ( ( ($bAsGeoJSON?1:0) if ( ( ($bAsGeoJSON?1:0)
+ ($bAsKML?1:0) + ($bAsKML?1:0)
+ ($bAsSVG?1:0) + ($bAsSVG?1:0)
@ -68,9 +65,7 @@
} }
// Polygon simplification threshold (optional) // Polygon simplification threshold (optional)
$fThreshold = 0.0; $oGeocode->setPolygonSimplificationThreshold(getParamFloat('polygon_threshold', 0.0));
if (isset($_GET['polygon_threshold'])) $fThreshold = (float)$_GET['polygon_threshold'];
$oGeocode->setPolygonSimplificationThreshold($fThreshold);
$oGeocode->loadParamArray($_GET); $oGeocode->loadParamArray($_GET);
@ -91,7 +86,7 @@
} }
else else
{ {
if (!(isset($_GET['q']) && $_GET['q']) && isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'][0] == '/') if (!getParamString('q') && isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'][0] == '/')
{ {
$sQuery = substr(rawurldecode($_SERVER['PATH_INFO']), 1); $sQuery = substr(rawurldecode($_SERVER['PATH_INFO']), 1);
@ -114,7 +109,7 @@
if ($sOutputFormat=='html') if ($sOutputFormat=='html')
{ {
$sDataDate = $oDB->getOne("select TO_CHAR(lastimportdate - '2 minutes'::interval,'YYYY/MM/DD HH24:MI')||' GMT' from import_status limit 1"); $sDataDate = chksql($oDB->getOne("select TO_CHAR(lastimportdate - '2 minutes'::interval,'YYYY/MM/DD HH24:MI')||' GMT' from import_status limit 1"));
} }
logEnd($oDB, $hLog, sizeof($aSearchResults)); logEnd($oDB, $hLog, sizeof($aSearchResults));