2 header("content-type: text/html; charset=UTF-8");
6 <title>OpenStreetMap Nominatim: Search</title>
8 <base href="<?php echo CONST_Website_BaseURL;?>" />
9 <link href="nominatim.xml" rel="search" title="Nominatim Search" type="application/opensearchdescription+xml" />
11 <script src="js/OpenLayers.js"></script>
12 <script src="js/tiles.js"></script>
13 <script src="js/prototype-1.6.0.3.js"></script>
16 * {-moz-box-sizing: border-box;}
23 font: normal 12px/15px arial,sans-serif;
33 border-bottom: 2px solid #75ADFF;
38 #seachheaderfade1, #seachheaderfade2, #seachheaderfade3, #seachheaderfade4{
45 filter: alpha(opacity = 15);
47 border: 1px solid #000000;
61 #searchresultsfade1, #searchresultsfade2, #searchresultsfade3, #searchresultsfade4 {
68 filter: alpha(opacity = 20);
70 border: 1px solid #ffffff;
92 border: 1px solid #ffffff;
112 font: normal 12px/15px arial,sans-serif;
132 -moz-border-radius: 5px;
133 -webkit-border-radius: 5px;
135 border: 2px solid #D7E7FF;
136 font: normal 12px/15px arial,sans-serif;
151 font: normal 9px/10px arial,sans-serif;
154 .result .details, .result .details a{
157 font: normal 9px/10px arial,sans-serif;
163 font: normal 12px arial,sans-serif;
174 font: normal 9px/10px arial,sans-serif;
183 <script type="text/javascript">
187 function handleResize()
189 if ($('searchresults'))
191 $('map').style.width = (document.documentElement.clientWidth > 0?document.documentElement.clientWidth:document.documentElement.offsetWidth) - 200;
192 $('report').style.width = (document.documentElement.clientWidth > 0?document.documentElement.clientWidth:document.documentElement.offsetWidth) - 200;
196 $('map').style.width = (document.documentElement.clientWidth > 0?document.documentElement.clientWidth:document.documentElement.offsetWidth) - 0;
197 $('map').style.left = 0;
200 if ($('map')) $('map').style.height = (document.documentElement.clientHeight > 0?document.documentElement.clientHeight:document.documentElement.offsetHeight) - 38;
201 if ($('searchresults')) $('searchresults').style.height = (document.documentElement.clientHeight > 0?document.documentElement.clientHeight:document.documentElement.offsetHeight) - 38;
202 if ($('report')) $('report').style.height = (document.documentElement.clientHeight > 0?document.documentElement.clientHeight:document.documentElement.offsetHeight) - 38;
204 window.onresize = handleResize;
206 function panToLatLon(lat,lon) {
207 var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
208 map.panTo(lonLat, <?php echo $iZoom ?>);
211 function panToLatLonZoom(lat, lon, zoom) {
212 var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
213 if (zoom != map.getZoom())
214 map.setCenter(lonLat, zoom);
216 map.panTo(lonLat, 10);
219 function panToLatLonBoundingBox(lat,lon,minlat,maxlat,minlon,maxlon,points) {
220 var proj_EPSG4326 = new OpenLayers.Projection("EPSG:4326");
221 var proj_map = map.getProjectionObject();
222 map.zoomToExtent(new OpenLayers.Bounds(minlon,minlat,maxlon,maxlat).transform(proj_EPSG4326, proj_map));
223 var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
224 map.panTo(lonLat, <?php echo $iZoom ?>);
228 strokeColor: "#75ADFF",
229 fillColor: "#F0F7FF",
234 var proj_EPSG4326 = new OpenLayers.Projection("EPSG:4326");
235 var proj_map = map.getProjectionObject();
238 points.each(function(p){
239 pointList.push(new OpenLayers.Geometry.Point(p[0],p[1]));
241 var linearRing = new OpenLayers.Geometry.LinearRing(pointList).transform(proj_EPSG4326, proj_map);;
242 var polygonFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linearRing]),null,style);
243 vectorLayer.destroyFeatures();
244 vectorLayer.addFeatures([polygonFeature]);
248 var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
249 var point = new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat);
250 var pointFeature = new OpenLayers.Feature.Vector(point,null,style);
251 vectorLayer.destroyFeatures();
252 vectorLayer.addFeatures([pointFeature]);
259 return Math.round(v*n)/n;
264 return Math.floor(v*n)/n;
269 return Math.ceil(v*n)/n;
272 function mapEventMove() {
273 var proj = new OpenLayers.Projection("EPSG:4326");
274 var bounds = map.getExtent();
275 bounds = bounds.transform(map.getProjectionObject(), proj);
276 $('viewbox').value = floor(bounds.left,2)+','+ceil(bounds.top,2)+','+ceil(bounds.right,2)+','+floor(bounds.bottom,2);
281 map = new OpenLayers.Map ("map", {
283 new OpenLayers.Control.Navigation(),
284 new OpenLayers.Control.PanZoomBar(),
285 new OpenLayers.Control.MouseDefaults(),
286 new OpenLayers.Control.MousePosition(),
287 new OpenLayers.Control.Attribution()],
288 maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
289 maxResolution: 156543.0399,
292 projection: new OpenLayers.Projection("EPSG:900913"),
293 displayProjection: new OpenLayers.Projection("EPSG:4326"),
295 "moveend": mapEventMove
298 map.addLayer(new OpenLayers.Layer.OSM.<?php echo CONST_Tile_Default;?>("Default",
299 { attribution : '© <a target="_parent" href="http://www.openstreetmap.org">OpenStreetMap</a> and contributors, under an <a target="_parent" href="http://www.openstreetmap.org/copyright">open license</a>'}));
301 var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
302 layer_style.fillOpacity = 0.2;
303 layer_style.graphicOpacity = 1;
304 vectorLayer = new OpenLayers.Layer.Vector("Points", {style: layer_style});
305 map.addLayer(vectorLayer);
307 // var lonLat = new OpenLayers.LonLat(<?php echo $fLon ?>, <?php echo $fLat ?>).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
308 // map.setCenter (lonLat, <?php echo $iZoom ?>);
311 function setfocus(field_id) {
318 <body onload="setfocus('q');">
320 <div id="seachheaderfade1"></div><div id="seachheaderfade2"></div><div id="seachheaderfade3"></div><div id="seachheaderfade4"></div>
322 <div id="seachheader">
323 <form accept-charset="UTF-8" action="<?php echo CONST_Website_BaseURL; ?>search.php" method="get">
324 <table border="0" width="100%">
326 <td valign="center" style="width:30px;"><img src="images/logo.gif"></td>
327 <td valign="center" style="width:400px;"><input id="q" name="q" value="<?php echo htmlspecialchars($sQuery);
328 ?>" style="width:270px;"><input type="text" id="viewbox" style="width:130px;" name="viewbox"></td>
329 <td style="width:80px;"><input type="submit" value="Search"></td>
330 <?php if (CONST_Search_AreaPolygons) { ?> <td style="width:100px;"><input type="checkbox" value="1" name="polygon" <?php if ($bShowPolygons) echo "checked"; ?>> Highlight</td>
331 <td style="text-align:right;">Data: <?php echo $sDataDate; ?></td>
332 <td style="text-align:right;">
333 <a href="http://wiki.openstreetmap.org/wiki/Nominatim" target="_blank">Documentation</a> | <a href="http://wiki.openstreetmap.org/wiki/Nominatim/FAQ"
334 target="_blank">FAQ</a></td>
336 <?php } ?> <td style="text-align:right;"><?php if ($sQuery) { ?><input type="button" value="Report Problem With Results" onclick="$('report').style.visibility=($('report').style.visibility=='hidden'?'visible':'hidden')"><?php } ?></td>
343 if ($sQuery || sizeof($aSearchResults))
346 <div id="searchresultsfade1"></div><div id="searchresultsfade2"></div><div id="searchresultsfade3"></div><div id="searchresultsfade4"></div>
347 <div id="searchresults">
351 echo '<div class="more"><b>Suggest: </b><a href="'.$sSuggestionURL.'"><b>'.$sSuggestion.'</b></a></div>';
353 foreach($aSearchResults as $iResNum => $aResult)
355 if ($aResult['aBoundingBox'])
357 echo '<div class="result" onClick=\'panToLatLonBoundingBox('.$aResult['lat'].', '.$aResult['lon'];
358 echo ', '.$aResult['aBoundingBox'][0];
359 echo ', '.$aResult['aBoundingBox'][1];
360 echo ', '.$aResult['aBoundingBox'][2];
361 echo ', '.$aResult['aBoundingBox'][3];
362 if (isset($aResult['aPolyPoints'])) echo ', '.json_encode($aResult['aPolyPoints']);
365 elseif (isset($aResult['zoom']))
367 echo '<div class="result" onClick="panToLatLonZoom('.$aResult['lat'].', '.$aResult['lon'].', '.$aResult['zoom'].');">';
371 echo '<div class="result" onClick="panToLatLon('.$aResult['lat'].', '.$aResult['lon'].');">';
374 echo (isset($aResult['icon'])?'<img src="'.$aResult['icon'].'">':'');
375 echo ' <span class="name">'.$aResult['name'].'</span>';
376 echo ' <span class="latlon">'.round($aResult['lat'],3).','.round($aResult['lon'],3).'</span>';
377 echo ' <span class="place_id">'.$aResult['place_id'].'</span>';
378 if (isset($aResult['label']))
379 echo ' <span class="type">('.$aResult['label'].')</span>';
381 echo ' <span class="type">('.ucwords(str_replace('_',' ',$aResult['type'])).')</span>';
382 echo ' <span class="details">(<a href="details.php?place_id='.$aResult['place_id'].'">details</a>)</span>';
385 if (sizeof($aSearchResults))
389 echo '<div class="more"><a href="'.$sMoreURL.'">Search for more results</a></div>';
394 echo '<div class="noresults">No search results found</div>';
398 <div class="disclaimer">Addresses and postcodes are approximate
399 <input type="button" value="Report Problem" onclick="$('report').style.visibility=($('report').style.visibility=='hidden'?'visible':'hidden')">
407 <div id="report" style="visibility:hidden;"><div style="width:600px;margin:auto;margin-top:60px;">
408 <h2>Report a problem</h2>
409 <p>Before reporting problems please read the <a href="http://wiki.openstreetmap.org/wiki/Nominatim">user documentation</a> and <a
410 href="http://wiki.openstreetmap.org/wiki/Nominatim/FAQ">FAQ</a>. If your problem relates to the address of a particular search result please use the 'details' link
411 to check how the address was generated before reporting a problem.</p>
412 <p>Please use <a href="http://trac.openstreetmap.org/newticket?component=nominatim">trac.openstreetmap.org</a> to report problems
414 the component to 'nominatim'. You can search for existing bug reports <a href="http://trac.openstreetmap.org/query?status=new&status=assigned&status=reopened&component=nominatim&order=priority">here</a>.</p>
415 <p>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
416 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
417 require significant research!</p>
421 <p>Please use this form to report problems with the search results. Of particular interest are items missing, but please also use this form to
422 report any other problems.</p>
423 <p>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
424 reporting a problem.</p>
425 <p>If you are reporting a missing result please (if possible) include the OSM ID of the item you where expecting (i.e. node 422162)</p>
428 <tr><th>Your Query:</th><td><input type="hidden" name="report:query" value="<?php echo htmlspecialchars($sQuery); ?>" style="width:500px;"><?php echo htmlspecialchars($sQuery); ?></td></tr>
429 <tr><th>Your Email Address(opt):</th><td><input type="text" name="report:email" value="" style="width:500px;"></td></tr>
430 <tr><th>Description of Problem:</th><td><textarea name="report:description" style="width:500px;height:200px;"></textarea></td></tr>
431 <tr><td colspan="2" class="button"><input type="button" value="Cancel" onclick="$('report').style.visibility='hidden'"><input type="submit" value="Report"></td></tr>
434 <h2>Known Problems</h2>
436 <li>Countries where missed out of the index</li>
437 <li>Area Polygons relate to the search area - not the address area which would make more sense</li>
442 <script type="text/javascript">
445 foreach($aSearchResults as $iResNum => $aResult)
447 if ($aResult['aBoundingBox'])
449 echo 'panToLatLonBoundingBox('.$aResult['lat'].', '.$aResult['lon'];
450 echo ', '.$aResult['aBoundingBox'][0];
451 echo ', '.$aResult['aBoundingBox'][1];
452 echo ', '.$aResult['aBoundingBox'][2];
453 echo ', '.$aResult['aBoundingBox'][3];
454 if (isset($aResult['aPolyPoints']))
457 echo javascript_renderData($aResult['aPolyPoints']);
463 echo 'panToLatLonZoom('.$fLat.', '.$fLon.', '.$iZoom.');'."\n";
467 if (!sizeof($aSearchResults))
469 echo 'panToLatLonZoom('.$fLat.', '.$fLon.', '.$iZoom.');'."\n";