高德地图 API 拿到当前定位和目的地址转经纬度,实现路径规划

高德地图 API 拿到当前定位和目的地址转经纬度,实现路径规划

高德地图 API
是一个强大的工具,可以帮助我们在网页或应用中实现地图相关功能,比如定位、地址解析(将地址转为经纬度)以及路径规划(从当前位置到目的地的路线)。


一、准备工作:获取高德地图 API 密钥

在使用高德地图 API 之前,你需要先去 高德开放平台 注册账号并申请一个 API 密钥(Key)。这个密钥是你调用高德地图服务的“通行证”,没有它就无法使用高德地图的功能。


二、实现定位功能

定位功能的作用是获取用户当前的经纬度,比如你打开一个网页,网页会自动告诉你“你现在的位置是某某地方”。

实现步骤:
  1. 在网页中引入高德地图的 JavaScript API。
  2. 使用高德地图的定位插件 AMap.Geolocation 来获取用户的当前位置。
示例代码:
<script src="https://webapi.amap.com/maps?v=1.4.15&key=你的高德地图API密钥"></script>
<script>
  // 创建地图实例
  const map = new AMap.Map('map-container', {
    resizeEnable: true, // 地图大小可调整
    zoom: 11 // 默认缩放级别
  });

  // 添加定位插件
  map.plugin('AMap.Geolocation', function () {
    const geolocation = new AMap.Geolocation({
      enableHighAccuracy: true, // 是否使用高精度定位
      timeout: 10000, // 超过10秒停止定位
      zoomToAccuracy: true // 自动调整地图视野到定位点
    });

    // 开始定位
    geolocation.getCurrentPosition(function (status, result) {
      if (status === 'complete') {
        const position = result.position; // 获取定位结果
        console.log('当前位置经纬度:', position.lng, position.lat);
      } else {
        console.error('定位失败:', result);
      }
    });
  });
</script>
结果:

运行这段代码后,用户的当前位置(经纬度)会被打印到控制台。


三、输入地址获取经纬度

有时候我们需要用户输入一个地址,比如“北京市天安门”,然后通过高德地图 API 把这个地址转换成经纬度。这个过程叫做“地址解析”或“地理编码”。

实现步骤:
  1. 使用高德地图的地理编码插件 AMap.Geocoder
  2. 调用 getLocation 方法,将地址转换为经纬度。
示例代码:
<script>
  // 地址解析功能
  function getCoordinates(address) {
    AMap.plugin('AMap.Geocoder', function () {
      const geocoder = new AMap.Geocoder();

      // 将地址解析为经纬度
      geocoder.getLocation(address, function (status, result) {
        if (status === 'complete' && result.geocodes.length > 0) {
          const location = result.geocodes[0].location; // 获取经纬度
          console.log('地址解析成功:', location.lng, location.lat);
        } else {
          console.error('地址解析失败,请检查输入的地址');
        }
      });
    });
  }

  // 示例:解析“佛山市美的08空间”的经纬度
  getCoordinates('佛山市美的08空间');
</script>
结果:

运行这段代码后,输入的地址会被解析成经纬度,并打印到控制台。


四、路径规划:从当前位置到目的地

路径规划的作用是根据起点和终点的经纬度,计算出一条路线,并在地图上显示出来。比如你想从“当前位置”到“北京市天安门”,高德地图会帮你规划出一条路线。

实现步骤:
  1. 使用高德地图的路径规划插件 AMap.Driving
  2. 调用 search 方法,传入起点和终点的经纬度。
示例代码:
<script>
  // 路径规划功能
  function planRoute(start, end) {
    AMap.plugin('AMap.Driving', function () {
      const driving = new AMap.Driving({
        map: map // 将路线显示在地图上
      });

      // 规划路线
      driving.search(start, end, function (status, result) {
        if (status === 'complete') {
          console.log('路径规划成功:', result);
        } else {
          console.error('路径规划失败:', result);
        }
      });
    });
  }

  // 示例:从当前位置到天安门
  const currentLocation = [116.397428, 39.90923]; // 假设当前位置(经纬度)
  const destination = [116.404, 39.915]; // 天安门的经纬度
  planRoute(currentLocation, destination);
