高德地图开发-常用api踩坑使用

2023-11-13

一、高德地图的加载初始化

在这就踩过很多坑,新建项目正常显示没问题,放到我们的项目就是不显示,加载不出来,
这个时候不要慌,只要确保下面三部完成就莫问题了

1.引入高德地图开发者api

<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=4611f58483d79aa58bf6d2b508078f9c&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script>

生成key的方式自行百度,一大堆,下面是我的
在这里插入图片描述
我开发的时候在这就踩坑了,因为新接触的项目,不是很了解,系统前端是页面套页面的方式,所以我应该在公共页面main_null.html中引入api,而不是当前html
2.页面上给一个放地图的容器

<!--高德地图容器-->
            <div style="width: 500px; height: 400px;" id="dituContent"></div>

3.js里创建地图、初始化,放到页面地图容器中

map = new AMap.Map('dituContent',{
                resizeEnabel: false,//是否监控地图容器尺寸变化
                zoom: 10,//初始化地图层级
                center: [116.397428, 39.90923]//设置地图中心点
            });

创建地图语句固定,第一个参数为地图容器的id,第二个参数是初始化地图的属性,
这样地图就可以加载出来啦:
在这里插入图片描述

二、给地图添加标注

地图上的这个小蓝点是怎么来的呢,

//1.定义标注的图标
var markerContentBlue = '' +
        '<div>' +
        '   <img  style ="width:25px;height:34px;" src="/common/main/images/mapblue.png">' +
        '</div>';
  //2.创建标注
marker1[0] = new AMap.Marker({
         position:new AMap.LngLat(116.39, 39.9),//标注显示的位置
         content: markerContentBlue,//上面定义的图标
         offset: new AMap.Pixel(-13, -14)//移动距离:绝对坐标、相对坐标
     });
     //3.将标注添加到地图上
     map.add(marker1[0]);

三、地图点击事件

我们开发当然是要实现点击地图,获取点击位置的经纬度,详细地址信息进行保存、业务处理
注释已经写很清楚啦

map.on('click', function (e) {
            //1.清楚地图标注
            map.remove(marker1[0]);
            //2.经纬度赋值
            $("#lng").val(e.lnglat.getLng());
            $("#lat").val(e.lnglat.getLat());
            //3.根据经纬度反向地理编码获取地图定位赋值
            var geocoder;
            var lnglatXY = new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat());
            //加载地理编码插件
            map.plugin(["AMap.Geocoder"], function () {
                geocoder = new AMap.Geocoder({
                    radius: 1000, //以已知坐标为中心点,radius为半径,返回范围内兴趣点和道路信息
                    extensions: "all"//返回地址描述以及附近兴趣点和道路信息,默认"base"
                });
                //返回地理编码结果
                AMap.event.addListener(geocoder, "complete", function (e) {
                    console.log(e.regeocode);
                    $("#suggestId").val(e.regeocode.formattedAddress);
                });
                //逆地理编码
                geocoder.getAddress(lnglatXY);
            });
            //4.添加标注
            marker1[0] = new AMap.Marker({
                position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat()),
                offset: new AMap.Pixel(-13, -14),
                content: markerContentBlue,
                title: '北京'
            });
            map.add(marker1[0]);
        })

四、通过输入框去定位地图

当然还有很重要的一个功能就是 智能搜索,我们在输入框里输入位置,地图自动定位到当前范围

//根据输入框标注地图
    var auto = new AMap.Autocomplete({
        input:"suggestId",
        city:""
    });
    var placeSearch = new AMap.PlaceSearch({
        city: '',
    });
    //构造地点查询类
    AMap.event.addListener(auto, "select", select);//注册监听,当选中某条记录时会触发
    function select(e) {
        console.log(e.poi)
        map.remove(marker1[0]);
        placeSearch.search(e.poi.name);  //关键字查询查询
        map.setZoomAndCenter(15, [e.poi.location.lng, e.poi.location.lat]); //同时设置地图层级与中心点
    }

