Javascript 从输入字段中获取位置并将其传递到MapBox地图上

Javascript 从输入字段中获取位置并将其传递到MapBox地图上,javascript,html,web-applications,mapbox,mapbox-gl-js,Javascript,Html,Web Applications,Mapbox,Mapbox Gl Js,我正在创建一个网站,它获取位置输入(起点和终点),并将其转发到地图,而地图将使用MapBox API显示路径。所以我在这里面临的问题是,如何获取输入值并将其转换为坐标,并在地图上显示它们。稍后,程序将计算两个端点之间的距离,并将其显示出来 以下是我的HTML代码,其中包含输入字段: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8">

我正在创建一个网站,它获取位置输入(起点和终点),并将其转发到地图,而地图将使用MapBox API显示路径。所以我在这里面临的问题是,如何获取输入值并将其转换为坐标,并在地图上显示它们。稍后,程序将计算两个端点之间的距离,并将其显示出来

以下是我的HTML代码,其中包含输入字段:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src='https://api.mapbox.com/mapbox-gl-js/v2.1.1/mapbox-gl.js'></script>
  <link href='https://api.mapbox.com/mapbox-gl-js/v2.1.1/mapbox-gl.css' rel='stylesheet' />
  <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
  <meta charset="utf-8">
  <title>Distance btw Cities App</title>
  <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">

  <!-- Bootstrap -->
  <link href="css/bootstrap.min.css" rel="stylesheet">
  <link href="styling.css" rel="stylesheet">
  <link href='https://fonts.googleapis.com/css?family=Arvo' rel='stylesheet' type='text/css'>

  <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
  <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>

<body>

  <div class="jumbotron">
    <div class="container-fluid">
      <h1>Distance between cities App.</h1>
      <p>Our app will help you calculate travelling distances.</p>
      <form class="form-horizontal">
        <div id='geocoder-container' class="form-group">
          <label for="from" class="col-xs-2 control-label">From:</label>
          <div class="col-xs-10">
            <input type="text" id="from" placeholder="Origin" class="form-control">
          </div>
        </div>
        <div class="form-group">
          <label for="to" class="col-xs-2 control-label">To:</label>
          <div class="col-xs-10">
            <input type="text" id="to" placeholder="Destination" class="form-control">
          </div>
        </div>
      </form>

      <div class="col-xs-offset-2 col-xs-10">
        <button class="btn btn-info btn-lg" onclick="calcRoute();">Submit</button>
      </div>
    </div>
    <div class="container-fluid">
      <div id="googleMap">

      </div>
      <div id="output">

      </div>
    </div>

  </div>

  <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <!-- Include all compiled plugins (below), or include individual files as needed -->
  <script src="js/bootstrap.min.js"></script>
  <script
    src="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v4.5.1/mapbox-gl-geocoder.min.js"></script>
  <link rel="stylesheet"
    href="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v4.5.1/mapbox-gl-geocoder.css" type="text/css">
  <!-- Promise polyfill script required to use Mapbox GL Geocoder in IE 11 -->

  <script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.min.js"></script>
  <script src="javascript.js"></script>
</body>

</html>

此外,我不知道如何告诉程序哪个输入是我的源,哪个输入是目标。在遵循此代码时。这真是一团糟,因为我不能把我的输入字段作为我的位置查找器。这两个位置都不会反映在地图上。请有人帮我解决这个问题,这真令人沮丧。

你每次都在创建地图,这是你只需要一次的东西。您应该创建另一个方法,根据您的需要使用map.flyTo map.panTo和map.jumpTo等移动地图的可用方法从successLocation和error location调用Hanks jscastro,但这并不能真正解决我的问题。我仍然面临着同样的问题,如何使用autocomplete将上面的输入字段作为我的位置查找器,并将位置作为坐标发送到地图。你能帮我吗?
mapboxgl.accessToken = 'Token';


// Get Current Location
navigator.geolocation.getCurrentPosition(successLocation, errorLocation, { enableHighAccuracy: true })


// Live Coordinates
function successLocation(position) {
    setupMap([position.coords.longitude, position.coords.latitude])
}

// Default Coordinates if location fails
function errorLocation() {
    setupMap([38.189980, 24.023176])
}
// Create Map
function setupMap(center) {
    var map = new mapboxgl.Map({
        container: 'googleMap',
        style: 'mapbox://styles/mapbox/streets-v11',
        center: center,
        zoom: 12,
    })
    // Navigation Controls
    const nav = new mapboxgl.NavigationControl()
    map.addControl(nav)

    var geocoder = new MapboxGeocoder({ accessToken: mapboxgl.accessToken });
    document.getElementById('from').appendChild(geocoder.onAdd(map))
}