【基于高德的地址坐标转换工具】

该文章已生成可运行项目,

1. 项目简介

本工具支持通过高德地图API实现Excel批量地址转坐标坐标转地址,并可在地图上可视化标记,支持表格内容编辑、导出。适用于地理信息批量处理、数据校验等场景。


2. 功能概述

  • Excel文件上传,自动解析表头和数据。
  • 地址转坐标:批量将地址列转为经纬度坐标。
  • 坐标转地址:批量将坐标列转为详细地址。
  • 地图可视化:所有结果可在高德地图上自动标记。
  • 表格可编辑:所有单元格(包括坐标、地址)均可直接编辑。
  • 城市代码自定义:支持下拉/输入选择城市,自动切换地理编码范围。
  • 导出Excel:可导出编辑后的完整数据。
  • 进度与状态提示:操作过程有进度条和状态提示。

3. 使用步骤

3.1 获取高德地图Web服务Key

  1. 注册并登录高德开放平台.
  2. 创建应用,获取Web服务Key。

3.2 打开工具页面

  1. 在页面顶部输入你的高德地图Web服务Key,点击“更新Key”。
  2. 选择或输入城市(支持下拉和手动输入),点击“更新城市”。

3.3 上传Excel文件

  1. 拖拽或点击选择Excel文件(支持.xlsx.xls)。
  2. 文件上传后,自动解析表头和数据,显示在表格中。

3.4 地址转坐标

  1. 在“选择地址列”下拉框中选择包含地址的列。
  2. 点击“获取坐标”,系统自动批量获取经纬度,进度条实时显示。
  3. 获取到的坐标会自动填入表格,并在地图上标记。

3.5 坐标转地址

  1. 在“选择坐标列”下拉框中选择包含坐标的列。
  2. 点击“获取地址”,系统自动批量获取详细地址,进度条实时显示。
  3. 获取到的地址会自动填入表格,并在地图上标记。

3.6 表格编辑与导出

  • 所有单元格会在最后新增两列(包括坐标、地址)均可直接编辑,内容实时同步。
  • 点击“导出Excel”可导出当前编辑后的完整数据。

4. 注意事项

  • API Key城市请根据实际需求填写,避免频繁请求导致高德API限流。
  • 城市选择支持下拉和手动输入,常用城市已内置,更多城市可自行扩展。
  • 地图边界已放大为中国全境,可自由拖拽查看全国范围。
  • 支持大批量数据处理,虽然做了随机延迟功能,但还是建议分批操作以防API限流。

5. 代码实现

系统操作截图:
在这里插入图片描述
在这里插入图片描述