贴出全部代码:

<!doctype html>
<html>
<head>
    <title>关键字查询自我展示</title>
    <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=4611f58483d79aa58bf6d2b508078f9c&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script>
    <script type="text/javascript" src="https://cache.amap.com/lbs/static/PlaceSearchRender.js"></script>
    <script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
    <style>
        input{
            width:20px;
            height:30px;
            border-radius:18px;
            border:2px solid gray;
        }
    </style>
</head>
<body>
<div style = "  width:1000px;height:1000px;">
    <div>
        <div style="width: 500px; height: 400px;">
            <div id="r-result">
                <i></i>
                <input style="width: 500px; height: 30px;" id="suggestId" name="orientationAddress" type="text"   placeholder="请输入地图定位">
            </div>
            <div style="margin-top:2px;">
                <input  id="lng" name="longitude" type="text"  style="width: 150px;" placeholder="请输入经度">
                <input id="lat" name="latitude" type="text"  style="width: 150px;" placeholder="请输入纬度">
            </div>
            <div id="searchResultPanel" style="border: 1px solid #C0C0C0; width: 150px; height: auto; display: none;"></div>
            </br>
            <!--高德地图容器-->
            <div style="width: 500px; height: 400px;" id="dituContent"></div>
        </div>
    </div>
</div>
<script type="text/javascript">
    var lng;//经度
    var lat;//维度
    var marker1 = [];
    var map;
    var markerContentBlue = '' +
        '<div>' +
        '   <img  style ="width:25px;height:34px;" src="/common/main/images/mapblue.png">' +
        '</div>';
    $(document).ready(function(){
        if(lng == null || lat == null){
            map = new AMap.Map('dituContent',{
                resizeEnabel: false,
                zoom: 10,
                center: [116.397428, 39.90923]
            });
            marker1[0] = new AMap.Marker({
                position:new AMap.LngLat(116.39, 39.9),
                content: markerContentBlue,
                offset: new AMap.Pixel(-13, -14)//移动距离:绝对坐标、相对坐标
            });
            map.add(marker1[0]);
        }else{
            map = new AMap.Map('dituContent',{
                resizeEnable: false,
                zoom: 10,
                center: [lng1,lat1]
            });
            marker1[0] = new AMap.Marker({
                position:new AMap.lngLat(lng1,lat1),
                offset: new AMap.Pixel(-13,-14),
                content: markerContentBlue
            });
            map.add(marker1[0]);
        }
        map.on('click', function (e) {
            //1.清楚地图标注
            map.remove(marker1[0]);
            //2.经纬度赋值
            $("#lng").val(e.lnglat.getLng());
            $("#lat").val(e.lnglat.getLat());
            //3.根据经纬度反向地理编码获取地图定位赋值
            var geocoder;
            var lnglatXY = new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat());
            //加载地理编码插件
            map.plugin(["AMap.Geocoder"], function () {
                geocoder = new AMap.Geocoder({
                    radius: 1000, //以已知坐标为中心点,radius为半径,返回范围内兴趣点和道路信息
                    extensions: "all"//返回地址描述以及附近兴趣点和道路信息,默认"base"
                });
                //返回地理编码结果
                AMap.event.addListener(geocoder, "complete", function (e) {
                    console.log(e.regeocode);
                    $("#suggestId").val(e.regeocode.formattedAddress);
                });
                //逆地理编码
                geocoder.getAddress(lnglatXY);
            });
            //4.添加标注
            marker1[0] = new AMap.Marker({
                position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat()),
                offset: new AMap.Pixel(-13, -14),
                content: markerContentBlue,
                title: '北京'
            });
            map.add(marker1[0]);
        })
        //根据输入框标注地图
        var auto = new AMap.Autocomplete({
            input:"suggestId",
            city:""
        });
        var placeSearch = new AMap.PlaceSearch({
            city: '',
        });
        //构造地点查询类
        AMap.event.addListener(auto, "select", select);//注册监听,当选中某条记录时会触发
        function select(e) {
            console.log(e.poi)
            map.remove(marker1[0]);
            placeSearch.search(e.poi.name);  //关键字查询查询
            map.setZoomAndCenter(15, [e.poi.location.lng, e.poi.location.lat]); //同时设置地图层级与中心点
        }
    })
