X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/832547f192904a9ec92e173c27a91e0874fcc757..a796edb9ced6d46c7edf9a8a7d1ccad3564da004:/website/js/nominatim-ui.js diff --git a/website/js/nominatim-ui.js b/website/js/nominatim-ui.js index e32385f7..25233643 100644 --- a/website/js/nominatim-ui.js +++ b/website/js/nominatim-ui.js @@ -1,6 +1,22 @@ var map; var last_click_latlng; +function parse_and_normalize_geojson_string(raw_string){ + // normalize places the geometry into a featurecollection, similar to + // https://github.com/mapbox/geojson-normalize + var parsed_geojson = { + type: "FeatureCollection", + features: [ + { + type: "Feature", + geometry: JSON.parse(raw_string), + properties: {} + } + ] + }; + return parsed_geojson; +} + jQuery(document).on('ready', function(){ if ( !$('#search-page,#reverse-page').length ){ return; } @@ -72,11 +88,26 @@ jQuery(document).on('ready', function(){ html_viewbox = "viewbox: " + map_viewbox_as_string(); $('#map-position-inner').html([html_center,html_zoom,html_viewbox,html_click,html_mouse].join('
')); + + var reverse_params = { + lat: map.getCenter().lat.toFixed(5), + lon: map.getCenter().lng.toFixed(5), + zoom: map.getZoom(), + format: 'html' + } + $('#switch-to-reverse').attr('href', 'reverse.php?' + $.param(reverse_params)); + $('input#use_viewbox').trigger('change'); } + function update_viewbox_field(){ + // hidden HTML field + $('input[name=viewbox]').val( $('input#use_viewbox').prop('checked') ? map_viewbox_as_string() : ''); + } + map.on('move', function(e) { display_map_position(); + update_viewbox_field(); }); map.on('mousemove', function(e) { @@ -94,7 +125,7 @@ jQuery(document).on('ready', function(){ $('input#use_viewbox').on('change', function(){ - $('input[name=viewbox]').val( $(this).prop('checked') ? map_viewbox_as_string() : ''); + update_viewbox_field(); }); @@ -102,10 +133,11 @@ jQuery(document).on('ready', function(){ function map_viewbox_as_string() { // since .toBBoxString() doesn't round numbers return [ - map.getBounds().getSouthWest().lat.toFixed(5), - map.getBounds().getSouthWest().lng.toFixed(5), - map.getBounds().getNorthEast().lat.toFixed(5), - map.getBounds().getNorthEast().lng.toFixed(5) ].join(','); + map.getBounds().getSouthWest().lng.toFixed(5), // left + map.getBounds().getNorthEast().lat.toFixed(5), // top + map.getBounds().getNorthEast().lng.toFixed(5), // right + map.getBounds().getSouthWest().lat.toFixed(5) // bottom + ].join(','); } function map_link_to_osm(){ return "http://openstreetmap.org/#map=" + map.getZoom() + "/" + map.getCenter().lat + "/" + map.getCenter().lng; @@ -143,12 +175,18 @@ jQuery(document).on('ready', function(){ var bounds = [[result.aBoundingBox[0]*1,result.aBoundingBox[2]*1], [result.aBoundingBox[1]*1,result.aBoundingBox[3]*1]]; map.fitBounds(bounds); - if (result.astext && result.astext.match(/(POLY)|(LINE)/) ){ - var geojson_layer = L.geoJson(null, { - // http://leafletjs.com/reference.html#geojson-style - style: function(feature) { return { clickable: false, color: 'blue' }; } - }); - omnivore.wkt.parse(result.astext,null,geojson_layer); + + if (result.asgeojson && result.asgeojson.match(/(Polygon)|(Line)/) ){ + + var geojson_layer = L.geoJson( + parse_and_normalize_geojson_string(result.asgeojson), + { + // http://leafletjs.com/reference-1.0.3.html#path-option + style: function(feature) { + return { interactive: false, color: 'blue' }; + } + } + ); layerGroup.addLayer(geojson_layer); } else { @@ -195,6 +233,14 @@ jQuery(document).on('ready', function(){ $('form input[name=lon]').val( e.latlng.lng); $('form').submit(); }); + + $('#switch-coords').on('click', function(e){ + var lat = $('form input[name=lat]').val(); + var lon = $('form input[name=lon]').val(); + $('form input[name=lat]').val(lon); + $('form input[name=lon]').val(lat); + $('form').submit(); + }); } highlight_result(0, false); @@ -228,14 +274,18 @@ jQuery(document).on('ready', function(){ var circle = L.circleMarker([nominatim_result.lat,nominatim_result.lon], { radius: 10, weight: 2, fillColor: '#ff7800', color: 'blue', opacity: 0.75}); map.addLayer(circle); - if ( nominatim_result.outlinestring ){ - - var geojson_layer = L.geoJson(null, { - // http://leafletjs.com/reference.html#geojson-style - style: function(feature) { return { clickable: false, color: 'blue' }; } - }); - omnivore.wkt.parse(nominatim_result.outlinestring,null,geojson_layer); - layerGroup.addLayer(geojson_layer); + if ( nominatim_result.asgeojson ){ + + var geojson_layer = L.geoJson( + parse_and_normalize_geojson_string(nominatim_result.asgeojson), + { + // http://leafletjs.com/reference-1.0.3.html#path-option + style: function(feature) { + return { interactive: false, color: 'blue' }; + } + } + ); + map.addLayer(geojson_layer); map.fitBounds(geojson_layer.getBounds()); } else { map.setView([nominatim_result.lat,nominatim_result.lon],10);