</script>
结果:

运行这段代码后,地图上会显示从当前位置到目的地的路线。


五、完整流程:定位 + 地址解析 + 路径规划

我们可以把以上功能整合起来,形成一个完整的流程:

  1. 定位获取用户当前位置。
  2. 用户输入目的地地址,解析成经纬度。
  3. 根据当前位置和目的地的经纬度,规划出一条路线。
示例代码:
<div id="map-container" style="width: 100%; height: 500px;"></div>
<input id="address-input" placeholder="请输入目的地地址" />
<button onclick="startRoutePlanning()">规划路线</button>

<script>
  let map, currentLocation;

  // 初始化地图并定位
  function initMap() {
    map = new AMap.Map('map-container', {
      resizeEnable: true,
      zoom: 11
    });

    map.plugin('AMap.Geolocation', function () {
      const geolocation = new AMap.Geolocation({
        enableHighAccuracy: true,
        timeout: 10000,
        zoomToAccuracy: true
      });

      geolocation.getCurrentPosition(function (status, result) {
        if (status === 'complete') {
          currentLocation = [result.position.lng, result.position.lat];
          console.log('当前位置:', currentLocation);
        } else {
          console.error('定位失败:', result);
        }
      });
    });
  }

  // 地址解析
  function getCoordinates(address, callback) {
    AMap.plugin('AMap.Geocoder', function () {
      const geocoder = new AMap.Geocoder();
      geocoder.getLocation(address, function (status, result) {
        if (status === 'complete' && result.geocodes.length > 0) {
          const location = result.geocodes[0].location;
          callback([location.lng, location.lat]);
        } else {
          alert('地址解析失败,请检查输入的地址');
        }
      });
    });
  }

  // 路径规划
  function planRoute(start, end) {
    AMap.plugin('AMap.Driving', function () {
      const driving = new AMap.Driving({ map: map });
      driving.search(start, end, function (status, result) {
        if (status === 'complete') {
          console.log('路径规划成功:', result);
        } else {
          console.error('路径规划失败:', result);
        }
      });
    });
  }

  // 开始规划路线
  function startRoutePlanning() {
    const address = document.getElementById('address-input').value;
    if (!address) {
      alert('请输入目的地地址');
      return;
    }

    getCoordinates(address, function (destination) {
      if (currentLocation) {
        planRoute(currentLocation, destination);
      } else {
        alert('定位失败,请稍后重试');
      }
    });
  }

  // 初始化地图
  initMap();
</script>

通过高德地图 API,我们可以轻松实现以下功能:

  1. 定位:获取用户当前位置。
  2. 地址解析:将地址转换为经纬度。
  3. 路径规划:从当前位置到目的地的路线。
高德地图API可以用来获取地址的经纬度。首先,你需要创建一个个人账户,并在应用管理界面创建一个新的应用。选择"Web服务"服务平台,这样创建出来的密钥才能使用"地理/逆地理编码"模块。\[2\]然后,你可以使用Python来获取单个或多个位置的经纬度。对于单个位置,你可以使用以下代码: ```python import requests import json def coords(city): url = 'https://restapi.amap.com/v3/geocode/geo' params = { 'key': '你的高德密钥', 'address': city } res = requests.get(url, params) jd = json.loads(res.text) return jd\['geocodes'\]\[0\]\['location'\] city = '北京市' location = coords(city) print(location) ``` 对于多个位置,你可以将它们放在一个列表中,并使用循环来获取它们的经纬度: ```python import requests import json def coords(city): url = 'https://restapi.amap.com/v3/geocode/geo' params = { 'key': '你的高德密钥', 'address': city } res = requests.get(url, params) jd = json.loads(res.text) return jd\['geocodes'\]\[0\]\['location'\] areas = \['xxx', 'yyy', 'zzz'\] for area in areas: location = coords(area) print(location) ``` 在以上代码中,你需要将`'你的高德密钥'`替换为你在高德地图API上获取的密钥。这样,你就可以使用高德地图API来获取地址的经纬度了。 #### 引用[.reference_title] - *1* *2* *3* [Python调用高德地图API获取中文地址对应的经纬度](https://blog.csdn.net/weixin_44447680/article/details/105943233)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值