Можно ли поместить маркеры GeoJSON в переменную, чтобы я мог поставить линию между «текущим местоположением» и «ближайшим маркером»? - PullRequest
0 голосов
/ 15 мая 2019

Я устанавливаю карту со всеми антеннами башни в США. Я пытаюсь сделать так, чтобы, когда вы нажимаете текущее местоположение или вводите адрес, ближайшая антенная вышка к вашему «опущенному штырю» вашего местоположения рисует линию между ними.

Мне удалось поместить геолокацию в переменную, и когда я нажимаю значок местоположения, она рисует линию между мной и теми координатами, которые я там уже ввел, например ([111, 111]). Но я хочу также превратить иконки GeoJSON в координаты, как я могу это сделать?

Пожалуйста, смотрите codepen: https://codepen.io/richardv/pen/bJgOKE

<html>
<head>
<meta charset='utf-8' />
<title>Add a geocoder</title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.54.0/mapbox-gl.js'></script>
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.54.0/mapbox-gl.css' rel='stylesheet' />
<style>
body { margin:0; padding:0; }
#map { position:absolute; top:0; bottom:0; width:100%; }
</style>
</head>
<body>

<script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v4.2.0/mapbox-gl-geocoder.min.js'></script>
<link rel='stylesheet' href='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v4.2.0/mapbox-gl-geocoder.css' type='text/css' />
<div id='map'></div>

<script>



mapboxgl.accessToken = 'pk.eyJ1IjoicnZhbGVudGEiLCJhIjoiY2p1YWRrOGEyMDFrMTN5cXR3eW9qazA4NyJ9.CBomAqHnL7P5Miq88svWiw';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/rvalenta/cjuadldsc5dfu1fppjl4gxc6k',
center: [-117, 33],
zoom: 10
});

map.addControl(new MapboxGeocoder({
accessToken: mapboxgl.accessToken,
mapboxgl: mapboxgl
}));
  // Add geolocate control to the map.
//map.addControl(new mapboxgl.GeolocateControl({
//positionOptions: {
//enableHighAccuracy: true
//},
//trackUserLocation: true
//}));




//It will return an array ["latitude","longitude"]

//convert the first element of the array to float num

//var lat = parseFloat([-117]);
//convert the second element of the array to float num

//var lng = parseFloat([33]);

var geolocate = new mapboxgl.GeolocateControl();

map.addControl(geolocate);

geolocate.on('geolocate', function(e) {
      var lon = e.coords.longitude;
      var lat = e.coords.latitude;
      var position = [lon, lat]; 
      var tvlon = 111;
      var tvlat = 111;
      console.log(position);

geolocate.on('geolocate', function(e) { 

map.addLayer({
"id": "route",
"type": "line",
"source": {
"type": "geojson",
"data": {
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[lon, lat],
[tvlon, tvlat]
]
}
}
},
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "green",
"line-width": 8
}
});
});
});


</script>

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...