下面为完整的前端HTML+JS代码,直接保存为 html 即可使用。
模拟数据以扬州为例
城市编码也可以使用中文,如:扬州市、321、32100。详细接口文档参考高德web服务地址解析

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Excel地址坐标转换工具</title>
    <!-- 引入高德地图JavaScript API -->
    <script
      type="text/javascript"
      src="https://webapi.amap.com/maps?v=1.4.15&key=7cad1eef18edbb65ef7060e41a70e45f"
    ></script>
    <style>
      body {
     
     
        font-family: Arial, sans-serif;
        margin: 0;
        padding: 20px;
        background-color: #f5f5f5;
      }
      .header {
     
     
        background: white;
        padding: 15px;
        border-radius: 8px;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        margin-bottom: 20px;
      }
      .api-key-section {
     
     
        display: flex;
        align-items: center;
        gap: 10px;
        margin-bottom: 15px;
      }
      .api-key-section input {
     
     
        flex: 1;
        padding: 8px 12px;
        border: 1px solid #ddd;
        border-radius: 4px;
        font-size: 14px;
      }
      .api-key-section button {
     
     
        padding: 8px 15px;
        background-color: #28a745;
        color: white;
        border: none;
        border-radius: 4px;
        cursor: pointer;
      }
      .api-key-section button:hover {
     
     
        background-color: #218838;
      }
      .main-container {
     
     
        display: flex;
        gap: 20px;
        height: calc(100vh - 160px);
      }
      .left-panel {
     
     
        width: 50vw;
        min-width: 350px;
        max-width: 50vw;
        background: white;
        border-radius: 8px;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        display: flex;
        flex-direction: column;
      }
      .right-panel {
     
     
        width: 50vw;
        min-width: 350px;
        max-width: 50vw;
        background: white;
        border-radius: 8px;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        overflow: hidden;
        display: flex;
        flex-direction: column;
      }
      .upload-section {
     
     
        border: 2px dashed #ccc;
        padding: 8px 10px;
        text-align: center;
        margin: 12px 20px 8px 20px;
        border-radius: 8px;
        font-size: 14px;
      }
      .upload-section.dragover {
     
     
        border-color: #007bff;
        background-color: #f8f9fa;
      }
      .controls {
     
     
        margin: 0 20px 10px 20px;
        padding: 10px;
        background-color: #f8f9fa;
        border-radius: 5px;
      }
      .controls select,
      .controls button {
     
     
        margin: 5px;
        padding: 8px 15px;
        border: 1px solid #ddd;
        border-radius: 4px;
      }
      .controls button {
     
     
        background-color: #007bff;
        color: white;
        cursor: pointer;
      }
      .controls button:hover {
     
     
        background-color: #0056b3;
      }
      .controls button:disabled {
     
     
        background-color: #6c757d;
        cursor: not-allowed;
      }
      .progress {
     
     
        margin: 0 20px 10px 20px;
        padding: 8px;
        background-color: #e9ecef;
        border-radius: 4px;
        display: none;
      }
      .progress-bar {
     
     
        width: 100%;
        height: 18px;
        background-color: #dee2e6;
        border-radius: 10px;
        overflow: hidden;
      }
      .progress-fill {
     
     
        height: 100%;
        background-color: #007bff;
        width: 0%;
        transition: width 0.3s ease;
      }
      .table-container {
     
     
        flex: 1;
        margin: 0 20px 20px 20px;
        overflow-y: auto;
        border: 1px solid #ddd;
        border-radius: 4px;
      }
      table {
     
     
        width: 100%;
        border-collapse: collapse;
        font-size: 12px;
      }
      th,
      td {
     
     
        border: 1px solid #ddd;
        padding: 8px;
        text-align: left;
        height: 36px;
        min-width: 80px;
        max-width: 300px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        position: relative;
      }
      .table-input {
     
     
        width: 100%;
        height: 100%;
        border: none;
        background: transparent;
        padding: 0 4px;
        font-size: 12px;
        box-sizing: border-box;
        outline: none;
      }
      th {
     
     
        background-color: #f2f2f2;
        font-weight: bold;
        position: sticky;
        top: 0;
        z-index: 10;
      }
      .status {
     
     
        margin: 0 20px 10px 20px;
        padding: 8px;
        border-radius: 4px;
      }
      .status.success {
     
     
        background-color: #d4edda;
        color: #155724;
        border: 1px solid #c3e6cb;
      }
      .status.error {
     
     
        background-color: #f8d7da;
        color: #721c24;
        border: 1px solid #f5c6cb;
      }
      .status.info {
     
     
        background-color: #d1ecf1;
        color: #0c5460;
        border: 1px solid #bee5eb;
      }
      #map {
     
     
        width: 100%;
        flex: 1;
        min-height: 400px;
        height: 100%;
      }
      .map-info {
     
     
        padding: 12px 15px;
        background-color: #f8f9fa;
        border-bottom: 1px solid #dee2e6;
      }
      .map-info h3 {
     
     
        margin: 0 0 8px 0;
        color: #495057;
      }
      .map-info p {
     
     
        margin: 4px 0;
        color: #6c757d;
        font-size: 13px;
      }
    </style>
  </head>
  <body>
    <!-- 头部区域 -->
    <div class="header">
      <h1>Excel地址坐标转换工具</h1>
      <div class="api-key-section">
        <label for="apiKeyInput">高德地图Web服务Key:</label>
        <input type="text" id="apiKeyInput" placeholder="请输入您的高德地图Web服务Key" />
        <button onclick="updateApiKey()">更新Key</button>
        <label for="cityCodeInput">城市:</label>
        <input
          list="cityList"
          id="cityCodeInput"
          placeholder="请输入城市名或代码"
          value="扬州市"
          style="width: 120px"
        />
        <datalist id="cityList">
          <option value="北京市" data-code="010"></option>
          <option value="上海市" data-code="021"></option>
          <option value="广州市" data-code="020"></option>
          <option value="深圳市" data-code="0755"></option>
          <option value="南京市" data-code="025"></option>
          <option value="扬州市" data-code="321"></option>
          <option value="重庆市" data-code="023"></option>
          <option value="天津市" data-code="022"></option>
          <option value="成都市" data-code="028"></option>
          <option value="西安市" data-code="029"></option>
          <option value="武汉市" data-code="027"></option>
          <option value="苏州市" data-code="0512"
本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值