]> git.openstreetmap.org Git - nominatim-ui.git/blobdiff - src/assets/js/searchpage.js
Allow map to wrap-around, still longitude should be -180..+180
[nominatim-ui.git] / src / assets / js / searchpage.js
index 391da96da3df9552fe9e14adb678e8e531d8c9f8..44e7a7941068550b0179b8907d3df7aeea63160b 100755 (executable)
@@ -6,6 +6,10 @@
 
 function display_map_position(mouse_lat_lng){
 
+    if (mouse_lat_lng) {
+        mouse_lat_lng = map.wrapLatLng(mouse_lat_lng);
+    }
+
     html_mouse = "mouse position " + (mouse_lat_lng ? [mouse_lat_lng.lat.toFixed(5), mouse_lat_lng.lng.toFixed(5)].join(',') : '-');
     html_click = "last click: " + (last_click_latlng ? [last_click_latlng.lat.toFixed(5),last_click_latlng.lng.toFixed(5)].join(',') : '-');
 
@@ -20,9 +24,10 @@ function display_map_position(mouse_lat_lng){
 
     $('#map-position-inner').html([html_center,html_zoom,html_viewbox,html_click,html_mouse].join('<br/>'));
 
+    var center_lat_lng = map.wrapLatLng(map.getCenter());
     var reverse_params = {
-        // lat: map.getCenter().lat.toFixed(5),
-        // lon: map.getCenter().lng.toFixed(5),
+        lat: center_lat_lng.lat.toFixed(5),
+        lon: center_lat_lng.lng.toFixed(5)
         // zoom: 2,
         // format: 'html'
     }
@@ -46,9 +51,8 @@ function init_map_on_search_page(is_reverse_search, nominatim_results, request_l
 
 
     L.tileLayer(get_config_value('Map_Tile_URL'), {
-        noWrap: true, // otherwise we end up with click coordinates like latitude -728
         // moved to footer
-        attribution: (get_config_value('Map_Tile_Attribution') || null ) //'&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
+        attribution: (get_config_value('Map_Tile_Attribution') || null ) //'&copy; <a href="https://osm.org/copyright">OpenStreetMap</a> contributors'
     }).addTo(map);
 
     // console.log(Nominatim_Config);
@@ -153,17 +157,17 @@ function init_map_on_search_page(is_reverse_search, nominatim_results, request_l
             });
             layerGroup.addLayer(circle);            
         }
-        if (result.aBoundingBox){
+        if (result.boundingbox){
 
-            var bounds = [[result.aBoundingBox[0]*1,result.aBoundingBox[2]*1], [result.aBoundingBox[1]*1,result.aBoundingBox[3]*1]];
+            var bounds = [[result.boundingbox[0]*1,result.boundingbox[2]*1], [result.boundingbox[1]*1,result.boundingbox[3]*1]];
             map.fitBounds(bounds);
 
-            if (result.asgeojson && result.asgeojson.match(/(Polygon)|(Line)/) ){
+            if (result.geojson && result.geojson.type.match(/(Polygon)|(Line)/) ){
 
                 var geojson_layer = L.geoJson(
-                    parse_and_normalize_geojson_string(result.asgeojson),
+                    parse_and_normalize_geojson_string(result.geojson),
                     {
-                        // http://leafletjs.com/reference-1.0.3.html#path-option
+                        // https://leafletjs.com/reference-1.0.3.html#path-option
                         style: function(feature) {
                             return { interactive: false, color: 'blue' }; 
                         }
@@ -205,7 +209,7 @@ function init_map_on_search_page(is_reverse_search, nominatim_results, request_l
     if ( is_reverse_search ){
         map.on('click', function(e){
             $('form input[name=lat]').val( e.latlng.lat);
-            $('form input[name=lon]').val( e.latlng.lng);
+            $('form input[name=lon]').val( e.latlng.wrap().lng);
             $('form').submit();
         });
 
@@ -248,7 +252,6 @@ jQuery(document).ready(function(){
 
     var search_params = new URLSearchParams(location.search);
 
-
     // return view('search', [
     //     'sQuery' => $sQuery,
     //     'bAsText' => '',
@@ -262,57 +265,81 @@ jQuery(document).ready(function(){
 
     if (is_reverse_search) {
         var api_request_params = {
-            lat: typeof(search_params.get('lat') !== 'undefined') ? search_params.get('lat') : get_config_value('Map_Default_Lat'),
-            lon: typeof(search_params.get('lon') !== 'undefined') ? search_params.get('lon') : get_config_value('Map_Default_Lon'),
-            zoom: (search_params.get('zoom') !== '' ? search_params.get('zoom') : get_config_value('Map_Default_Zoom')),
+            // lat: typeof(search_params.get('lat') !== 'undefined') ? search_params.get('lat') : get_config_value('Map_Default_Lat'),
+            // lon: typeof(search_params.get('lon') !== 'undefined') ? search_params.get('lon') : get_config_value('Map_Default_Lon'),
+            lat: search_params.get('lat'),
+            lon: search_params.get('lon'),
+            zoom: (search_params.get('zoom') !== '' ? search_params.get('zoom') : get_config_value('Reverse_Default_Search_Zoom')),
             format: 'jsonv2'
         }
 
-        fetch_from_api('reverse', api_request_params, function(aPlace){
+        var context = {
+            // aPlace: aPlace,
+            fLat: api_request_params.lat,
+            fLon: api_request_params.lon,
+            iZoom: (search_params.get('zoom') !== '' ? api_request_params.zoom : get_config_value('Reverse_Default_Search_Zoom'))
+        };
 
-            if (aPlace.error) {
-                aPlace = null;
-            }
 
-            var context = {
-                aPlace: aPlace,
-                fLat: api_request_params.lat,
-                fLon: api_request_params.lon,
-                iZoom: (search_params.get('zoom') !== '' ? api_request_params.zoom : undefined)
-            };
+        if (api_request_params.lat && api_request_params.lon) {
+
+            fetch_from_api('reverse', api_request_params, function(aPlace){
 
+                if (aPlace.error) {
+                    aPlace = null;
+                }
+
+                context.aPlace = aPlace;
+
+                render_template($('main'), 'reversepage-template', context);
+
+                init_map_on_search_page(is_reverse_search, [aPlace], api_request_params.lat, api_request_params.lon, api_request_params.zoom);
+
+                update_data_date();
+            });
+        } else {
             render_template($('main'), 'reversepage-template', context);
 
-            init_map_on_search_page(is_reverse_search, [aPlace], api_request_params.lat, api_request_params.lon, api_request_params.zoom);
+            init_map_on_search_page(is_reverse_search, [], get_config_value('Map_Default_Lat'), get_config_value('Map_Default_Lon'), get_config_value('Map_Default_Zoom'));
+        }
 
-            update_data_date();
-        });
     } else {
         var api_request_params = {
             q: search_params.get('q'),
             polygon_geojson: search_params.get('polygon_geojson') ? 1 : 0,
-            polygon: search_params.get('polygon'),
+            viewbox: search_params.get('viewbox'),
             format: 'jsonv2'
         };
 
-        fetch_from_api('search', api_request_params, function(aResults){
+        var context = {
+            // aSearchResults: aResults,
+            sQuery: api_request_params.q,
+            sViewBox: '',
+            env: Nominatim_Config,
+            sMoreURL: ''
+        };
+
+        if (api_request_params.q) {
+
+            fetch_from_api('search', api_request_params, function(aResults){
+
+                context.aSearchResults = aResults;
 
-            var context = {
-                aSearchResults: aResults,
-                sQuery: api_request_params.q,
-                sViewBox: '',
-                env: Nominatim_Config,
-                sMoreURL: ''
-            };
+                render_template($('main'), 'searchpage-template', context);
 
+                init_map_on_search_page(is_reverse_search, aResults, get_config_value('Map_Default_Lat'), get_config_value('Map_Default_Lon'), get_config_value('Map_Default_Zoom'));
+
+                $('#q').focus();
+
+                update_data_date();
+            });
+        } else {
             render_template($('main'), 'searchpage-template', context);
 
-            init_map_on_search_page(is_reverse_search, aResults);
+            init_map_on_search_page(is_reverse_search, [], get_config_value('Map_Default_Lat'), get_config_value('Map_Default_Lon'), get_config_value('Map_Default_Zoom'));
+        }
 
-            $('#q').focus();
 
-            update_data_date();
-        });
     }
 });