diff --git a/lib/template/address-json.php b/lib/template/address-json.php
new file mode 100644
index 00000000..4ae41116
--- /dev/null
+++ b/lib/template/address-json.php
@@ -0,0 +1,37 @@
+\n";
+
+ echo "\n";
+
+ if (!sizeof($aPlace))
+ {
+ if ($sError)
+ echo "$sError ";
+ else
+ echo "Unable to geocode ";
+ }
+ else
+ {
+ echo "".htmlspecialchars($aPlace['langaddress'])." ";
+
+ echo "";
+ foreach($aAddress as $sKey => $sValue)
+ {
+ $sKey = str_replace(' ','_',$sKey);
+ echo "<$sKey>";
+ echo htmlspecialchars($sValue);
+ echo "$sKey>";
+ }
+ echo " ";
+ }
+
+ echo " ";
diff --git a/lib/template/details-html.php b/lib/template/details-html.php
new file mode 100644
index 00000000..0d5f6dc6
--- /dev/null
+++ b/lib/template/details-html.php
@@ -0,0 +1,185 @@
+
+
+
+ OpenStreetMap Nominatim:
+
+
+
+
+
+
+
+
+';
+ if ($aPointDetails['icon'])
+ {
+ echo ' ';
+ }
+ echo $aPointDetails['localname'].'';
+ echo '';
+ echo '
Name: ';
+ foreach($aPointDetails['aNames'] as $sKey => $sValue)
+ {
+ echo '
'.$sValue.' ('.$sKey.')
';
+ }
+ echo '
';
+ echo '
Type: '.$aPointDetails['class'].':'.$aPointDetails['type'].'
';
+ echo '
Admin Level: '.$aPointDetails['admin_level'].'
';
+ echo '
Rank: '.$aPointDetails['rank_search_label'].'
';
+ echo '
Coverage: '.($aPointDetails['isarea']=='t'?'Polygon':'Point').'
';
+ $sOSMType = ($aPointDetails['osm_type'] == 'N'?'node':($aPointDetails['osm_type'] == 'W'?'way':($aPointDetails['osm_type'] == 'R'?'relation':'')));
+ if ($sOSMType) echo '
';
+ echo '
';
+
+ echo 'Address ';
+ echo '';
+ $iPrevRank = 1000000;
+ $sPrevLocalName = '';
+ foreach($aAddressLines as $aAddressLine)
+ {
+ $sOSMType = ($aAddressLine['osm_type'] == 'N'?'node':($aAddressLine['osm_type'] == 'W'?'way':($aAddressLine['osm_type'] == 'R'?'relation':'')));
+
+ echo '
';
+ if (!($iPrevRank<=$aAddressLine['rank_address'] || $sPrevLocalName == $aAddressLine['localname']))
+ {
+ $iPrevRank = $aAddressLine['rank_address'];
+ $sPrevLocalName = $aAddressLine['localname'];
+ }
+ echo '
'.(trim($aAddressLine['localname'])?$aAddressLine['localname']:'No Name ').' ';
+ echo ' (';
+ echo '
Type: '.$aAddressLine['class'].':'.$aAddressLine['type'].'';
+ if ($sOSMType) echo ',
'.$sOSMType.' '.$aAddressLine['osm_id'].' ';
+ echo ',
'.$aAddressLine['admin_level'].' ';
+ echo ',
'.$aAddressLine['rank_search_label'].' ';
+ echo ',
'.($aAddressLine['fromarea']=='t'?'Polygon':'Point').' ';
+ echo ',
'.$aAddressLine['distance'].' ';
+ echo '
GOTO ';
+ echo ')';
+ echo '
';
+ }
+ echo '
';
+
+ if (sizeof($aParentOfLines))
+ {
+ echo 'Parent Of (named features only): ';
+
+ $aGroupedAddressLines = array();
+ foreach($aParentOfLines as $aAddressLine)
+ {
+ if (!isset($aGroupedAddressLines[$aAddressLine['type']])) $aGroupedAddressLines[$aAddressLine['type']] = array();
+ $aGroupedAddressLines[$aAddressLine['type']][] = $aAddressLine;
+ }
+ foreach($aGroupedAddressLines as $sGroupHeading => $aParentOfLines)
+ {
+ $sGroupHeading = ucwords($sGroupHeading);
+ echo "$sGroupHeading ";
+ 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 '';
+ echo '
'.(trim($aAddressLine['localname'])?$aAddressLine['localname']:'No Name ').' ';
+ echo ' (';
+// echo '
Type: '.$aAddressLine['class'].':'.$aAddressLine['type'].'';
+// echo ',
'.$aAddressLine['admin_level'].' ';
+// echo ',
'.$aAddressLine['rank_address'].' ';
+ echo '
'.($aAddressLine['isarea']=='t'?'Polygon':'Point').' ';
+ echo ',
~'.(round($aAddressLine['distance']*69,1)).' miles ';
+ if ($sOSMType) echo ',
'.$sOSMType.' '.$aAddressLine['osm_id'].' ';
+ echo ',
GOTO ';
+ echo ')';
+ echo '
';
+ }
+ }
+ echo '';
+ }
+
+// echo 'Other Parts: ';
+// echo 'Linked To: ';
+?>
+
+
+
diff --git a/lib/template/search-html.php b/lib/template/search-html.php
new file mode 100644
index 00000000..0952974d
--- /dev/null
+++ b/lib/template/search-html.php
@@ -0,0 +1,465 @@
+
+
+
+ OpenStreetMap Nominatim: Search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ';
+ }
+ foreach($aSearchResults as $iResNum => $aResult)
+ {
+ if ($aResult['aBoundingBox'])
+ {
+ echo '';
+ }
+ elseif (isset($aResult['zoom']))
+ {
+ echo '
';
+ }
+ else
+ {
+ echo '
';
+ }
+
+ echo ($aResult['icon']?'
':'');
+ echo '
'.$aResult['name'].' ';
+ echo '
'.round($aResult['lat'],3).','.round($aResult['lat'],3).' ';
+ echo '
'.$aResult['place_id'].' ';
+ echo '
('.ucwords(str_replace('_',' ',$aResult['type'])).') ';
+ echo '
(details ) ';
+ echo '
';
+ }
+ if (sizeof($aSearchResults))
+ {
+ if ($sMoreURL)
+ {
+ echo '
';
+ }
+ }
+ else
+ {
+ echo '
No search results found
';
+ }
+
+?>
+
Addresses and postcodes are approximate
+
+
+
+
+
+
+
+
Report a problem
+
Before reporting problems please read the user documentation and FAQ . If your problem relates to the address of a particular search result please use the 'details' link
+to check how the address was generated before reporting a problem.
+
Please use trac.openstreetmap.org to report problems
+making sure to set
+the component to 'nominatim'. You can search for existing bug reports here .
+
Please ensure that you include a full description of the problem, including the search query that you used, the problem with the result and, if
+the problem relates to missing data, the osm id of the item that is missing. Problems that contain enough detail are likely to get looked at before ones that
+require significant research!
+
+
+
+
+
+
+
+
+
diff --git a/lib/template/search-json.php b/lib/template/search-json.php
new file mode 100644
index 00000000..8950f14c
--- /dev/null
+++ b/lib/template/search-json.php
@@ -0,0 +1,65 @@
+ $aPointDetails)
+ {
+ $aPlace = array(
+ 'place_id'=>$aPointDetails['place_id'],
+ 'licence'=>"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.",
+ );
+
+ $sOSMType = ($aPointDetails['osm_type'] == 'N'?'node':($aPointDetails['osm_type'] == 'W'?'way':($aPointDetails['osm_type'] == 'R'?'relation':'')));
+ if ($sOSMType)
+ {
+ $aPlace['osm_type'] = $sOSMType;
+ $aPlace['osm_id'] = $aPointDetails['osm_id'];
+ }
+
+ if (isset($aPointDetails['aBoundingBox']))
+ {
+ $aPlace['boundingbox'] = array(
+ $aPointDetails['aBoundingBox'][0],
+ $aPointDetails['aBoundingBox'][1],
+ $aPointDetails['aBoundingBox'][2],
+ $aPointDetails['aBoundingBox'][3]);
+
+ if (isset($aPointDetails['aPolyPoints']) && $bShowPolygons)
+ {
+ $aPlace['polygonpoints'] = $aPointDetails['aPolyPoints'];
+ }
+ }
+
+ if (isset($aPointDetails['zoom']))
+ {
+ $aPlace['zoom'] = $aPointDetails['zoom'];
+ }
+
+ $aPlace['lat'] = $aPointDetails['lat'];
+ $aPlace['lon'] = $aPointDetails['lon'];
+ $aPlace['display_name'] = $aPointDetails['name'];
+
+ $aPlace['class'] = $aPointDetails['class'];
+ $aPlace['type'] = $aPointDetails['type'];
+ if ($aPointDetails['icon'])
+ {
+ $aPlace['icon'] = $aPointDetails['icon'];
+ }
+
+ if (isset($aPointDetails['address']))
+ {
+ $aPlace['address'] = $aPointDetails['address'];
+ }
+
+ $aFilteredPlaces[] = $aPlace;
+ }
+
+ if (isset($_GET['json_callback']) && preg_match('/^[-A-Za-z0-9:_.]+$/',$_GET['json_callback']))
+ {
+ echo $_GET['json_callback'].'('.javascript_renderData($aFilteredPlaces).')';
+ }
+ else
+ {
+ echo javascript_renderData($aFilteredPlaces);
+ }
diff --git a/lib/template/search-jsonv2.php b/lib/template/search-jsonv2.php
new file mode 100644
index 00000000..7dd4b334
--- /dev/null
+++ b/lib/template/search-jsonv2.php
@@ -0,0 +1,65 @@
+ $aPointDetails)
+ {
+ $aPlace = array(
+ 'place_id'=>$aPointDetails['place_id'],
+ 'licence'=>"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.",
+ );
+
+ $sOSMType = ($aPointDetails['osm_type'] == 'N'?'node':($aPointDetails['osm_type'] == 'W'?'way':($aPointDetails['osm_type'] == 'R'?'relation':'')));
+ if ($sOSMType)
+ {
+ $aPlace['osm_type'] = $sOSMType;
+ $aPlace['osm_id'] = $aPointDetails['osm_id'];
+ }
+
+ if (isset($aPointDetails['aBoundingBox']))
+ {
+ $aPlace['boundingbox'] = array(
+ $aPointDetails['aBoundingBox'][0],
+ $aPointDetails['aBoundingBox'][1],
+ $aPointDetails['aBoundingBox'][2],
+ $aPointDetails['aBoundingBox'][3]);
+
+ if (isset($aPointDetails['aPolyPoints']) && $bShowPolygons)
+ {
+ $aPlace['polygonpoints'] = $aPointDetails['aPolyPoints'];
+ }
+ }
+
+ if (isset($aPointDetails['zoom']))
+ {
+ $aPlace['zoom'] = $aPointDetails['zoom'];
+ }
+
+ $aPlace['lat'] = $aPointDetails['lat'];
+ $aPlace['lon'] = $aPointDetails['lon'];
+ $aPlace['display_name'] = $aPointDetails['name'];
+
+ $aPlace['category'] = $aPointDetails['class'];
+ $aPlace['type'] = $aPointDetails['type'];
+ if ($aPointDetails['icon'])
+ {
+ $aPlace['icon'] = $aPointDetails['icon'];
+ }
+
+ if (isset($aPointDetails['address']))
+ {
+ $aPlace['address'] = $aPointDetails['address'];
+ }
+
+ $aFilteredPlaces[] = $aPlace;
+ }
+
+ if (isset($_GET['json_callback']) && preg_match('/^[-A-Za-z0-9:_.]+$/',$_GET['json_callback']))
+ {
+ echo $_GET['json_callback'].'('.javascript_renderData($aFilteredPlaces).')';
+ }
+ else
+ {
+ echo javascript_renderData($aFilteredPlaces);
+ }
diff --git a/lib/template/search-xml.php b/lib/template/search-xml.php
new file mode 100644
index 00000000..3d011b39
--- /dev/null
+++ b/lib/template/search-xml.php
@@ -0,0 +1,87 @@
+\n";
+
+ echo "
\n";
+
+ foreach($aSearchResults as $iResNum => $aResult)
+ {
+ echo "";
+ foreach($aResult['address'] as $sKey => $sValue)
+ {
+ $sKey = str_replace(' ','_',$sKey);
+ echo "<$sKey>";
+ echo htmlspecialchars($sValue);
+ echo "$sKey>";
+ }
+
+ echo " ";
+ }
+ else
+ {
+ echo "/>";
+ }
+ }
+
+ echo " ";