</script>
</body>
</html>

效果:
在这里插入图片描述

高德提供了很多开发实例可以参考:

https://lbs.amap.com/api/javascript-api/example/map-lifecycle/map-show

记录我踩过得坑:
智能搜索:高德提供的实例是:

<script type="text/javascript">
    //地图加载
    var map = new AMap.Map("container", {
        resizeEnable: true
    });
    //输入提示
    var autoOptions = {
        input: "tipinput"
    };
    var auto = new AMap.Autocomplete(autoOptions);
    var placeSearch = new AMap.PlaceSearch({
        map: map
    });  //构造地点查询类
    AMap.event.addListener(auto, "select", select);//注册监听,当选中某条记录时会触发
    function select(e) {
        placeSearch.setCity(e.poi.adcode);
        placeSearch.search(e.poi.name);  //关键字查询查询
    }
</script>

效果是:
在这里插入图片描述
他是把北京大学这一片的关键位置都给标上了,然后我要实现点击每个点拿到当前位置,可是费了好大劲,虽然后来有个前端大神也给搞定了,但是也很难做到再点击另一个标注时把其它标注都换为蓝点,就是标注的事件就很难拿到,
后来发现只要把实例中var placeSearch = new AMap.PlaceSearch({ map: map }); //构造地点查询类智能搜索类的属性换为city就好了,var placeSearch = new AMap.PlaceSearch({ city: '', }); //构造地点查询类就不会有那些点了,可以通过点击事件去添加、删除标注了,也符合常用体验
不了解的话还真是一点小东西就能折腾好久

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高德地图开发-常用api踩坑使用 的相关文章

