#!/bin/bash
mkdir -p dist/assets/
-rsync --quiet --recursive src/assets/css/ dist/assets/css/
+rsync --quiet --recursive src/assets/css/ dist/assets/css/
rsync --quiet --recursive src/assets/images/ dist/assets/images/
mkdir -p dist/assets/js/
-cat src/assets/js/base.js src/assets/js/detailpage.js src/assets/js/searchpage.js src/assets/js/deletable.js src/assets/js/polygons.js > dist/assets/js/nominatim-ui.js
+cat src/assets/js/base.js \
+ src/assets/js/detailpage.js \
+ src/assets/js/searchpage.js \
+ src/assets/js/deletable.js \
+ src/assets/js/polygons.js \
+ src/assets/js/controller.js > dist/assets/js/nominatim-ui.js
-rsync --quiet node_modules/jquery/dist/jquery.min.js dist/assets/js/
-rsync --quiet node_modules/leaflet/dist/leaflet.js dist/assets/js/
+rsync --quiet node_modules/jquery/dist/jquery.min.js dist/assets/js/
+rsync --quiet node_modules/leaflet/dist/leaflet.js dist/assets/js/
rsync --quiet node_modules/leaflet/dist/leaflet.js.map dist/assets/js/
-rsync --quiet node_modules/leaflet/dist/leaflet.css dist/assets/css/
-rsync --quiet node_modules/leaflet/dist/images/* dist/assets/css/images/
+rsync --quiet node_modules/leaflet/dist/leaflet.css dist/assets/css/
+rsync --quiet node_modules/leaflet/dist/images/* dist/assets/css/images/
-rsync --quiet node_modules/leaflet-minimap/dist/Control.MiniMap.min.js dist/assets/js/
+rsync --quiet node_modules/leaflet-minimap/dist/Control.MiniMap.min.js dist/assets/js/
rsync --quiet node_modules/leaflet-minimap/dist/Control.MiniMap.min.css dist/assets/css/
-rsync --quiet node_modules/leaflet-minimap/dist/images/* dist/assets/css/images/
+rsync --quiet node_modules/leaflet-minimap/dist/images/* dist/assets/css/images/
rsync --quiet node_modules/bootstrap/dist/js/bootstrap.bundle.min.js* dist/assets/js/
-rsync --quiet node_modules/bootstrap/dist/css/bootstrap.min.css dist/assets/css/
+rsync --quiet node_modules/bootstrap/dist/css/bootstrap.min.css dist/assets/css/
rsync --quiet node_modules/handlebars/dist/handlebars.min.js dist/assets/js/
-rsync --quiet node_modules/@ungap/url-search-params/min.js dist/assets/js/url-search-params.js
-rsync --quiet src/templates/*.hbs dist/
+rsync --quiet node_modules/@ungap/url-search-params/min.js dist/assets/js/url-search-params.js
rsync --quiet src/*.js dist/
{
- sed -e 's/BODYID/search-page/' src/layout.html | grep -v '</body>' | grep -v '</html>'
+ cat src/layout.html | grep -v '</body>' | grep -v '</html>'
echo '<script id="searchpage-template" type="text/x-handlebars-template">'
cat src/templates/searchpage.hbs
echo '</script>'
- echo '</body>'
- echo '</html>'
-} > dist/search.html
-{
- sed -e 's/BODYID/reverse-page/' src/layout.html | grep -v '</body>' | grep -v '</html>'
echo '<script id="reversepage-template" type="text/x-handlebars-template">'
cat src/templates/reversepage.hbs
echo '</script>'
- echo '</body>'
- echo '</html>'
-} > dist/reverse.html
-{
- sed -e 's/BODYID/details-page/' src/layout.html | grep -v '</body>' | grep -v '</html>'
echo '<script id="detailspage-template" type="text/x-handlebars-template">'
cat src/templates/detailspage.hbs
echo '</script>'
+
echo '<script id="detailspage-index-template" type="text/x-handlebars-template">'
cat src/templates/detailspage-index.hbs
echo '</script>'
- echo '</body>'
- echo '</html>'
-} > dist/details.html
-{
- sed -e 's/BODYID/deletable-page/' src/layout.html | grep -v '</body>' | grep -v '</html>'
echo '<script id="deletable-template" type="text/x-handlebars-template">'
cat src/templates/deletable.hbs
echo '</script>'
- echo '</body>'
- echo '</html>'
-} > dist/deletable.html
-{
- sed -e 's/BODYID/polygons-page/' src/layout.html | grep -v '</body>' | grep -v '</html>'
echo '<script id="polygons-template" type="text/x-handlebars-template">'
cat src/templates/polygons.hbs
echo '</script>'
+
echo '</body>'
echo '</html>'
-} > dist/polygons.html
+} > dist/search.html
+
+cp dist/search.html dist/reverse.html
+cp dist/search.html dist/details.html
+cp dist/search.html dist/deletable.html
+cp dist/search.html dist/polygons.html
cp src/index.html dist/
margin: 1em;
}
+#loading {
+ display: none;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ background-color: #eee;
+ z-index: 100;
+ padding: 10px;
+ text-align: center;
+}
+
#error-overlay {
text-align: center;
font-style: italic;
}
-$(document).ajaxError(function (event, jqXHR, ajaxSettings/* , thrownError */) {
- // console.log(thrownError);
- // console.log(ajaxSettings);
- var url = ajaxSettings.url;
- show_error('Error fetching results from <a href="' + url + '">' + url + '</a>');
-});
-
-
jQuery(document).ready(function () {
hide_error();
+
+ $(document).ajaxStart(function () {
+ $('#loading').fadeIn('fast');
+ }).ajaxComplete(function () {
+ $('#loading').fadeOut('fast');
+ }).ajaxError(function (event, jqXHR, ajaxSettings/* , thrownError */) {
+ // console.log(thrownError);
+ // console.log(ajaxSettings);
+ var url = ajaxSettings.url;
+ show_error('Error fetching results from <a href="' + url + '">' + url + '</a>');
+ });
});
// *********************************************************
// DETAILS PAGE
}
-jQuery(document).ready(function () {
- if (!$('#details-page').length) { return; }
+function details_page_load() {
var search_params = new URLSearchParams(window.location.search);
// var place_id = search_params.get('place_id');
alert('invalid input');
}
});
-});
+}
// *********************************************************
// FORWARD/REVERSE SEARCH PAGE
+function search_page_load() {
-jQuery(document).ready(function () {
- //
- if (!$('#search-page,#reverse-page').length) { return; }
-
- var is_reverse_search = !!($('#reverse-page').length);
+ var is_reverse_search = window.location.pathname.match(/reverse/);
var search_params = new URLSearchParams(window.location.search);
);
}
}
-});
+}
+
+
// *********************************************************
// DELETABLE PAGE
// *********************************************************
-jQuery(document).ready(function () {
- if (!$('#deletable-page').length) { return; }
+function deletable_page_load() {
var api_request_params = {
format: 'json'
update_data_date();
});
-});
+}
// *********************************************************
// BROKEN POLYGON PAGE
// *********************************************************
-jQuery(document).ready(function () {
- if (!$('#polygons-page').length) { return; }
-
+function polygons_page_load() {
+ //
var api_request_params = {
format: 'json'
};
update_data_date();
});
+}
+jQuery(document).ready(function () {
+ var myhistory = [];
+
+ function parse_url_and_load_page() {
+ // 'search', 'reverse', 'details'
+ var pagename = window.location.pathname.replace('.html', '').replace(/^\//, '');
+
+ $('body').attr('id', pagename + '-page');
+
+ if (pagename === 'search' || pagename === 'reverse') {
+ search_page_load();
+ } else if (pagename === 'details') {
+ details_page_load();
+ } else if (pagename === 'deletable') {
+ deletable_page_load();
+ } else if (pagename === 'polygons') {
+ polygons_page_load();
+ }
+ }
+
+ parse_url_and_load_page();
+
+ // load page after form submit
+ $(document).on('submit', 'form', function (e) {
+ e.preventDefault();
+
+ window.history.pushState(myhistory, '', '?' + $(this).serialize());
+
+ parse_url_and_load_page();
+ });
+
+ // load page after click on relative URL
+ $(document).on('click', 'a', function (e) {
+ var target_url = $(this).attr('href');
+ if (target_url && target_url.match(/^http/)) return;
+ if (target_url && !target_url.match(/\.html/)) return;
+
+ e.preventDefault();
+
+ window.history.pushState(myhistory, '', target_url);
+
+ parse_url_and_load_page();
+ });
+
+ // deal with back-button and other user action
+ window.onpopstate = function () {
+ parse_url_and_load_page();
+ };
});
+
+++ /dev/null
-<div class="container">
- <div class="row">
- <div class="col-sm-12">
- <h1>Deletable</h1>
-
- <p>
- {{aPolygons.length}} objects have been deleted in OSM but are still in the Nominatim database.
- </p>
-
- <table class="table table-striped table-hover">
- <thead>
- <th>Place id</th>
- <th>Country Code</th>
- <th>Name</th>
- <th>OSM id</th>
- <th>OSM type</th>
- <th>Class</th>
- <th>Type</th>
- </thead>
- <tbody>
- {{#each aPolygons}}
- <tr>
- <td>{{detailsLink this place_id}}</td>
- <td>{{country_code}}</td>
- <td>{{name}}</td>
- <td>{{osmLink this}}</td>
- <td>{{osm_type}}</td>
- <td>{{class}}</td>
- <td>{{type}}</td>
- </tr>
- {{/each}}
- </tbody>
- </table>
-
-
- </div>
- </div>
-</div
-
<link href="assets/css/search.css" rel="stylesheet" type="text/css" />
<link href="assets/css/details.css" rel="stylesheet" type="text/css" />
</head>
-<body id="deletable-page">
+<body id="BODYID">
- <div id="error-overlay">
- You need Javascript enabled to view this page.
- </div>
+ <div id="error-overlay"></div>
<header class="container-fluid">
<div class="row">
</div>
</div>
<div id="last-updated" class="col-4 text-center">
+ <div id="loading">loading...</div>
Data from <a id="api-request-link" href="">API request</a>
<br>
Data last updated:
<script src="handlebar_helpers.js"></script>
<script src="assets/js/nominatim-ui.js"></script>
+<script id="searchpage-template" type="text/x-handlebars-template">
+{{#*inline "partial_one_result"}}
+ <div class="result" data-position="{{iResNum}}">
+ {{formatMapIcon aResult}}
+
+ <span class="name">{{aResult.display_name}}</span>
+ <span class="type">({{formatLabel aResult}})</span>
+ <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
+
+ <a class="details btn btn-outline-secondary btn-sm"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ </div>
+{{/inline}}
+
+<div class="top-bar">
+ <ul class="nav nav-tabs">
+ <li class="nav-item">
+ <a class="nav-link {{#unless hStructured}}active{{/unless}}" data-toggle="tab" href="#simple">simple</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link {{#if hStructured}}active{{/if}}" data-toggle="tab" href="#structured">structured</a>
+ </li>
+ <div class="search-type-link">
+ <a id="switch-to-reverse" href="/reverse.html">reverse search</a>
+ </div>
+ </ul>
+ <div class="tab-content p-2">
+ <div class="tab-pane {{#unless hStructured}}active{{/unless}}" id="simple" role="tabpanel">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <input id="q"
+ name="q"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="Search"
+ value="{{sQuery}}" />
+
+ <div class="form-group search-button-group">
+ <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
+ <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+ <div class="form-check form-check-inline">
+ <input type="checkbox" class="form-check-input"
+ id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+ <label class="form-check-label" for="use_viewbox">apply viewbox</label>
+ </div>
+ </div>
+ </form>
+ </div>
+ <div class="tab-pane {{#if hStructured}}active{{/if}}" id="structured" role="tabpanel">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <input name="street" type="text" class="form-control form-control-sm mr-1"
+ placeholder="House number/Street"
+ value="{{hStructured.street}}" />
+ <input name="city" type="text" class="form-control form-control-sm mr-1"
+ placeholder="City"
+ value="{{hStructured.city}}" />
+ <input id="county" name="county" type="text" class="form-control form-control-sm mr-1"
+ placeholder="County"
+ value="{{hStructured.county}}" />
+ <input name="state" type="text" class="form-control form-control-sm mr-1"
+ placeholder="State"
+ value="{{hStructured.state}}" />
+ <input name="country" type="text" class="form-control form-control-sm mr-1"
+ placeholder="Country"
+ value="{{hStructured.country}}" />
+ <input name="postalcode" type="text" class="form-control form-control-sm mr-1"
+ placeholder="Postal Code"
+ value="{{hStructured.postalcode}}" />
+
+ <div class="form-group search-button-group">
+ <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
+ <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+ <div class="form-check form-check-inline">
+ <input type="checkbox" class="form-check-input"
+ id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+ <label class="form-check-label" for="use_viewbox">apply viewbox</label>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div> <!-- /tab-content -->
+</div> <!-- /top-bar -->
+
+<div id="content">
+
+ {{#if sQuery}}
+ <div id="searchresults" class="sidebar">
+ {{#each aSearchResults as |aResult|}}
+ {{>partial_one_result iResNum=@index aResult=aResult env=env}}
+ {{/each}}
+
+ {{#if aSearchResults}}
+ {{#if sMoreURL}}
+ <div class="more">
+ <a class="btn btn-primary" href="{{sMoreURL}}">
+ Search for more results
+ </a>
+ </div>
+ {{/if}}
+ {{else}}
+ <div class="noresults">No search results found</div>
+ {{/if}}
+ </div>
+
+ {{else}}
+
+ <div id="intro" class="sidebar">
+ <h2>Welcome to Nominatim</h2>
+
+ <p>
+ Nominatim is a search engine for
+ <a href="https://www.openstreetmap.org">OpenStreetMap</a> data. This
+ is the debugging interface. You may search for a name or address
+ (forward search) or look up data by its geographic coordinate (reverse
+ search). Each result comes with a link to a details page where you
+ can inspect what data about the object is saved in the database and
+ investigate how the address of the object has been computed.
+ </p>
+
+ For more information visit the
+ <a href="https://nominatim.org">Nominatim home page</a>.
+ </div>
+
+ {{/if}}
+
+ <div id="map-wrapper">
+ <div id="map-position">
+ <div id="map-position-inner"></div>
+ <div id="map-position-close"><a href="#">hide</a></div>
+ </div>
+ <div id="map"></div>
+ </div>
+</div>
+</script>
+<script id="reversepage-template" type="text/x-handlebars-template">
+
+{{#*inline "partial_one_result"}}
+ <div class="result" data-position="{{iResNum}}">
+ {{formatMapIcon aResult}}
+
+ <span class="name">{{aResult.display_name}}</span>
+ <span class="type">{{formatLabel aResult}}</span>
+ <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
+
+ <a class="details btn btn-outline-secondary btn-sm"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ </div>
+{{/inline}}
+
+<div class="top-bar">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <div class="form-group">
+ <input name="format" type="hidden" value="html">
+ <label>lat</label>
+ <input name="lat"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="latitude"
+ value="{{fLat}}" />
+ <a id="switch-coords" class="btn btn-outline-secondary btn-sm" title="switch lat and lon"><></a>
+ <label>lon</label>
+ <input name="lon"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="longitude"
+ value="{{fLon}}" />
+ <label>max zoom</label>
+ <select name="zoom" class="form-control form-control-sm" value="{{iZoom}}">
+ {{zoomLevels iZoom}}
+ </select>
+ <button type="submit" class="btn btn-primary btn-sm mx-1">
+ Search
+ </button>
+ </div>
+ <div class="search-type-link">
+ <a href="/search.html">forward search</a>
+ </div>
+ </form>
+</div>
+
+<div id="content">
+ {{#if aPlace}}
+ <div id="searchresults" class="sidebar">
+ {{>partial_one_result iResNum=0 aResult=aPlace env=env}}
+ </div>
+ {{else}}
+ <div id="intro" class="sidebar">
+ Search for coordinates or click anywhere on the map.
+ </div>
+ {{/if}}
+
+ <div id="map-wrapper">
+ <div id="map-position">
+ <div id="map-position-inner"></div>
+ <div id="map-position-close"><a href="#">hide</a></div>
+ </div>
+ <div id="map"></div>
+ </div>
+</div>
+</script>
+<script id="detailspage-template" type="text/x-handlebars-template">
+
+{{#*inline "partial_details_one_row"}}
+ <tr class="{{#unless this.isaddress}}notused{{/unless}}">
+ <td class="name">
+ {{#if this.localname}}
+ {{this.localname}}
+ {{else}}
+ <span class="noname">No Name</span>
+ {{/if}}
+ </td>
+ <td>{{formatPlaceType this}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{this.rank_address}}</td>
+ <td>{{formatAdminLevel this.admin_level}}</td>
+ <td>{{formatDistance this.distance}}</td>
+ <td>{{detailsPermaLink this 'details >'}}</td>
+ </tr>
+{{/inline}}
+
+{{#*inline "partial_details_keyword_one_row"}}
+ <tr>
+ <td>{{formatKeywordToken this.token}}</td>
+ {{#if this.id}}
+ <td>word id: {{this.id}}</td>
+ {{/if}}
+ </tr>
+{{/inline}}
+
+
+{{#*inline "partial_h2"}}
+ <tr class="all-columns"><td colspan="6"><h2>{{this}}</h2></td></tr>
+{{/inline}}
+
+{{#*inline "partial_h3"}}
+ <tr class="all-columns"><td colspan="6"><h3>{{this}}</h3></td></tr>
+{{/inline}}
+
+<div class="container">
+ <div class="row">
+ <div class="col-sm-10">
+ <h1>
+ {{aPlace.localname}}
+ <small>{{detailsPermaLink aPlace 'link to this page'}}</small>
+ </h1>
+ </div>
+ <div class="col-sm-2 text-right">
+ {{formatMapIcon aPlace}}
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-6">
+ <table id="locationdetails" class="table table-striped">
+ <tr>
+ <td>Name</td>
+ <td>
+ {{#each aPlace.names}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ <tr>
+ <td>Type</td>
+ <td>{{aPlace.category}}:{{aPlace.type}}</td>
+ </tr>
+ <tr>
+ <td>Last Updated</td>
+ <td>{{aPlace.indexed_date}}</td>
+ </tr>
+ <tr>
+ <td>Admin Level</td>
+ <td>{{aPlace.admin_level}}</td>
+ </tr>
+ <tr>
+ <td>Rank</td>
+ <td>{{formatSearchRank aPlace.rank_search}}</td>
+ </tr>
+ {{#if aPlace.calculated_importance}}
+ <tr>
+ <td>Importance</td>
+ <td>
+ {{aPlace.calculated_importance}}
+ {{#unless aPlace.importance}} (estimated){{/unless}}
+ </td>
+ </tr>
+ {{/if}}
+ <tr>
+ <td>Coverage</td>
+ <td>{{coverageType aPlace}}</td>
+ </tr>
+ <tr>
+ <td>Centre Point (lat,lon)</td>
+ <td>
+ {{aPlace.centroid.coordinates.[1]}},{{aPlace.centroid.coordinates.[0]}}
+ </td>
+ </tr>
+ <tr>
+ <td>OSM</td>
+ <td>{{osmLink aPlace}}
+ </tr>
+ <tr>
+ <td>
+ Place Id
+ (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">on this server</a>)
+ </td>
+ <td>{{aPlace.place_id}}</td>
+ </tr>
+ {{#if aPlace.calculated_wikipedia}}
+ <tr>
+ <td>Wikipedia Calculated</td>
+ <td>{{wikipediaLink aPlace}}</td>
+ </tr>
+ {{/if}}
+ <tr>
+ <td>Computed Postcode</td>
+ <td>{{aPlace.calculated_postcode}}</td>
+ </tr>
+ <tr>
+ <td>Address Tags</td>
+ <td>
+ {{#each aPlace.addresstags}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ <tr>
+ <td>Extra Tags</td>
+ <td>
+ {{#each aPlace.extratags}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div class="col-md-6">
+ <div id="map"></div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-12">
+ <h2>Address</h2>
+ <table id="address" class="table table-striped table-small">
+ <thead>
+ <tr>
+ <th>Local name</th>
+ <th>Type</th>
+ <th>OSM</th>
+ <th>Address rank</th>
+ <th>Admin level</th>
+ <th>Distance</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#if aPlace.address}}
+ {{#each aPlace.address}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{#if aPlace.linked_places}}
+ {{> partial_h2 'Linked Places'}}
+ {{#each aPlace.linked_places}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{#if aPlace.keywords}}
+ {{> partial_h2 'Name Keywords'}}
+ {{#each aPlace.keywords.name}}
+ {{> partial_details_keyword_one_row}}
+ {{/each}}
+
+ {{> partial_h2 'Address Keywords'}}
+ {{#each aPlace.keywords.address}}
+ {{> partial_details_keyword_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{> partial_h2 'Parent Of'}}
+ {{#if aPlace.hierarchy}}
+
+ {{#each aPlace.hierarchy as |lines type|}}
+ {{> partial_h3 type}}
+ {{#each lines}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/each}}
+ {{else}}
+ <tr>
+ <td>
+ <a class="btn btn-outline-secondary btn-sm"
+ href="{{base_url}}&hierarchy=1">display child places</a>
+ </td>
+ </tr>
+ {{/if}}
+ {{tooManyHierarchyLinesWarning aPlace}}
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+
+</script>
+<script id="detailspage-index-template" type="text/x-handlebars-template">
+<div class="container" id="details-index-page">
+ <div class="row">
+ <div class="col-md-12">
+
+ <h1>Show details for place</h1>
+
+ <div class="search-form">
+ <h4>Search by place id</h4>
+
+ <form class="form-inline" action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[0-9]+$"
+ name="place_id"
+ placeholder="12345" />
+ <input type="submit"
+ class="btn btn-primary btn-sm"
+ value="Show" />
+ </form>
+ </div>
+
+ <div class="search-form">
+ <h4>Search by OSM type and OSM id</h4>
+
+ <form id="form-by-type-and-id"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[NWR][0-9]+$"
+ placeholder="N123 or W123 or R123" />
+ <input type="hidden" name="osmtype" />
+ <input type="hidden" name="osmid" />
+ <input type="submit" class="btn btn-primary btn-sm" value="Show" />
+ </form>
+ </div>
+
+ <div class="search-form">
+ <h4>Search by openstreetmap.org URL</h4>
+
+ <form id="form-by-osm-url"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern=".*openstreetmap.*"
+ placeholder="https://www.openstreetmap.org/relation/123" />
+ <input type="hidden" name="osmtype" />
+ <input type="hidden" name="osmid" />
+ <input type="submit" class="btn btn-primary btn-sm" value="Show" />
+ </form>
+ </div>
+
+ </div>
+ </div>
+</div></script>
<script id="deletable-template" type="text/x-handlebars-template">
<div class="container">
<div class="row">
</div>
</div
+</script>
+<script id="polygons-template" type="text/x-handlebars-template">
+<div class="container">
+ <div class="row">
+ <div class="col-sm-12">
+ <h1>Broken polygons</h1>
+
+ <p>
+ Total number of broken polygons: {{aPolygons.length}}.
+ </p>
+
+ <table class="table table-striped table-hover">
+ <thead>
+ <th>OSM type</th>
+ <th>OSM id</th>
+ <th>Class</th>
+ <th>Type</th>
+ <th>Name</th>
+ <th>Country Code</th>
+ <th>Error message</th>
+ <th>Updated</th>
+ <th> </th>
+ </thead>
+ <tbody>
+ {{#each aPolygons}}
+ <tr>
+ <td>{{osm_type}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{class}}</td>
+ <td>{{type}}</td>
+ <td>{{name}}</td>
+ <td>{{country_code}}</td>
+ <td>{{errormessage}}</td>
+ <td>{{updated}}</td>
+ <td>
+ <a href="http://localhost:8111/import?url=https://www.openstreetmap.org/api/0.6/{{formatOSMType osm_type}}/{{osm_id}}/full" target="josm">josm</a>
+ </td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div
+
</script>
</body>
</html>
<link href="assets/css/search.css" rel="stylesheet" type="text/css" />
<link href="assets/css/details.css" rel="stylesheet" type="text/css" />
</head>
-<body id="details-page">
+<body id="BODYID">
- <div id="error-overlay">
- You need Javascript enabled to view this page.
- </div>
+ <div id="error-overlay"></div>
<header class="container-fluid">
<div class="row">
</div>
</div>
<div id="last-updated" class="col-4 text-center">
+ <div id="loading">loading...</div>
Data from <a id="api-request-link" href="">API request</a>
<br>
Data last updated:
<script src="handlebar_helpers.js"></script>
<script src="assets/js/nominatim-ui.js"></script>
+<script id="searchpage-template" type="text/x-handlebars-template">
+{{#*inline "partial_one_result"}}
+ <div class="result" data-position="{{iResNum}}">
+ {{formatMapIcon aResult}}
+
+ <span class="name">{{aResult.display_name}}</span>
+ <span class="type">({{formatLabel aResult}})</span>
+ <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
+
+ <a class="details btn btn-outline-secondary btn-sm"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ </div>
+{{/inline}}
+
+<div class="top-bar">
+ <ul class="nav nav-tabs">
+ <li class="nav-item">
+ <a class="nav-link {{#unless hStructured}}active{{/unless}}" data-toggle="tab" href="#simple">simple</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link {{#if hStructured}}active{{/if}}" data-toggle="tab" href="#structured">structured</a>
+ </li>
+ <div class="search-type-link">
+ <a id="switch-to-reverse" href="/reverse.html">reverse search</a>
+ </div>
+ </ul>
+ <div class="tab-content p-2">
+ <div class="tab-pane {{#unless hStructured}}active{{/unless}}" id="simple" role="tabpanel">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <input id="q"
+ name="q"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="Search"
+ value="{{sQuery}}" />
+
+ <div class="form-group search-button-group">
+ <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
+ <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+ <div class="form-check form-check-inline">
+ <input type="checkbox" class="form-check-input"
+ id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+ <label class="form-check-label" for="use_viewbox">apply viewbox</label>
+ </div>
+ </div>
+ </form>
+ </div>
+ <div class="tab-pane {{#if hStructured}}active{{/if}}" id="structured" role="tabpanel">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <input name="street" type="text" class="form-control form-control-sm mr-1"
+ placeholder="House number/Street"
+ value="{{hStructured.street}}" />
+ <input name="city" type="text" class="form-control form-control-sm mr-1"
+ placeholder="City"
+ value="{{hStructured.city}}" />
+ <input id="county" name="county" type="text" class="form-control form-control-sm mr-1"
+ placeholder="County"
+ value="{{hStructured.county}}" />
+ <input name="state" type="text" class="form-control form-control-sm mr-1"
+ placeholder="State"
+ value="{{hStructured.state}}" />
+ <input name="country" type="text" class="form-control form-control-sm mr-1"
+ placeholder="Country"
+ value="{{hStructured.country}}" />
+ <input name="postalcode" type="text" class="form-control form-control-sm mr-1"
+ placeholder="Postal Code"
+ value="{{hStructured.postalcode}}" />
+
+ <div class="form-group search-button-group">
+ <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
+ <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+ <div class="form-check form-check-inline">
+ <input type="checkbox" class="form-check-input"
+ id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+ <label class="form-check-label" for="use_viewbox">apply viewbox</label>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div> <!-- /tab-content -->
+</div> <!-- /top-bar -->
+
+<div id="content">
+
+ {{#if sQuery}}
+ <div id="searchresults" class="sidebar">
+ {{#each aSearchResults as |aResult|}}
+ {{>partial_one_result iResNum=@index aResult=aResult env=env}}
+ {{/each}}
+
+ {{#if aSearchResults}}
+ {{#if sMoreURL}}
+ <div class="more">
+ <a class="btn btn-primary" href="{{sMoreURL}}">
+ Search for more results
+ </a>
+ </div>
+ {{/if}}
+ {{else}}
+ <div class="noresults">No search results found</div>
+ {{/if}}
+ </div>
+
+ {{else}}
+
+ <div id="intro" class="sidebar">
+ <h2>Welcome to Nominatim</h2>
+
+ <p>
+ Nominatim is a search engine for
+ <a href="https://www.openstreetmap.org">OpenStreetMap</a> data. This
+ is the debugging interface. You may search for a name or address
+ (forward search) or look up data by its geographic coordinate (reverse
+ search). Each result comes with a link to a details page where you
+ can inspect what data about the object is saved in the database and
+ investigate how the address of the object has been computed.
+ </p>
+
+ For more information visit the
+ <a href="https://nominatim.org">Nominatim home page</a>.
+ </div>
+
+ {{/if}}
+
+ <div id="map-wrapper">
+ <div id="map-position">
+ <div id="map-position-inner"></div>
+ <div id="map-position-close"><a href="#">hide</a></div>
+ </div>
+ <div id="map"></div>
+ </div>
+</div>
+</script>
+<script id="reversepage-template" type="text/x-handlebars-template">
+
+{{#*inline "partial_one_result"}}
+ <div class="result" data-position="{{iResNum}}">
+ {{formatMapIcon aResult}}
+
+ <span class="name">{{aResult.display_name}}</span>
+ <span class="type">{{formatLabel aResult}}</span>
+ <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
+
+ <a class="details btn btn-outline-secondary btn-sm"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ </div>
+{{/inline}}
+
+<div class="top-bar">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <div class="form-group">
+ <input name="format" type="hidden" value="html">
+ <label>lat</label>
+ <input name="lat"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="latitude"
+ value="{{fLat}}" />
+ <a id="switch-coords" class="btn btn-outline-secondary btn-sm" title="switch lat and lon"><></a>
+ <label>lon</label>
+ <input name="lon"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="longitude"
+ value="{{fLon}}" />
+ <label>max zoom</label>
+ <select name="zoom" class="form-control form-control-sm" value="{{iZoom}}">
+ {{zoomLevels iZoom}}
+ </select>
+ <button type="submit" class="btn btn-primary btn-sm mx-1">
+ Search
+ </button>
+ </div>
+ <div class="search-type-link">
+ <a href="/search.html">forward search</a>
+ </div>
+ </form>
+</div>
+
+<div id="content">
+ {{#if aPlace}}
+ <div id="searchresults" class="sidebar">
+ {{>partial_one_result iResNum=0 aResult=aPlace env=env}}
+ </div>
+ {{else}}
+ <div id="intro" class="sidebar">
+ Search for coordinates or click anywhere on the map.
+ </div>
+ {{/if}}
+
+ <div id="map-wrapper">
+ <div id="map-position">
+ <div id="map-position-inner"></div>
+ <div id="map-position-close"><a href="#">hide</a></div>
+ </div>
+ <div id="map"></div>
+ </div>
+</div>
+</script>
<script id="detailspage-template" type="text/x-handlebars-template">
{{#*inline "partial_details_one_row"}}
</div>
</div>
</div></script>
+<script id="deletable-template" type="text/x-handlebars-template">
+<div class="container">
+ <div class="row">
+ <div class="col-sm-12">
+ <h1>Deletable</h1>
+
+ <p>
+ {{aPolygons.length}} objects have been deleted in OSM but are still in the Nominatim database.
+ </p>
+
+ <table class="table table-striped table-hover">
+ <thead>
+ <th>Place id</th>
+ <th>Country Code</th>
+ <th>Name</th>
+ <th>OSM id</th>
+ <th>OSM type</th>
+ <th>Class</th>
+ <th>Type</th>
+ </thead>
+ <tbody>
+ {{#each aPolygons}}
+ <tr>
+ <td>{{detailsLink this place_id}}</td>
+ <td>{{country_code}}</td>
+ <td>{{name}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{osm_type}}</td>
+ <td>{{class}}</td>
+ <td>{{type}}</td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div
+
+</script>
+<script id="polygons-template" type="text/x-handlebars-template">
+<div class="container">
+ <div class="row">
+ <div class="col-sm-12">
+ <h1>Broken polygons</h1>
+
+ <p>
+ Total number of broken polygons: {{aPolygons.length}}.
+ </p>
+
+ <table class="table table-striped table-hover">
+ <thead>
+ <th>OSM type</th>
+ <th>OSM id</th>
+ <th>Class</th>
+ <th>Type</th>
+ <th>Name</th>
+ <th>Country Code</th>
+ <th>Error message</th>
+ <th>Updated</th>
+ <th> </th>
+ </thead>
+ <tbody>
+ {{#each aPolygons}}
+ <tr>
+ <td>{{osm_type}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{class}}</td>
+ <td>{{type}}</td>
+ <td>{{name}}</td>
+ <td>{{country_code}}</td>
+ <td>{{errormessage}}</td>
+ <td>{{updated}}</td>
+ <td>
+ <a href="http://localhost:8111/import?url=https://www.openstreetmap.org/api/0.6/{{formatOSMType osm_type}}/{{osm_id}}/full" target="josm">josm</a>
+ </td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div
+
+</script>
</body>
</html>
+++ /dev/null
-<div class="container" id="details-index-page">
- <div class="row">
- <div class="col-md-12">
-
- <h1>Show details for place</h1>
-
- <div class="search-form">
- <h4>Search by place id</h4>
-
- <form class="form-inline" action="details.html">
- <input type="edit"
- class="form-control input-sm"
- pattern="^[0-9]+$"
- name="place_id"
- placeholder="12345" />
- <input type="submit"
- class="btn btn-primary btn-sm"
- value="Show" />
- </form>
- </div>
-
- <div class="search-form">
- <h4>Search by OSM type and OSM id</h4>
-
- <form id="form-by-type-and-id"
- class="form-inline"
- action="details.html">
- <input type="edit"
- class="form-control input-sm"
- pattern="^[NWR][0-9]+$"
- placeholder="N123 or W123 or R123" />
- <input type="hidden" name="osmtype" />
- <input type="hidden" name="osmid" />
- <input type="submit" class="btn btn-primary btn-sm" value="Show" />
- </form>
- </div>
-
- <div class="search-form">
- <h4>Search by openstreetmap.org URL</h4>
-
- <form id="form-by-osm-url"
- class="form-inline"
- action="details.html">
- <input type="edit"
- class="form-control input-sm"
- pattern=".*openstreetmap.*"
- placeholder="https://www.openstreetmap.org/relation/123" />
- <input type="hidden" name="osmtype" />
- <input type="hidden" name="osmid" />
- <input type="submit" class="btn btn-primary btn-sm" value="Show" />
- </form>
- </div>
-
- </div>
- </div>
-</div>
\ No newline at end of file
+++ /dev/null
-
-{{#*inline "partial_details_one_row"}}
- <tr class="{{#unless this.isaddress}}notused{{/unless}}">
- <td class="name">
- {{#if this.localname}}
- {{this.localname}}
- {{else}}
- <span class="noname">No Name</span>
- {{/if}}
- </td>
- <td>{{formatPlaceType this}}</td>
- <td>{{osmLink this}}</td>
- <td>{{this.rank_address}}</td>
- <td>{{formatAdminLevel this.admin_level}}</td>
- <td>{{formatDistance this.distance}}</td>
- <td>{{detailsPermaLink this 'details >'}}</td>
- </tr>
-{{/inline}}
-
-{{#*inline "partial_details_keyword_one_row"}}
- <tr>
- <td>{{formatKeywordToken this.token}}</td>
- {{#if this.id}}
- <td>word id: {{this.id}}</td>
- {{/if}}
- </tr>
-{{/inline}}
-
-
-{{#*inline "partial_h2"}}
- <tr class="all-columns"><td colspan="6"><h2>{{this}}</h2></td></tr>
-{{/inline}}
-
-{{#*inline "partial_h3"}}
- <tr class="all-columns"><td colspan="6"><h3>{{this}}</h3></td></tr>
-{{/inline}}
-
-<div class="container">
- <div class="row">
- <div class="col-sm-10">
- <h1>
- {{aPlace.localname}}
- <small>{{detailsPermaLink aPlace 'link to this page'}}</small>
- </h1>
- </div>
- <div class="col-sm-2 text-right">
- {{formatMapIcon aPlace}}
- </div>
- </div>
- <div class="row">
- <div class="col-md-6">
- <table id="locationdetails" class="table table-striped">
- <tr>
- <td>Name</td>
- <td>
- {{#each aPlace.names}}
- <div class="line">
- <span class="name">{{this}}</span> ({{@key}})
- </div>
- {{/each}}
- </td>
- </tr>
- <tr>
- <td>Type</td>
- <td>{{aPlace.category}}:{{aPlace.type}}</td>
- </tr>
- <tr>
- <td>Last Updated</td>
- <td>{{aPlace.indexed_date}}</td>
- </tr>
- <tr>
- <td>Admin Level</td>
- <td>{{aPlace.admin_level}}</td>
- </tr>
- <tr>
- <td>Rank</td>
- <td>{{formatSearchRank aPlace.rank_search}}</td>
- </tr>
- {{#if aPlace.calculated_importance}}
- <tr>
- <td>Importance</td>
- <td>
- {{aPlace.calculated_importance}}
- {{#unless aPlace.importance}} (estimated){{/unless}}
- </td>
- </tr>
- {{/if}}
- <tr>
- <td>Coverage</td>
- <td>{{coverageType aPlace}}</td>
- </tr>
- <tr>
- <td>Centre Point (lat,lon)</td>
- <td>
- {{aPlace.centroid.coordinates.[1]}},{{aPlace.centroid.coordinates.[0]}}
- </td>
- </tr>
- <tr>
- <td>OSM</td>
- <td>{{osmLink aPlace}}
- </tr>
- <tr>
- <td>
- Place Id
- (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">on this server</a>)
- </td>
- <td>{{aPlace.place_id}}</td>
- </tr>
- {{#if aPlace.calculated_wikipedia}}
- <tr>
- <td>Wikipedia Calculated</td>
- <td>{{wikipediaLink aPlace}}</td>
- </tr>
- {{/if}}
- <tr>
- <td>Computed Postcode</td>
- <td>{{aPlace.calculated_postcode}}</td>
- </tr>
- <tr>
- <td>Address Tags</td>
- <td>
- {{#each aPlace.addresstags}}
- <div class="line">
- <span class="name">{{this}}</span> ({{@key}})
- </div>
- {{/each}}
- </td>
- </tr>
- <tr>
- <td>Extra Tags</td>
- <td>
- {{#each aPlace.extratags}}
- <div class="line">
- <span class="name">{{this}}</span> ({{@key}})
- </div>
- {{/each}}
- </td>
- </tr>
- </table>
- </div>
- <div class="col-md-6">
- <div id="map"></div>
- </div>
- </div>
- <div class="row">
- <div class="col-md-12">
- <h2>Address</h2>
- <table id="address" class="table table-striped table-small">
- <thead>
- <tr>
- <th>Local name</th>
- <th>Type</th>
- <th>OSM</th>
- <th>Address rank</th>
- <th>Admin level</th>
- <th>Distance</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- {{#if aPlace.address}}
- {{#each aPlace.address}}
- {{> partial_details_one_row}}
- {{/each}}
- {{/if}}
-
- {{#if aPlace.linked_places}}
- {{> partial_h2 'Linked Places'}}
- {{#each aPlace.linked_places}}
- {{> partial_details_one_row}}
- {{/each}}
- {{/if}}
-
- {{#if aPlace.keywords}}
- {{> partial_h2 'Name Keywords'}}
- {{#each aPlace.keywords.name}}
- {{> partial_details_keyword_one_row}}
- {{/each}}
-
- {{> partial_h2 'Address Keywords'}}
- {{#each aPlace.keywords.address}}
- {{> partial_details_keyword_one_row}}
- {{/each}}
- {{/if}}
-
- {{> partial_h2 'Parent Of'}}
- {{#if aPlace.hierarchy}}
-
- {{#each aPlace.hierarchy as |lines type|}}
- {{> partial_h3 type}}
- {{#each lines}}
- {{> partial_details_one_row}}
- {{/each}}
- {{/each}}
- {{else}}
- <tr>
- <td>
- <a class="btn btn-outline-secondary btn-sm"
- href="{{base_url}}&hierarchy=1">display child places</a>
- </td>
- </tr>
- {{/if}}
- {{tooManyHierarchyLinesWarning aPlace}}
- </tbody>
- </table>
- </div>
- </div>
-</div>
-
+++ /dev/null
-<div class="container">
- <div class="row">
- <div class="col-sm-12">
- <h1>Broken polygons</h1>
-
- <p>
- Total number of broken polygons: {{aPolygons.length}}.
- </p>
-
- <table class="table table-striped table-hover">
- <thead>
- <th>OSM type</th>
- <th>OSM id</th>
- <th>Class</th>
- <th>Type</th>
- <th>Name</th>
- <th>Country Code</th>
- <th>Error message</th>
- <th>Updated</th>
- <th> </th>
- </thead>
- <tbody>
- {{#each aPolygons}}
- <tr>
- <td>{{osm_type}}</td>
- <td>{{osmLink this}}</td>
- <td>{{class}}</td>
- <td>{{type}}</td>
- <td>{{name}}</td>
- <td>{{country_code}}</td>
- <td>{{errormessage}}</td>
- <td>{{updated}}</td>
- <td>
- <a href="http://localhost:8111/import?url=https://www.openstreetmap.org/api/0.6/{{formatOSMType osm_type}}/{{osm_id}}/full" target="josm">josm</a>
- </td>
- </tr>
- {{/each}}
- </tbody>
- </table>
-
-
- </div>
- </div>
-</div
-
<link href="assets/css/search.css" rel="stylesheet" type="text/css" />
<link href="assets/css/details.css" rel="stylesheet" type="text/css" />
</head>
-<body id="polygons-page">
+<body id="BODYID">
- <div id="error-overlay">
- You need Javascript enabled to view this page.
- </div>
+ <div id="error-overlay"></div>
<header class="container-fluid">
<div class="row">
</div>
</div>
<div id="last-updated" class="col-4 text-center">
+ <div id="loading">loading...</div>
Data from <a id="api-request-link" href="">API request</a>
<br>
Data last updated:
<script src="handlebar_helpers.js"></script>
<script src="assets/js/nominatim-ui.js"></script>
+<script id="searchpage-template" type="text/x-handlebars-template">
+{{#*inline "partial_one_result"}}
+ <div class="result" data-position="{{iResNum}}">
+ {{formatMapIcon aResult}}
+
+ <span class="name">{{aResult.display_name}}</span>
+ <span class="type">({{formatLabel aResult}})</span>
+ <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
+
+ <a class="details btn btn-outline-secondary btn-sm"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ </div>
+{{/inline}}
+
+<div class="top-bar">
+ <ul class="nav nav-tabs">
+ <li class="nav-item">
+ <a class="nav-link {{#unless hStructured}}active{{/unless}}" data-toggle="tab" href="#simple">simple</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link {{#if hStructured}}active{{/if}}" data-toggle="tab" href="#structured">structured</a>
+ </li>
+ <div class="search-type-link">
+ <a id="switch-to-reverse" href="/reverse.html">reverse search</a>
+ </div>
+ </ul>
+ <div class="tab-content p-2">
+ <div class="tab-pane {{#unless hStructured}}active{{/unless}}" id="simple" role="tabpanel">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <input id="q"
+ name="q"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="Search"
+ value="{{sQuery}}" />
+
+ <div class="form-group search-button-group">
+ <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
+ <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+ <div class="form-check form-check-inline">
+ <input type="checkbox" class="form-check-input"
+ id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+ <label class="form-check-label" for="use_viewbox">apply viewbox</label>
+ </div>
+ </div>
+ </form>
+ </div>
+ <div class="tab-pane {{#if hStructured}}active{{/if}}" id="structured" role="tabpanel">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <input name="street" type="text" class="form-control form-control-sm mr-1"
+ placeholder="House number/Street"
+ value="{{hStructured.street}}" />
+ <input name="city" type="text" class="form-control form-control-sm mr-1"
+ placeholder="City"
+ value="{{hStructured.city}}" />
+ <input id="county" name="county" type="text" class="form-control form-control-sm mr-1"
+ placeholder="County"
+ value="{{hStructured.county}}" />
+ <input name="state" type="text" class="form-control form-control-sm mr-1"
+ placeholder="State"
+ value="{{hStructured.state}}" />
+ <input name="country" type="text" class="form-control form-control-sm mr-1"
+ placeholder="Country"
+ value="{{hStructured.country}}" />
+ <input name="postalcode" type="text" class="form-control form-control-sm mr-1"
+ placeholder="Postal Code"
+ value="{{hStructured.postalcode}}" />
+
+ <div class="form-group search-button-group">
+ <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
+ <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+ <div class="form-check form-check-inline">
+ <input type="checkbox" class="form-check-input"
+ id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+ <label class="form-check-label" for="use_viewbox">apply viewbox</label>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div> <!-- /tab-content -->
+</div> <!-- /top-bar -->
+
+<div id="content">
+
+ {{#if sQuery}}
+ <div id="searchresults" class="sidebar">
+ {{#each aSearchResults as |aResult|}}
+ {{>partial_one_result iResNum=@index aResult=aResult env=env}}
+ {{/each}}
+
+ {{#if aSearchResults}}
+ {{#if sMoreURL}}
+ <div class="more">
+ <a class="btn btn-primary" href="{{sMoreURL}}">
+ Search for more results
+ </a>
+ </div>
+ {{/if}}
+ {{else}}
+ <div class="noresults">No search results found</div>
+ {{/if}}
+ </div>
+
+ {{else}}
+
+ <div id="intro" class="sidebar">
+ <h2>Welcome to Nominatim</h2>
+
+ <p>
+ Nominatim is a search engine for
+ <a href="https://www.openstreetmap.org">OpenStreetMap</a> data. This
+ is the debugging interface. You may search for a name or address
+ (forward search) or look up data by its geographic coordinate (reverse
+ search). Each result comes with a link to a details page where you
+ can inspect what data about the object is saved in the database and
+ investigate how the address of the object has been computed.
+ </p>
+
+ For more information visit the
+ <a href="https://nominatim.org">Nominatim home page</a>.
+ </div>
+
+ {{/if}}
+
+ <div id="map-wrapper">
+ <div id="map-position">
+ <div id="map-position-inner"></div>
+ <div id="map-position-close"><a href="#">hide</a></div>
+ </div>
+ <div id="map"></div>
+ </div>
+</div>
+</script>
+<script id="reversepage-template" type="text/x-handlebars-template">
+
+{{#*inline "partial_one_result"}}
+ <div class="result" data-position="{{iResNum}}">
+ {{formatMapIcon aResult}}
+
+ <span class="name">{{aResult.display_name}}</span>
+ <span class="type">{{formatLabel aResult}}</span>
+ <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
+
+ <a class="details btn btn-outline-secondary btn-sm"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ </div>
+{{/inline}}
+
+<div class="top-bar">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <div class="form-group">
+ <input name="format" type="hidden" value="html">
+ <label>lat</label>
+ <input name="lat"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="latitude"
+ value="{{fLat}}" />
+ <a id="switch-coords" class="btn btn-outline-secondary btn-sm" title="switch lat and lon"><></a>
+ <label>lon</label>
+ <input name="lon"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="longitude"
+ value="{{fLon}}" />
+ <label>max zoom</label>
+ <select name="zoom" class="form-control form-control-sm" value="{{iZoom}}">
+ {{zoomLevels iZoom}}
+ </select>
+ <button type="submit" class="btn btn-primary btn-sm mx-1">
+ Search
+ </button>
+ </div>
+ <div class="search-type-link">
+ <a href="/search.html">forward search</a>
+ </div>
+ </form>
+</div>
+
+<div id="content">
+ {{#if aPlace}}
+ <div id="searchresults" class="sidebar">
+ {{>partial_one_result iResNum=0 aResult=aPlace env=env}}
+ </div>
+ {{else}}
+ <div id="intro" class="sidebar">
+ Search for coordinates or click anywhere on the map.
+ </div>
+ {{/if}}
+
+ <div id="map-wrapper">
+ <div id="map-position">
+ <div id="map-position-inner"></div>
+ <div id="map-position-close"><a href="#">hide</a></div>
+ </div>
+ <div id="map"></div>
+ </div>
+</div>
+</script>
+<script id="detailspage-template" type="text/x-handlebars-template">
+
+{{#*inline "partial_details_one_row"}}
+ <tr class="{{#unless this.isaddress}}notused{{/unless}}">
+ <td class="name">
+ {{#if this.localname}}
+ {{this.localname}}
+ {{else}}
+ <span class="noname">No Name</span>
+ {{/if}}
+ </td>
+ <td>{{formatPlaceType this}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{this.rank_address}}</td>
+ <td>{{formatAdminLevel this.admin_level}}</td>
+ <td>{{formatDistance this.distance}}</td>
+ <td>{{detailsPermaLink this 'details >'}}</td>
+ </tr>
+{{/inline}}
+
+{{#*inline "partial_details_keyword_one_row"}}
+ <tr>
+ <td>{{formatKeywordToken this.token}}</td>
+ {{#if this.id}}
+ <td>word id: {{this.id}}</td>
+ {{/if}}
+ </tr>
+{{/inline}}
+
+
+{{#*inline "partial_h2"}}
+ <tr class="all-columns"><td colspan="6"><h2>{{this}}</h2></td></tr>
+{{/inline}}
+
+{{#*inline "partial_h3"}}
+ <tr class="all-columns"><td colspan="6"><h3>{{this}}</h3></td></tr>
+{{/inline}}
+
+<div class="container">
+ <div class="row">
+ <div class="col-sm-10">
+ <h1>
+ {{aPlace.localname}}
+ <small>{{detailsPermaLink aPlace 'link to this page'}}</small>
+ </h1>
+ </div>
+ <div class="col-sm-2 text-right">
+ {{formatMapIcon aPlace}}
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-6">
+ <table id="locationdetails" class="table table-striped">
+ <tr>
+ <td>Name</td>
+ <td>
+ {{#each aPlace.names}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ <tr>
+ <td>Type</td>
+ <td>{{aPlace.category}}:{{aPlace.type}}</td>
+ </tr>
+ <tr>
+ <td>Last Updated</td>
+ <td>{{aPlace.indexed_date}}</td>
+ </tr>
+ <tr>
+ <td>Admin Level</td>
+ <td>{{aPlace.admin_level}}</td>
+ </tr>
+ <tr>
+ <td>Rank</td>
+ <td>{{formatSearchRank aPlace.rank_search}}</td>
+ </tr>
+ {{#if aPlace.calculated_importance}}
+ <tr>
+ <td>Importance</td>
+ <td>
+ {{aPlace.calculated_importance}}
+ {{#unless aPlace.importance}} (estimated){{/unless}}
+ </td>
+ </tr>
+ {{/if}}
+ <tr>
+ <td>Coverage</td>
+ <td>{{coverageType aPlace}}</td>
+ </tr>
+ <tr>
+ <td>Centre Point (lat,lon)</td>
+ <td>
+ {{aPlace.centroid.coordinates.[1]}},{{aPlace.centroid.coordinates.[0]}}
+ </td>
+ </tr>
+ <tr>
+ <td>OSM</td>
+ <td>{{osmLink aPlace}}
+ </tr>
+ <tr>
+ <td>
+ Place Id
+ (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">on this server</a>)
+ </td>
+ <td>{{aPlace.place_id}}</td>
+ </tr>
+ {{#if aPlace.calculated_wikipedia}}
+ <tr>
+ <td>Wikipedia Calculated</td>
+ <td>{{wikipediaLink aPlace}}</td>
+ </tr>
+ {{/if}}
+ <tr>
+ <td>Computed Postcode</td>
+ <td>{{aPlace.calculated_postcode}}</td>
+ </tr>
+ <tr>
+ <td>Address Tags</td>
+ <td>
+ {{#each aPlace.addresstags}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ <tr>
+ <td>Extra Tags</td>
+ <td>
+ {{#each aPlace.extratags}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div class="col-md-6">
+ <div id="map"></div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-12">
+ <h2>Address</h2>
+ <table id="address" class="table table-striped table-small">
+ <thead>
+ <tr>
+ <th>Local name</th>
+ <th>Type</th>
+ <th>OSM</th>
+ <th>Address rank</th>
+ <th>Admin level</th>
+ <th>Distance</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#if aPlace.address}}
+ {{#each aPlace.address}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{#if aPlace.linked_places}}
+ {{> partial_h2 'Linked Places'}}
+ {{#each aPlace.linked_places}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{#if aPlace.keywords}}
+ {{> partial_h2 'Name Keywords'}}
+ {{#each aPlace.keywords.name}}
+ {{> partial_details_keyword_one_row}}
+ {{/each}}
+
+ {{> partial_h2 'Address Keywords'}}
+ {{#each aPlace.keywords.address}}
+ {{> partial_details_keyword_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{> partial_h2 'Parent Of'}}
+ {{#if aPlace.hierarchy}}
+
+ {{#each aPlace.hierarchy as |lines type|}}
+ {{> partial_h3 type}}
+ {{#each lines}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/each}}
+ {{else}}
+ <tr>
+ <td>
+ <a class="btn btn-outline-secondary btn-sm"
+ href="{{base_url}}&hierarchy=1">display child places</a>
+ </td>
+ </tr>
+ {{/if}}
+ {{tooManyHierarchyLinesWarning aPlace}}
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+
+</script>
+<script id="detailspage-index-template" type="text/x-handlebars-template">
+<div class="container" id="details-index-page">
+ <div class="row">
+ <div class="col-md-12">
+
+ <h1>Show details for place</h1>
+
+ <div class="search-form">
+ <h4>Search by place id</h4>
+
+ <form class="form-inline" action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[0-9]+$"
+ name="place_id"
+ placeholder="12345" />
+ <input type="submit"
+ class="btn btn-primary btn-sm"
+ value="Show" />
+ </form>
+ </div>
+
+ <div class="search-form">
+ <h4>Search by OSM type and OSM id</h4>
+
+ <form id="form-by-type-and-id"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[NWR][0-9]+$"
+ placeholder="N123 or W123 or R123" />
+ <input type="hidden" name="osmtype" />
+ <input type="hidden" name="osmid" />
+ <input type="submit" class="btn btn-primary btn-sm" value="Show" />
+ </form>
+ </div>
+
+ <div class="search-form">
+ <h4>Search by openstreetmap.org URL</h4>
+
+ <form id="form-by-osm-url"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern=".*openstreetmap.*"
+ placeholder="https://www.openstreetmap.org/relation/123" />
+ <input type="hidden" name="osmtype" />
+ <input type="hidden" name="osmid" />
+ <input type="submit" class="btn btn-primary btn-sm" value="Show" />
+ </form>
+ </div>
+
+ </div>
+ </div>
+</div></script>
+<script id="deletable-template" type="text/x-handlebars-template">
+<div class="container">
+ <div class="row">
+ <div class="col-sm-12">
+ <h1>Deletable</h1>
+
+ <p>
+ {{aPolygons.length}} objects have been deleted in OSM but are still in the Nominatim database.
+ </p>
+
+ <table class="table table-striped table-hover">
+ <thead>
+ <th>Place id</th>
+ <th>Country Code</th>
+ <th>Name</th>
+ <th>OSM id</th>
+ <th>OSM type</th>
+ <th>Class</th>
+ <th>Type</th>
+ </thead>
+ <tbody>
+ {{#each aPolygons}}
+ <tr>
+ <td>{{detailsLink this place_id}}</td>
+ <td>{{country_code}}</td>
+ <td>{{name}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{osm_type}}</td>
+ <td>{{class}}</td>
+ <td>{{type}}</td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div
+
+</script>
<script id="polygons-template" type="text/x-handlebars-template">
<div class="container">
<div class="row">
<link href="assets/css/search.css" rel="stylesheet" type="text/css" />
<link href="assets/css/details.css" rel="stylesheet" type="text/css" />
</head>
-<body id="reverse-page">
+<body id="BODYID">
- <div id="error-overlay">
- You need Javascript enabled to view this page.
- </div>
+ <div id="error-overlay"></div>
<header class="container-fluid">
<div class="row">
</div>
</div>
<div id="last-updated" class="col-4 text-center">
+ <div id="loading">loading...</div>
Data from <a id="api-request-link" href="">API request</a>
<br>
Data last updated:
<script src="handlebar_helpers.js"></script>
<script src="assets/js/nominatim-ui.js"></script>
+<script id="searchpage-template" type="text/x-handlebars-template">
+{{#*inline "partial_one_result"}}
+ <div class="result" data-position="{{iResNum}}">
+ {{formatMapIcon aResult}}
+
+ <span class="name">{{aResult.display_name}}</span>
+ <span class="type">({{formatLabel aResult}})</span>
+ <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
+
+ <a class="details btn btn-outline-secondary btn-sm"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ </div>
+{{/inline}}
+
+<div class="top-bar">
+ <ul class="nav nav-tabs">
+ <li class="nav-item">
+ <a class="nav-link {{#unless hStructured}}active{{/unless}}" data-toggle="tab" href="#simple">simple</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link {{#if hStructured}}active{{/if}}" data-toggle="tab" href="#structured">structured</a>
+ </li>
+ <div class="search-type-link">
+ <a id="switch-to-reverse" href="/reverse.html">reverse search</a>
+ </div>
+ </ul>
+ <div class="tab-content p-2">
+ <div class="tab-pane {{#unless hStructured}}active{{/unless}}" id="simple" role="tabpanel">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <input id="q"
+ name="q"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="Search"
+ value="{{sQuery}}" />
+
+ <div class="form-group search-button-group">
+ <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
+ <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+ <div class="form-check form-check-inline">
+ <input type="checkbox" class="form-check-input"
+ id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+ <label class="form-check-label" for="use_viewbox">apply viewbox</label>
+ </div>
+ </div>
+ </form>
+ </div>
+ <div class="tab-pane {{#if hStructured}}active{{/if}}" id="structured" role="tabpanel">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <input name="street" type="text" class="form-control form-control-sm mr-1"
+ placeholder="House number/Street"
+ value="{{hStructured.street}}" />
+ <input name="city" type="text" class="form-control form-control-sm mr-1"
+ placeholder="City"
+ value="{{hStructured.city}}" />
+ <input id="county" name="county" type="text" class="form-control form-control-sm mr-1"
+ placeholder="County"
+ value="{{hStructured.county}}" />
+ <input name="state" type="text" class="form-control form-control-sm mr-1"
+ placeholder="State"
+ value="{{hStructured.state}}" />
+ <input name="country" type="text" class="form-control form-control-sm mr-1"
+ placeholder="Country"
+ value="{{hStructured.country}}" />
+ <input name="postalcode" type="text" class="form-control form-control-sm mr-1"
+ placeholder="Postal Code"
+ value="{{hStructured.postalcode}}" />
+
+ <div class="form-group search-button-group">
+ <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
+ <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+ <div class="form-check form-check-inline">
+ <input type="checkbox" class="form-check-input"
+ id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+ <label class="form-check-label" for="use_viewbox">apply viewbox</label>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div> <!-- /tab-content -->
+</div> <!-- /top-bar -->
+
+<div id="content">
+
+ {{#if sQuery}}
+ <div id="searchresults" class="sidebar">
+ {{#each aSearchResults as |aResult|}}
+ {{>partial_one_result iResNum=@index aResult=aResult env=env}}
+ {{/each}}
+
+ {{#if aSearchResults}}
+ {{#if sMoreURL}}
+ <div class="more">
+ <a class="btn btn-primary" href="{{sMoreURL}}">
+ Search for more results
+ </a>
+ </div>
+ {{/if}}
+ {{else}}
+ <div class="noresults">No search results found</div>
+ {{/if}}
+ </div>
+
+ {{else}}
+
+ <div id="intro" class="sidebar">
+ <h2>Welcome to Nominatim</h2>
+
+ <p>
+ Nominatim is a search engine for
+ <a href="https://www.openstreetmap.org">OpenStreetMap</a> data. This
+ is the debugging interface. You may search for a name or address
+ (forward search) or look up data by its geographic coordinate (reverse
+ search). Each result comes with a link to a details page where you
+ can inspect what data about the object is saved in the database and
+ investigate how the address of the object has been computed.
+ </p>
+
+ For more information visit the
+ <a href="https://nominatim.org">Nominatim home page</a>.
+ </div>
+
+ {{/if}}
+
+ <div id="map-wrapper">
+ <div id="map-position">
+ <div id="map-position-inner"></div>
+ <div id="map-position-close"><a href="#">hide</a></div>
+ </div>
+ <div id="map"></div>
+ </div>
+</div>
+</script>
<script id="reversepage-template" type="text/x-handlebars-template">
{{#*inline "partial_one_result"}}
<div id="map"></div>
</div>
</div>
+</script>
+<script id="detailspage-template" type="text/x-handlebars-template">
+
+{{#*inline "partial_details_one_row"}}
+ <tr class="{{#unless this.isaddress}}notused{{/unless}}">
+ <td class="name">
+ {{#if this.localname}}
+ {{this.localname}}
+ {{else}}
+ <span class="noname">No Name</span>
+ {{/if}}
+ </td>
+ <td>{{formatPlaceType this}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{this.rank_address}}</td>
+ <td>{{formatAdminLevel this.admin_level}}</td>
+ <td>{{formatDistance this.distance}}</td>
+ <td>{{detailsPermaLink this 'details >'}}</td>
+ </tr>
+{{/inline}}
+
+{{#*inline "partial_details_keyword_one_row"}}
+ <tr>
+ <td>{{formatKeywordToken this.token}}</td>
+ {{#if this.id}}
+ <td>word id: {{this.id}}</td>
+ {{/if}}
+ </tr>
+{{/inline}}
+
+
+{{#*inline "partial_h2"}}
+ <tr class="all-columns"><td colspan="6"><h2>{{this}}</h2></td></tr>
+{{/inline}}
+
+{{#*inline "partial_h3"}}
+ <tr class="all-columns"><td colspan="6"><h3>{{this}}</h3></td></tr>
+{{/inline}}
+
+<div class="container">
+ <div class="row">
+ <div class="col-sm-10">
+ <h1>
+ {{aPlace.localname}}
+ <small>{{detailsPermaLink aPlace 'link to this page'}}</small>
+ </h1>
+ </div>
+ <div class="col-sm-2 text-right">
+ {{formatMapIcon aPlace}}
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-6">
+ <table id="locationdetails" class="table table-striped">
+ <tr>
+ <td>Name</td>
+ <td>
+ {{#each aPlace.names}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ <tr>
+ <td>Type</td>
+ <td>{{aPlace.category}}:{{aPlace.type}}</td>
+ </tr>
+ <tr>
+ <td>Last Updated</td>
+ <td>{{aPlace.indexed_date}}</td>
+ </tr>
+ <tr>
+ <td>Admin Level</td>
+ <td>{{aPlace.admin_level}}</td>
+ </tr>
+ <tr>
+ <td>Rank</td>
+ <td>{{formatSearchRank aPlace.rank_search}}</td>
+ </tr>
+ {{#if aPlace.calculated_importance}}
+ <tr>
+ <td>Importance</td>
+ <td>
+ {{aPlace.calculated_importance}}
+ {{#unless aPlace.importance}} (estimated){{/unless}}
+ </td>
+ </tr>
+ {{/if}}
+ <tr>
+ <td>Coverage</td>
+ <td>{{coverageType aPlace}}</td>
+ </tr>
+ <tr>
+ <td>Centre Point (lat,lon)</td>
+ <td>
+ {{aPlace.centroid.coordinates.[1]}},{{aPlace.centroid.coordinates.[0]}}
+ </td>
+ </tr>
+ <tr>
+ <td>OSM</td>
+ <td>{{osmLink aPlace}}
+ </tr>
+ <tr>
+ <td>
+ Place Id
+ (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">on this server</a>)
+ </td>
+ <td>{{aPlace.place_id}}</td>
+ </tr>
+ {{#if aPlace.calculated_wikipedia}}
+ <tr>
+ <td>Wikipedia Calculated</td>
+ <td>{{wikipediaLink aPlace}}</td>
+ </tr>
+ {{/if}}
+ <tr>
+ <td>Computed Postcode</td>
+ <td>{{aPlace.calculated_postcode}}</td>
+ </tr>
+ <tr>
+ <td>Address Tags</td>
+ <td>
+ {{#each aPlace.addresstags}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ <tr>
+ <td>Extra Tags</td>
+ <td>
+ {{#each aPlace.extratags}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div class="col-md-6">
+ <div id="map"></div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-12">
+ <h2>Address</h2>
+ <table id="address" class="table table-striped table-small">
+ <thead>
+ <tr>
+ <th>Local name</th>
+ <th>Type</th>
+ <th>OSM</th>
+ <th>Address rank</th>
+ <th>Admin level</th>
+ <th>Distance</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#if aPlace.address}}
+ {{#each aPlace.address}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{#if aPlace.linked_places}}
+ {{> partial_h2 'Linked Places'}}
+ {{#each aPlace.linked_places}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{#if aPlace.keywords}}
+ {{> partial_h2 'Name Keywords'}}
+ {{#each aPlace.keywords.name}}
+ {{> partial_details_keyword_one_row}}
+ {{/each}}
+
+ {{> partial_h2 'Address Keywords'}}
+ {{#each aPlace.keywords.address}}
+ {{> partial_details_keyword_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{> partial_h2 'Parent Of'}}
+ {{#if aPlace.hierarchy}}
+
+ {{#each aPlace.hierarchy as |lines type|}}
+ {{> partial_h3 type}}
+ {{#each lines}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/each}}
+ {{else}}
+ <tr>
+ <td>
+ <a class="btn btn-outline-secondary btn-sm"
+ href="{{base_url}}&hierarchy=1">display child places</a>
+ </td>
+ </tr>
+ {{/if}}
+ {{tooManyHierarchyLinesWarning aPlace}}
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+
+</script>
+<script id="detailspage-index-template" type="text/x-handlebars-template">
+<div class="container" id="details-index-page">
+ <div class="row">
+ <div class="col-md-12">
+
+ <h1>Show details for place</h1>
+
+ <div class="search-form">
+ <h4>Search by place id</h4>
+
+ <form class="form-inline" action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[0-9]+$"
+ name="place_id"
+ placeholder="12345" />
+ <input type="submit"
+ class="btn btn-primary btn-sm"
+ value="Show" />
+ </form>
+ </div>
+
+ <div class="search-form">
+ <h4>Search by OSM type and OSM id</h4>
+
+ <form id="form-by-type-and-id"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[NWR][0-9]+$"
+ placeholder="N123 or W123 or R123" />
+ <input type="hidden" name="osmtype" />
+ <input type="hidden" name="osmid" />
+ <input type="submit" class="btn btn-primary btn-sm" value="Show" />
+ </form>
+ </div>
+
+ <div class="search-form">
+ <h4>Search by openstreetmap.org URL</h4>
+
+ <form id="form-by-osm-url"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern=".*openstreetmap.*"
+ placeholder="https://www.openstreetmap.org/relation/123" />
+ <input type="hidden" name="osmtype" />
+ <input type="hidden" name="osmid" />
+ <input type="submit" class="btn btn-primary btn-sm" value="Show" />
+ </form>
+ </div>
+
+ </div>
+ </div>
+</div></script>
+<script id="deletable-template" type="text/x-handlebars-template">
+<div class="container">
+ <div class="row">
+ <div class="col-sm-12">
+ <h1>Deletable</h1>
+
+ <p>
+ {{aPolygons.length}} objects have been deleted in OSM but are still in the Nominatim database.
+ </p>
+
+ <table class="table table-striped table-hover">
+ <thead>
+ <th>Place id</th>
+ <th>Country Code</th>
+ <th>Name</th>
+ <th>OSM id</th>
+ <th>OSM type</th>
+ <th>Class</th>
+ <th>Type</th>
+ </thead>
+ <tbody>
+ {{#each aPolygons}}
+ <tr>
+ <td>{{detailsLink this place_id}}</td>
+ <td>{{country_code}}</td>
+ <td>{{name}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{osm_type}}</td>
+ <td>{{class}}</td>
+ <td>{{type}}</td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div
+
+</script>
+<script id="polygons-template" type="text/x-handlebars-template">
+<div class="container">
+ <div class="row">
+ <div class="col-sm-12">
+ <h1>Broken polygons</h1>
+
+ <p>
+ Total number of broken polygons: {{aPolygons.length}}.
+ </p>
+
+ <table class="table table-striped table-hover">
+ <thead>
+ <th>OSM type</th>
+ <th>OSM id</th>
+ <th>Class</th>
+ <th>Type</th>
+ <th>Name</th>
+ <th>Country Code</th>
+ <th>Error message</th>
+ <th>Updated</th>
+ <th> </th>
+ </thead>
+ <tbody>
+ {{#each aPolygons}}
+ <tr>
+ <td>{{osm_type}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{class}}</td>
+ <td>{{type}}</td>
+ <td>{{name}}</td>
+ <td>{{country_code}}</td>
+ <td>{{errormessage}}</td>
+ <td>{{updated}}</td>
+ <td>
+ <a href="http://localhost:8111/import?url=https://www.openstreetmap.org/api/0.6/{{formatOSMType osm_type}}/{{osm_id}}/full" target="josm">josm</a>
+ </td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div
+
</script>
</body>
</html>
+++ /dev/null
-
-{{#*inline "partial_one_result"}}
- <div class="result" data-position="{{iResNum}}">
- {{formatMapIcon aResult}}
-
- <span class="name">{{aResult.display_name}}</span>
- <span class="type">{{formatLabel aResult}}</span>
- <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
-
- <a class="details btn btn-outline-secondary btn-sm"
- href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
- </div>
-{{/inline}}
-
-<div class="top-bar">
- <form class="form-inline" role="search" accept-charset="UTF-8" action="">
- <div class="form-group">
- <input name="format" type="hidden" value="html">
- <label>lat</label>
- <input name="lat"
- type="text"
- class="form-control form-control-sm"
- placeholder="latitude"
- value="{{fLat}}" />
- <a id="switch-coords" class="btn btn-outline-secondary btn-sm" title="switch lat and lon"><></a>
- <label>lon</label>
- <input name="lon"
- type="text"
- class="form-control form-control-sm"
- placeholder="longitude"
- value="{{fLon}}" />
- <label>max zoom</label>
- <select name="zoom" class="form-control form-control-sm" value="{{iZoom}}">
- {{zoomLevels iZoom}}
- </select>
- <button type="submit" class="btn btn-primary btn-sm mx-1">
- Search
- </button>
- </div>
- <div class="search-type-link">
- <a href="/search.html">forward search</a>
- </div>
- </form>
-</div>
-
-<div id="content">
- {{#if aPlace}}
- <div id="searchresults" class="sidebar">
- {{>partial_one_result iResNum=0 aResult=aPlace env=env}}
- </div>
- {{else}}
- <div id="intro" class="sidebar">
- Search for coordinates or click anywhere on the map.
- </div>
- {{/if}}
-
- <div id="map-wrapper">
- <div id="map-position">
- <div id="map-position-inner"></div>
- <div id="map-position-close"><a href="#">hide</a></div>
- </div>
- <div id="map"></div>
- </div>
-</div>
<link href="assets/css/search.css" rel="stylesheet" type="text/css" />
<link href="assets/css/details.css" rel="stylesheet" type="text/css" />
</head>
-<body id="search-page">
+<body id="BODYID">
- <div id="error-overlay">
- You need Javascript enabled to view this page.
- </div>
+ <div id="error-overlay"></div>
<header class="container-fluid">
<div class="row">
</div>
</div>
<div id="last-updated" class="col-4 text-center">
+ <div id="loading">loading...</div>
Data from <a id="api-request-link" href="">API request</a>
<br>
Data last updated:
<div id="map"></div>
</div>
</div>
+</script>
+<script id="reversepage-template" type="text/x-handlebars-template">
+
+{{#*inline "partial_one_result"}}
+ <div class="result" data-position="{{iResNum}}">
+ {{formatMapIcon aResult}}
+
+ <span class="name">{{aResult.display_name}}</span>
+ <span class="type">{{formatLabel aResult}}</span>
+ <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
+
+ <a class="details btn btn-outline-secondary btn-sm"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ </div>
+{{/inline}}
+
+<div class="top-bar">
+ <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+ <div class="form-group">
+ <input name="format" type="hidden" value="html">
+ <label>lat</label>
+ <input name="lat"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="latitude"
+ value="{{fLat}}" />
+ <a id="switch-coords" class="btn btn-outline-secondary btn-sm" title="switch lat and lon"><></a>
+ <label>lon</label>
+ <input name="lon"
+ type="text"
+ class="form-control form-control-sm"
+ placeholder="longitude"
+ value="{{fLon}}" />
+ <label>max zoom</label>
+ <select name="zoom" class="form-control form-control-sm" value="{{iZoom}}">
+ {{zoomLevels iZoom}}
+ </select>
+ <button type="submit" class="btn btn-primary btn-sm mx-1">
+ Search
+ </button>
+ </div>
+ <div class="search-type-link">
+ <a href="/search.html">forward search</a>
+ </div>
+ </form>
+</div>
+
+<div id="content">
+ {{#if aPlace}}
+ <div id="searchresults" class="sidebar">
+ {{>partial_one_result iResNum=0 aResult=aPlace env=env}}
+ </div>
+ {{else}}
+ <div id="intro" class="sidebar">
+ Search for coordinates or click anywhere on the map.
+ </div>
+ {{/if}}
+
+ <div id="map-wrapper">
+ <div id="map-position">
+ <div id="map-position-inner"></div>
+ <div id="map-position-close"><a href="#">hide</a></div>
+ </div>
+ <div id="map"></div>
+ </div>
+</div>
+</script>
+<script id="detailspage-template" type="text/x-handlebars-template">
+
+{{#*inline "partial_details_one_row"}}
+ <tr class="{{#unless this.isaddress}}notused{{/unless}}">
+ <td class="name">
+ {{#if this.localname}}
+ {{this.localname}}
+ {{else}}
+ <span class="noname">No Name</span>
+ {{/if}}
+ </td>
+ <td>{{formatPlaceType this}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{this.rank_address}}</td>
+ <td>{{formatAdminLevel this.admin_level}}</td>
+ <td>{{formatDistance this.distance}}</td>
+ <td>{{detailsPermaLink this 'details >'}}</td>
+ </tr>
+{{/inline}}
+
+{{#*inline "partial_details_keyword_one_row"}}
+ <tr>
+ <td>{{formatKeywordToken this.token}}</td>
+ {{#if this.id}}
+ <td>word id: {{this.id}}</td>
+ {{/if}}
+ </tr>
+{{/inline}}
+
+
+{{#*inline "partial_h2"}}
+ <tr class="all-columns"><td colspan="6"><h2>{{this}}</h2></td></tr>
+{{/inline}}
+
+{{#*inline "partial_h3"}}
+ <tr class="all-columns"><td colspan="6"><h3>{{this}}</h3></td></tr>
+{{/inline}}
+
+<div class="container">
+ <div class="row">
+ <div class="col-sm-10">
+ <h1>
+ {{aPlace.localname}}
+ <small>{{detailsPermaLink aPlace 'link to this page'}}</small>
+ </h1>
+ </div>
+ <div class="col-sm-2 text-right">
+ {{formatMapIcon aPlace}}
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-6">
+ <table id="locationdetails" class="table table-striped">
+ <tr>
+ <td>Name</td>
+ <td>
+ {{#each aPlace.names}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ <tr>
+ <td>Type</td>
+ <td>{{aPlace.category}}:{{aPlace.type}}</td>
+ </tr>
+ <tr>
+ <td>Last Updated</td>
+ <td>{{aPlace.indexed_date}}</td>
+ </tr>
+ <tr>
+ <td>Admin Level</td>
+ <td>{{aPlace.admin_level}}</td>
+ </tr>
+ <tr>
+ <td>Rank</td>
+ <td>{{formatSearchRank aPlace.rank_search}}</td>
+ </tr>
+ {{#if aPlace.calculated_importance}}
+ <tr>
+ <td>Importance</td>
+ <td>
+ {{aPlace.calculated_importance}}
+ {{#unless aPlace.importance}} (estimated){{/unless}}
+ </td>
+ </tr>
+ {{/if}}
+ <tr>
+ <td>Coverage</td>
+ <td>{{coverageType aPlace}}</td>
+ </tr>
+ <tr>
+ <td>Centre Point (lat,lon)</td>
+ <td>
+ {{aPlace.centroid.coordinates.[1]}},{{aPlace.centroid.coordinates.[0]}}
+ </td>
+ </tr>
+ <tr>
+ <td>OSM</td>
+ <td>{{osmLink aPlace}}
+ </tr>
+ <tr>
+ <td>
+ Place Id
+ (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">on this server</a>)
+ </td>
+ <td>{{aPlace.place_id}}</td>
+ </tr>
+ {{#if aPlace.calculated_wikipedia}}
+ <tr>
+ <td>Wikipedia Calculated</td>
+ <td>{{wikipediaLink aPlace}}</td>
+ </tr>
+ {{/if}}
+ <tr>
+ <td>Computed Postcode</td>
+ <td>{{aPlace.calculated_postcode}}</td>
+ </tr>
+ <tr>
+ <td>Address Tags</td>
+ <td>
+ {{#each aPlace.addresstags}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ <tr>
+ <td>Extra Tags</td>
+ <td>
+ {{#each aPlace.extratags}}
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
+ {{/each}}
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div class="col-md-6">
+ <div id="map"></div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-12">
+ <h2>Address</h2>
+ <table id="address" class="table table-striped table-small">
+ <thead>
+ <tr>
+ <th>Local name</th>
+ <th>Type</th>
+ <th>OSM</th>
+ <th>Address rank</th>
+ <th>Admin level</th>
+ <th>Distance</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#if aPlace.address}}
+ {{#each aPlace.address}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{#if aPlace.linked_places}}
+ {{> partial_h2 'Linked Places'}}
+ {{#each aPlace.linked_places}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{#if aPlace.keywords}}
+ {{> partial_h2 'Name Keywords'}}
+ {{#each aPlace.keywords.name}}
+ {{> partial_details_keyword_one_row}}
+ {{/each}}
+
+ {{> partial_h2 'Address Keywords'}}
+ {{#each aPlace.keywords.address}}
+ {{> partial_details_keyword_one_row}}
+ {{/each}}
+ {{/if}}
+
+ {{> partial_h2 'Parent Of'}}
+ {{#if aPlace.hierarchy}}
+
+ {{#each aPlace.hierarchy as |lines type|}}
+ {{> partial_h3 type}}
+ {{#each lines}}
+ {{> partial_details_one_row}}
+ {{/each}}
+ {{/each}}
+ {{else}}
+ <tr>
+ <td>
+ <a class="btn btn-outline-secondary btn-sm"
+ href="{{base_url}}&hierarchy=1">display child places</a>
+ </td>
+ </tr>
+ {{/if}}
+ {{tooManyHierarchyLinesWarning aPlace}}
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+
+</script>
+<script id="detailspage-index-template" type="text/x-handlebars-template">
+<div class="container" id="details-index-page">
+ <div class="row">
+ <div class="col-md-12">
+
+ <h1>Show details for place</h1>
+
+ <div class="search-form">
+ <h4>Search by place id</h4>
+
+ <form class="form-inline" action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[0-9]+$"
+ name="place_id"
+ placeholder="12345" />
+ <input type="submit"
+ class="btn btn-primary btn-sm"
+ value="Show" />
+ </form>
+ </div>
+
+ <div class="search-form">
+ <h4>Search by OSM type and OSM id</h4>
+
+ <form id="form-by-type-and-id"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[NWR][0-9]+$"
+ placeholder="N123 or W123 or R123" />
+ <input type="hidden" name="osmtype" />
+ <input type="hidden" name="osmid" />
+ <input type="submit" class="btn btn-primary btn-sm" value="Show" />
+ </form>
+ </div>
+
+ <div class="search-form">
+ <h4>Search by openstreetmap.org URL</h4>
+
+ <form id="form-by-osm-url"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern=".*openstreetmap.*"
+ placeholder="https://www.openstreetmap.org/relation/123" />
+ <input type="hidden" name="osmtype" />
+ <input type="hidden" name="osmid" />
+ <input type="submit" class="btn btn-primary btn-sm" value="Show" />
+ </form>
+ </div>
+
+ </div>
+ </div>
+</div></script>
+<script id="deletable-template" type="text/x-handlebars-template">
+<div class="container">
+ <div class="row">
+ <div class="col-sm-12">
+ <h1>Deletable</h1>
+
+ <p>
+ {{aPolygons.length}} objects have been deleted in OSM but are still in the Nominatim database.
+ </p>
+
+ <table class="table table-striped table-hover">
+ <thead>
+ <th>Place id</th>
+ <th>Country Code</th>
+ <th>Name</th>
+ <th>OSM id</th>
+ <th>OSM type</th>
+ <th>Class</th>
+ <th>Type</th>
+ </thead>
+ <tbody>
+ {{#each aPolygons}}
+ <tr>
+ <td>{{detailsLink this place_id}}</td>
+ <td>{{country_code}}</td>
+ <td>{{name}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{osm_type}}</td>
+ <td>{{class}}</td>
+ <td>{{type}}</td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div
+
+</script>
+<script id="polygons-template" type="text/x-handlebars-template">
+<div class="container">
+ <div class="row">
+ <div class="col-sm-12">
+ <h1>Broken polygons</h1>
+
+ <p>
+ Total number of broken polygons: {{aPolygons.length}}.
+ </p>
+
+ <table class="table table-striped table-hover">
+ <thead>
+ <th>OSM type</th>
+ <th>OSM id</th>
+ <th>Class</th>
+ <th>Type</th>
+ <th>Name</th>
+ <th>Country Code</th>
+ <th>Error message</th>
+ <th>Updated</th>
+ <th> </th>
+ </thead>
+ <tbody>
+ {{#each aPolygons}}
+ <tr>
+ <td>{{osm_type}}</td>
+ <td>{{osmLink this}}</td>
+ <td>{{class}}</td>
+ <td>{{type}}</td>
+ <td>{{name}}</td>
+ <td>{{country_code}}</td>
+ <td>{{errormessage}}</td>
+ <td>{{updated}}</td>
+ <td>
+ <a href="http://localhost:8111/import?url=https://www.openstreetmap.org/api/0.6/{{formatOSMType osm_type}}/{{osm_id}}/full" target="josm">josm</a>
+ </td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div
+
</script>
</body>
</html>
+++ /dev/null
-{{#*inline "partial_one_result"}}
- <div class="result" data-position="{{iResNum}}">
- {{formatMapIcon aResult}}
-
- <span class="name">{{aResult.display_name}}</span>
- <span class="type">({{formatLabel aResult}})</span>
- <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
-
- <a class="details btn btn-outline-secondary btn-sm"
- href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
- </div>
-{{/inline}}
-
-<div class="top-bar">
- <ul class="nav nav-tabs">
- <li class="nav-item">
- <a class="nav-link {{#unless hStructured}}active{{/unless}}" data-toggle="tab" href="#simple">simple</a>
- </li>
- <li class="nav-item">
- <a class="nav-link {{#if hStructured}}active{{/if}}" data-toggle="tab" href="#structured">structured</a>
- </li>
- <div class="search-type-link">
- <a id="switch-to-reverse" href="/reverse.html">reverse search</a>
- </div>
- </ul>
- <div class="tab-content p-2">
- <div class="tab-pane {{#unless hStructured}}active{{/unless}}" id="simple" role="tabpanel">
- <form class="form-inline" role="search" accept-charset="UTF-8" action="">
- <input id="q"
- name="q"
- type="text"
- class="form-control form-control-sm"
- placeholder="Search"
- value="{{sQuery}}" />
-
- <div class="form-group search-button-group">
- <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
- <input type="hidden" name="viewbox" value="{{sViewBox}}" />
- <div class="form-check form-check-inline">
- <input type="checkbox" class="form-check-input"
- id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
- <label class="form-check-label" for="use_viewbox">apply viewbox</label>
- </div>
- </div>
- </form>
- </div>
- <div class="tab-pane {{#if hStructured}}active{{/if}}" id="structured" role="tabpanel">
- <form class="form-inline" role="search" accept-charset="UTF-8" action="">
- <input name="street" type="text" class="form-control form-control-sm mr-1"
- placeholder="House number/Street"
- value="{{hStructured.street}}" />
- <input name="city" type="text" class="form-control form-control-sm mr-1"
- placeholder="City"
- value="{{hStructured.city}}" />
- <input id="county" name="county" type="text" class="form-control form-control-sm mr-1"
- placeholder="County"
- value="{{hStructured.county}}" />
- <input name="state" type="text" class="form-control form-control-sm mr-1"
- placeholder="State"
- value="{{hStructured.state}}" />
- <input name="country" type="text" class="form-control form-control-sm mr-1"
- placeholder="Country"
- value="{{hStructured.country}}" />
- <input name="postalcode" type="text" class="form-control form-control-sm mr-1"
- placeholder="Postal Code"
- value="{{hStructured.postalcode}}" />
-
- <div class="form-group search-button-group">
- <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
- <input type="hidden" name="viewbox" value="{{sViewBox}}" />
- <div class="form-check form-check-inline">
- <input type="checkbox" class="form-check-input"
- id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
- <label class="form-check-label" for="use_viewbox">apply viewbox</label>
- </div>
- </div>
- </form>
- </div>
- </div> <!-- /tab-content -->
-</div> <!-- /top-bar -->
-
-<div id="content">
-
- {{#if sQuery}}
- <div id="searchresults" class="sidebar">
- {{#each aSearchResults as |aResult|}}
- {{>partial_one_result iResNum=@index aResult=aResult env=env}}
- {{/each}}
-
- {{#if aSearchResults}}
- {{#if sMoreURL}}
- <div class="more">
- <a class="btn btn-primary" href="{{sMoreURL}}">
- Search for more results
- </a>
- </div>
- {{/if}}
- {{else}}
- <div class="noresults">No search results found</div>
- {{/if}}
- </div>
-
- {{else}}
-
- <div id="intro" class="sidebar">
- <h2>Welcome to Nominatim</h2>
-
- <p>
- Nominatim is a search engine for
- <a href="https://www.openstreetmap.org">OpenStreetMap</a> data. This
- is the debugging interface. You may search for a name or address
- (forward search) or look up data by its geographic coordinate (reverse
- search). Each result comes with a link to a details page where you
- can inspect what data about the object is saved in the database and
- investigate how the address of the object has been computed.
- </p>
-
- For more information visit the
- <a href="https://nominatim.org">Nominatim home page</a>.
- </div>
-
- {{/if}}
-
- <div id="map-wrapper">
- <div id="map-position">
- <div id="map-position-inner"></div>
- <div id="map-position-close"><a href="#">hide</a></div>
- </div>
- <div id="map"></div>
- </div>
-</div>
margin: 1em;
}
+#loading {
+ display: none;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ background-color: #eee;
+ z-index: 100;
+ padding: 10px;
+ text-align: center;
+}
+
#error-overlay {
text-align: center;
font-style: italic;
}
-$(document).ajaxError(function (event, jqXHR, ajaxSettings/* , thrownError */) {
- // console.log(thrownError);
- // console.log(ajaxSettings);
- var url = ajaxSettings.url;
- show_error('Error fetching results from <a href="' + url + '">' + url + '</a>');
-});
-
-
jQuery(document).ready(function () {
hide_error();
+
+ $(document).ajaxStart(function () {
+ $('#loading').fadeIn('fast');
+ }).ajaxComplete(function () {
+ $('#loading').fadeOut('fast');
+ }).ajaxError(function (event, jqXHR, ajaxSettings/* , thrownError */) {
+ // console.log(thrownError);
+ // console.log(ajaxSettings);
+ var url = ajaxSettings.url;
+ show_error('Error fetching results from <a href="' + url + '">' + url + '</a>');
+ });
});
--- /dev/null
+jQuery(document).ready(function () {
+ var myhistory = [];
+
+ function parse_url_and_load_page() {
+ // 'search', 'reverse', 'details'
+ var pagename = window.location.pathname.replace('.html', '').replace(/^\//, '');
+
+ $('body').attr('id', pagename + '-page');
+
+ if (pagename === 'search' || pagename === 'reverse') {
+ search_page_load();
+ } else if (pagename === 'details') {
+ details_page_load();
+ } else if (pagename === 'deletable') {
+ deletable_page_load();
+ } else if (pagename === 'polygons') {
+ polygons_page_load();
+ }
+ }
+
+ parse_url_and_load_page();
+
+ // load page after form submit
+ $(document).on('submit', 'form', function (e) {
+ e.preventDefault();
+
+ window.history.pushState(myhistory, '', '?' + $(this).serialize());
+
+ parse_url_and_load_page();
+ });
+
+ // load page after click on relative URL
+ $(document).on('click', 'a', function (e) {
+ var target_url = $(this).attr('href');
+ if (target_url && target_url.match(/^http/)) return;
+ if (target_url && !target_url.match(/\.html/)) return;
+
+ e.preventDefault();
+
+ window.history.pushState(myhistory, '', target_url);
+
+ parse_url_and_load_page();
+ });
+
+ // deal with back-button and other user action
+ window.onpopstate = function () {
+ parse_url_and_load_page();
+ };
+});
+
// DELETABLE PAGE
// *********************************************************
-jQuery(document).ready(function () {
- if (!$('#deletable-page').length) { return; }
+function deletable_page_load() {
var api_request_params = {
format: 'json'
update_data_date();
});
-});
+}
}
-jQuery(document).ready(function () {
- if (!$('#details-page').length) { return; }
+function details_page_load() {
var search_params = new URLSearchParams(window.location.search);
// var place_id = search_params.get('place_id');
alert('invalid input');
}
});
-});
+}
// BROKEN POLYGON PAGE
// *********************************************************
-jQuery(document).ready(function () {
- if (!$('#polygons-page').length) { return; }
-
+function polygons_page_load() {
+ //
var api_request_params = {
format: 'json'
};
update_data_date();
});
-});
+}
+function search_page_load() {
-jQuery(document).ready(function () {
- //
- if (!$('#search-page,#reverse-page').length) { return; }
-
- var is_reverse_search = !!($('#reverse-page').length);
+ var is_reverse_search = window.location.pathname.match(/reverse/);
var search_params = new URLSearchParams(window.location.search);
);
}
}
-});
+}
+
+
</head>
<body id="BODYID">
- <div id="error-overlay">
- You need Javascript enabled to view this page.
- </div>
+ <div id="error-overlay"></div>
<header class="container-fluid">
<div class="row">
</div>
</div>
<div id="last-updated" class="col-4 text-center">
+ <div id="loading">loading...</div>
Data from <a id="api-request-link" href="">API request</a>
<br>
Data last updated: