Геолокация с выводом точки на карту
Здравствуйте. Нужно получить Ширину и Долготу и вывести точку на карту (https://www.openstreetmap.org/#map=1...53400/2.348601).
Именно на эту карту(openstreetmap.org) - яндекс и гугл карты не подходят по ряду причин. Что удалось найти: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> body { padding: 20px; background-color: #ffffc9; } button { margin: 0.5rem 0; } </style> </head> <body> <button id="find-me">Show my location</button><br /> <p id="status"></p> <a id="map-link" target="_blank"></a> <script type="text/javascript"> function geoFindMe() { const status = document.querySelector("#status"); const mapLink = document.querySelector("#map-link"); mapLink.href = ""; mapLink.textContent = ""; function success(position) { const latitude = position.coords.latitude; const longitude = position.coords.longitude; status.textContent = ""; mapLink.href = `https://www.openstreetmap.org/#map=18/${latitude}/${longitude}`; mapLink.textContent = `Latitude: ${latitude} °, Longitude: ${longitude} °`; } function error() { status.textContent = "Unable to retrieve your location"; } if (!navigator.geolocation) { status.textContent = "Geolocation is not supported by your browser"; } else { status.textContent = "Locating…"; navigator.geolocation.getCurrentPosition(success, error); } } document.querySelector("#find-me").addEventListener("click", geoFindMe); </script> </body> </html>Тут это всё реализовано, НО! эта функция доступна только в безопасном контексте (HTTPS)! Еще и часто выдает ошибки... Т.е. не подходит для моей задачи, хотя там используется именно та карта, которая мне нужна. Еще нашел получение Широты и Долготы. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>TEST</title> <script src="//code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script> <style type="text/css"> body { font-family:Arial; font-size:20px; margin: 0; padding: 0; } span { font-weight: bold;" font-size:20px; } </style> </head> <body> <center><br> <div class="title">INFORMATION:<br> Latitude: <span class="lat"></span>, Longitude: <span class="lon"></span><br> </div> <script language="JavaScript"> $.getJSON("//ip-api.com/json/?lang=en&fields=lat,lon", function(data) { var data_body = ""; $.each(data, function(k, v) { data_body += "<b>" + k + "</b> : <i>" + v + "</i><br />"; }); $(".lat").html(data.lat); $(".lon").html(data.lon); }); </script> </center> </body> </html> во втором примере не работает с HTTPS (на платной версии работает). но на странице HTML(http) выглядит так: ![]() Как теперь это всё скрестить?) Получение координат есть (HTTPS не нужен), карта есть, на которую нужно вывод сделать. Помогите это всё совместить, плиз) Я просто без понятия как подставить переменные из второго примера в карту из первого примера, и сделать это кликабельным на странице, чтобы открывалась карта с этими координатами. :-? |
Есть вот такая реализация вывода карты на страницу:
<!DOCTYPE html> <html> <head> <title>map</title> <meta charset="utf-8"> <!-- стили карты --> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { min-height: 100vh; display: grid; place-content: center; place-items: center; background-color: rgb(241, 241, 241); } #map { width: 680px; height: 420px; border-radius: 6px; box-shadow: 0px 0px 10px #000; } button { padding: 0.25em 0.75em; margin: 1em 0.5em; cursor: pointer; user-select: none; } </style> </head> <body> <div id="map" class="map map-home" style="height: 420px; margin-top: 50px"></div> <button id="my_position">My Position</button> <script type="text/javascript"> var map = L.map('map').setView([51.505, -0.09], 13); L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' }).addTo(map); L.marker([51.5, -0.09]).addTo(map) .bindPopup('A pretty CSS popup.<br> Easily customizable.') .openPopup(); </script> </body> </html> Как подтянуть туда Широту и Долготу из второго примера предыдущего поста (или вообще другим способом)? Чтобы при клике на кнопку метка на карте соответствовала этим данным. |
Так?
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> body { padding: 20px; background-color: #ffffc9; } button { margin: 0.5rem 0; } </style> </head> <body> <p id="status"></p> <a id="map-link" target="_blank"></a> <script type="text/javascript"> window.addEventListener("DOMContentLoaded", function() { const status = document.querySelector("#status"); const mapLink = document.querySelector("#map-link"); mapLink.href = ""; mapLink.textContent = ""; status.textContent = "Locating…"; fetch("//ip-api.com/json/?lang=en&fields=lat,lon").then(function (res) { return res.json(); }).then(function(data) { status.textContent = ""; mapLink.href = `https://www.openstreetmap.org/#map=18/${latitude}/${longitude}`; mapLink.textContent = `Latitude: ${data.lat} °, Longitude: ${data.lon} °`; }).catch(function () { status.textContent = "Unable to retrieve your location"; }); }); </script> </body> </html> |
![]() сразу ошибку дает. пробовал и с HTTP и с HTTPS - тоже самое. Но мысль в нужную сторону) Вот есть страница с выводом карты: <!DOCTYPE html> <html> <head> <title>map</title> <meta charset="utf-8"> <!-- стили карты --> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { min-height: 100vh; display: grid; place-content: center; place-items: center; background-color: rgb(241, 241, 241); } #map { width: 680px; height: 420px; border-radius: 6px; box-shadow: 0px 0px 10px #000; } button { padding: 0.25em 0.75em; margin: 1em 0.5em; cursor: pointer; user-select: none; } </style> </head> <body> <div id="map" class="map map-home" style="height: 420px; margin-top: 50px"></div> <button id="my_position">My Position</button> <script type="text/javascript"> var map = L.map('map').setView([51.505, -0.09], 13); L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' }).addTo(map); L.marker([51.5, -0.09]).addTo(map) .bindPopup('A pretty CSS popup.<br> Easily customizable.') .openPopup(); </script> </body> </html> И уже есть этот скрипт: <script type="text/javascript"> window.addEventListener("DOMContentLoaded", function() { const status = document.querySelector("#status"); const mapLink = document.querySelector("#map-link"); mapLink.href = ""; mapLink.textContent = ""; status.textContent = "Locating…"; fetch("//ip-api.com/json/?lang=en&fields=lat,lon").then(function (res) { return res.json(); }).then(function(data) { status.textContent = ""; mapLink.href = `https://www.openstreetmap.org/#map=18/${latitude}/${longitude}`; mapLink.textContent = `Latitude: ${data.lat} °, Longitude: ${data.lon} °`; }).catch(function () { status.textContent = "Unable to retrieve your location"; }); }); </script> как это объединить?) Чтобы в коде страницы с картой вместо фиксированных координат: Цитата:
Цитата:
В общем, не знаю как правильно сформулировать... Но нужно чтобы зайдя на страницу с картой, скрипт получил координаты и вывел результат с меткой на карте по вычисленным координатам) Как именно это реализовать - для меня это неразрешимая задача, поэтому я тут) Всё что мог найти подходящего - я нашел. Но как это обобщить - я без понятия... |
Цитата:
|
Немного не понял, что значит не возвращает?
![]() вот выводит координаты. куда их надо возвращать? Т.е. если их можно получить, то их можно подставить в карту. Я правильно понимаю? Вот код получения: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>TEST</title> <style type="text/css"> BODY{ font-family:Arial; font-size:20pt; margin: 0; padding: 0; } span { font-weight: bold;" } </style> </head> <body> <center><br> <div class="title"><b>INFORMATION:</b><br> lat: <span class="lat"></span>, lon: <span class="lon"></span><br> <br> </div> <script src="//code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script> <script language="JavaScript"> $.getJSON("//ip-api.com/json/?lang=en&fields=lat,lon", function(data) { var data_body = ""; $.each(data, function(k, v) { data_body += "<b>" + k + "</b> : <i>" + v + "</i><br />"; }); $(".lat").html(data.lat); $(".lon").html(data.lon); }); </script> </center> </body> </html> Скопируйте, вставьте в любой HTML редактор (без HTTPS) И получим результат как на картинке. |
Часовой пояс GMT +3, время: 21:22. |