随机推荐

  • 秋招-算法-动态规划篇

    秋招 算法 动态规划篇 只求秋招笔试能过 所以本文更多是怎么使用模板来解动态规划题 能过就好 对时间和空间的考虑不会太多 介绍 动态规划通过组合子问题的解得到原问题的解 适合动态规划解决的问题具有重叠子问题和最优子结构两大特征 通常使用空间
  • caffe 学习率设置问题

    solver算是caffe的核心的核心 它协调着整个模型的运作 caffe程序运行必带的一个参数就是solver配置文件 运行代码一般为 caffe train solver slover prototxt 在Deep Learning中
  • Unity和VS2019下载及配置流程

    https www jianshu com p 6fe2dc4de4c3
  • 可编程手机蓝牙App控制直流电机速度

    我们将通过 Android 应用程序 app 介绍直流电机速度控制 对于该项目 该应用程序安装在智能手机设备中 该设备使用蓝牙向控制直流电机速度的电路发送命令 此 Android 应用程序具有引人注目且易于使用的图形用户界面 GUI 我们将
  • IBM区块链负责人Jesse Lund的“你问我答”

    点击上方 蓝色字 可关注我们 编辑 铅笔盒 IBM区块链部门负责人Jesse Lund抽空参与了 你问我答 活动 Ask Me Anything AMA 回答了关于加密货币及IBM与Stellar合作关系的一些问题 具体内容如下 IBM现在
  • ue4 DerivedDataCache报错

    启动ue4时报错 报错堆栈如下 从堆栈可以看出是DerivedDataCache报错 从堆栈的CachedDataProbablyExists函数更可以看出是在判断cache是否存在 故而想到删除项目目录下DerivedDataCache中
  • RPC框架的异步处理

    RPC异步调用 以tars rpc框架为示例说明 引入工作线程池和io收发线程池将工作线程和io收发线程两者的同步关系解除 RPC中的上下文十分重要 因为请求包的发送 响应包的callback回调不在同一个工作线程中完成 需要一个conte
  • 计算机组长原理,期末项目考核-计算机组成原理-组长学号-组长姓名

    2012 2013 第一学期第一学期 计算机组成原理计算机组成原理 期末考核期末考核 职位姓名学号在项目中担任的工作成绩 组长 组员 组员 组员 一 项目一 项目 1 描述 描述 设 CPU 共有 16 根地址线 8 根数据线 R W 作读
  • 山洪灾害预警方案(山洪预警解决方案的组成)

    随着气候变化的不断加剧 山洪灾害在许多地区成为了极具威胁性的自然灾害之一 为了帮助地方政府和居民更好地预防和应对山洪灾害 我们设计了一套基于星创易联的SR600工业路由器和DTU200的山洪灾害预警方案 并成功在某地区进行了部署 案例背景
  • Transaction rolled back because it has been marked as rollback-only 解决办法

    今天早上高高兴兴上班 居然收到一大堆报警信息 仔细看了一下具体内容 都在提示这个错误 Transaction rolled back because it has been marked as rollback only 我一看就觉得奇怪了
  • Linux I/O编程 实验内容

    一 实验目的 练习用UNIX I O进行文件读写的编程方法 用UNIX I O函数管理文本信息 二进制数据 结构体数据 掌握UNIX I O的基本编程方法 练习测时函数使用 通过测量UNIX I O函数运行时间 建立UNIX I O API
  • 数据结构 ——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现

    一 基本概念 每个结点最多有两棵子树 左子树和右子树 次序不可以颠倒 性质 1 非空二叉树的第n层上至多有2 n 1 个元素 2 深度为h的二叉树至多有2 h 1个结点 满二叉树 所有终端都在同一层次 且非终端结点的度数为2 在满二叉树中若
  • 牛客网 HJ96 表示数字

    牛客网 HJ96 表示数字 将一个字符中所有的整数前后加上符号 其他字符保持不变 连续的数字视为一个整数 import re def deal with match value match group value return value
  • Pix2PixHD 阅读笔记(翻译)

    High Resolution Image Synthesis and Semantic Manipulation with Conditional GANs 作者 Ting Chun Wang NVIDIA Ming Y u Liu NV
  • C++扫雷小游戏

    核心算法 就是关于点击雷区的操作 data数组用来储存雷区 雷9 非雷非数字 0 数字 1 8 clickdata数组用来储存雷区是否被按过 没按过 0 左键按过 1 右键按过 2 int click int i int j int k 点
  • LeetCode200—岛屿数量(java版)

    题目描述 标签 深度优先搜索 广度优先搜索 并查集 数组 矩阵 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成 此外 你可以假设该
  • drools 7.x 决策表转drl

    1 决策表内容 位置 Users lcc IdeaProjects drools test src main resources com drools excel table test1 personAge xlsx 内容 RuleSet
  • html5多个图片位置_React 实现简易的图片拖动排序

    基本介绍 在 web 页面中 如果需要改变多个元素的位置 可以通过元素拖动来实现 HTML5中加入了一个全局属性draggable 通过设置该属性的值为 true false 来控制元素是否可拖动 需要注意的是 链接和图片默认是可拖动的 可
  • Linux之vi编辑器的使用方法和常用命令

    Linux之vi编辑器 前言 对于初级程序开发工程师而言 Linux是很多人要接触的内容 为此我给大家来做一下总结 希望能够帮到你们 课程说明 1 介绍vi编辑器的使用方法 2 介绍vi编辑器的常用命令 vi编辑器 vi的基本概念 基本上v
  • 高德地图开发-常用api踩坑使用

    一 高德地图的加载初始化 在这就踩过很多坑 新建项目正常显示没问题 放到我们的项目就是不显示 加载不出来 这个时候不要慌 只要确保下面三部完成就莫问题了 1 引入高德地图开发者api 生成key的方式自行百度 一大堆 下面是我的 我开发的时