Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.02.2025, 14:53
Аспирант
Отправить личное сообщение для Feex Посмотреть профиль Найти все сообщения от Feex
 
Регистрация: 30.12.2015
Сообщений: 94

Геолокация с выводом точки на карту
Здравствуйте. Нужно получить Ширину и Долготу и вывести точку на карту (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 не нужен), карта есть, на которую нужно вывод сделать.
Помогите это всё совместить, плиз)
Я просто без понятия как подставить переменные из второго примера в карту из первого примера, и сделать это кликабельным на странице, чтобы открывалась карта с этими координатами.

Последний раз редактировалось Feex, 13.02.2025 в 15:57.
Ответить с цитированием
  #2 (permalink)  
Старый 13.02.2025, 20:35
Аспирант
Отправить личное сообщение для Feex Посмотреть профиль Найти все сообщения от Feex
 
Регистрация: 30.12.2015
Сообщений: 94

Есть вот такая реализация вывода карты на страницу:
<!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: '&copy; <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>

Как подтянуть туда Широту и Долготу из второго примера предыдущего поста (или вообще другим способом)? Чтобы при клике на кнопку метка на карте соответствовала этим данным.

Последний раз редактировалось Feex, 13.02.2025 в 20:43.
Ответить с цитированием
  #3 (permalink)  
Старый 15.02.2025, 21:39
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,802

Так?
<!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>
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2025, 01:04
Аспирант
Отправить личное сообщение для Feex Посмотреть профиль Найти все сообщения от Feex
 
Регистрация: 30.12.2015
Сообщений: 94


сразу ошибку дает.
пробовал и с 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: '&copy; <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>


как это объединить?)
Чтобы в коде страницы с картой вместо фиксированных координат:
Цитата:
var map = L.map('map').setView([51.505, -0.09], 13);
и
Цитата:
L.marker([51.5, -0.09]).addTo(map)
подставлялись нужные из скрипта.
В общем, не знаю как правильно сформулировать... Но нужно чтобы зайдя на страницу с картой, скрипт получил координаты и вывел результат с меткой на карте по вычисленным координатам)
Как именно это реализовать - для меня это неразрешимая задача, поэтому я тут)
Всё что мог найти подходящего - я нашел. Но как это обобщить - я без понятия...

Последний раз редактировалось Feex, 16.02.2025 в 01:35.
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2025, 09:45
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,802

Сообщение от Feex
сразу ошибку дает.
пробовал и с HTTP и с HTTPS - тоже самое.
Проблема в сайте, с которого вы пытаетесь получить координаты пользователя. Он не возвращает ожидаемых данных по указанному запросу.
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2025, 13:58
Аспирант
Отправить личное сообщение для Feex Посмотреть профиль Найти все сообщения от Feex
 
Регистрация: 30.12.2015
Сообщений: 94

Немного не понял, что значит не возвращает?

вот выводит координаты. куда их надо возвращать?
Т.е. если их можно получить, то их можно подставить в карту. Я правильно понимаю?

Вот код получения:
<!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)
И получим результат как на картинке.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите добавить карту на html сайт dooddy (X)HTML/CSS 3 13.10.2016 20:24
Google maps markers удаление маркеров удаляет всю карту Ducol Events/DOM/Window 2 02.09.2016 12:06
Получить все точки отрезка прямой? Gozar Оффтопик 84 29.12.2014 16:18
Flot Как передать переменную в функцию отрисовки точки на графике Ren jQuery 0 20.06.2012 14:16
Помогите поправить карту. Maxim-22 Общие вопросы Javascript 0 27.03.2012 16:03