(十九)原生js案例之h5地里位置信息与高德地图的初使用

h5 地里位置信息

1. 获取当前位置信息

在这里插入图片描述

window.onload = function () {
  const oBtn = document.querySelector("#btn");
  const oBox = document.querySelector("#box");

  oBtn.onclick = function () {
    window.navigator.geolocation.getCurrentPosition(
      function (position) {
        console.log("🚀 ~ position:", position);
        const { latitude, longitude } = position.coords;
        oBox.innerHTML += `${latitude} ${longitude}`;
      },
      function (error) {
        console.log("🚀 ~ error:", error);
      },
      {
        enableHighAccuracy: true,
        timeout: 5000,
      }
    );
  };
};
  • 失败编码

    • 0 未知错误,不包括下面的
    • 1 用户拒绝
    • 2 尝试获取用户信息,但失败了
    • 3 超时,设置了 timeout 参数
  • chrome 浏览器失败,edge 浏览器成功
    在这里插入图片描述

  • 数据收集,json 格式

    {
      "enableHighAccuracy": true, // 开启高精度,默认 false
      "timeout": 5000, // 超时时间,默认 infinity
      "maximumAge": 0 // 位置可以缓存时间,默认 0
    }
    

2. 获取当前位置信息

window.onload = function () {
  const oBtn = document.querySelector("#btn");
  const oBox = document.querySelector("#box");
  let timer = null;
  oBtn.onclick = function () {
    timer = window.navigator.geolocation.getCurrentPosition(
      function (position) {
        console.log("🚀 ~ position:", position);
        let str = "";
        for (const key in position.coords) {
          const value = position.coords[key];
          str += `${key}: ${value} <br/>`;
        }
        oBox.innerHTML = str;
      },
      function (error) {
        console.log("🚀 ~ error:", error);
        //移动端主要位置改变,这里就会一直报错
        //清除定时器
        window.navigator.geolocation.clearWatch(timer);
      },
      {
        enableHighAccuracy: true,
        timeout: 5000,
        frequence: 1000,
        maximumAge: 1000,
      }
    );
  };
};
  • h5 获取到地里位置信息后进行标注定位,配置使用高德地图

    • 封装高德地图,进行初始化
window._AMapSecurityConfig = {
  securityJsCode: "自己的key",
};

class AMapHelper {
  static async getMap() {
    if (window.AMap) {
      return window.AMap;
    }

    let AMap = null;

    const baseConfig = {
      key: window._AMapSecurityConfig.securityJsCode, //申请好的Web端开发者 Key,调用 load 时必填
      version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
    };

    try {
      AMap = await AMapLoader.load(baseConfig);
      console.log("高德地图初始化");
    } catch (error) {
      console.log(error);
    }

    return AMap;
  }
}
  • 拿到高德地图对象后,进行标记
window.onload = async function () {
  let timer = 0;
  await AMapHelper.getMap();
  let map = new AMap.Map("box", {
    resizeEnable: true,
  });
  getPos();
  function getPos() {
    timer = window.navigator.geolocation.getCurrentPosition(
      function (position) {
        console.log("🚀 ~ position:", position);
        //获取位置信息
        const { longitude, latitude } = position.coords;
        //创建标记
        const marker = new AMap.Marker({
          position: [longitude, latitude], //位置
        });
        map.add(marker); //添加到地图
      },
      function (error) {
        console.log("🚀 ~ error:", error);
        //移动端主要位置改变,这里就会一直报错
        //清除定时器
        window.navigator.geolocation.clearWatch(timer);
      },
      {
        enableHighAccuracy: true,
        timeout: 5000,
        frequence: 1000,
        maximumAge: 1000,
      }
    );
  }
};

案例,高德地图添加标记,事件,自定义标记 ICON

在这里插入图片描述

window.onload = async function () {
  let timer = 0;
  await AMapHelper.getMap();
  // console.log(window.AMap);
  let map = new AMap.Map("box", {
    resizeEnable: true,
  });
  const content = [
    "<div><b>高德软件有限公司</b>",
    "电话 : 010-84107000   邮编 : 100102",
    "地址 : 北京市望京阜通东大街方恒国际中心A座16层</div>",
  ];
  const icon = new AMap.Icon({
    size: new AMap.Size(25, 34), //图标尺寸
    image: "./img/site.png", //Icon 的图像
    imageOffset: new AMap.Pixel(-9, -3), //图像相对展示区域的偏移量,适于雪碧图等
    imageSize: new AMap.Size(135, 40), //根据所设置的大小拉伸或压缩图片
  });
  getPos();
  function getPos() {
    timer = window.navigator.geolocation.getCurrentPosition(
      function (position) {
        console.log("🚀 ~ position:", position);
        //获取位置信息
        const { longitude, latitude } = position.coords;
        //创建标记,自定义图片
        const marker = new AMap.Marker({
          position: new AMap.LngLat(longitude, latitude), //点标记的位置
          offset: new AMap.Pixel(-13, -30), //偏移量
          icon: icon, //添加 Icon 实例
          title: "高德科技",
          zooms: [2, 12], //点标记显示的层级范围,超过范围不显示
        });
        //添加窗体事件
        const infoWindow = new AMap.InfoWindow({
          //创建信息窗体
          isCustom: false, //使用自定义窗体
          // content: "<div id='info1'>这里可以显示自己的自定义描述内容</div>", //信息窗体的内容可以是任意html片段
          offset: new AMap.Pixel(16, -45),
          content,
          closeWhenClickMap: true,
        });
        //默认展示信息窗体
        infoWindow.open(map, [longitude, latitude]);
        const onMarkerClick = function (e) {
          // infoWindow.open(map, e.target.getPosition()); //点击打开信息窗体
          //e.target就是被点击的Marker
        };
        map.add(marker); //添加到地图
        marker.on("click", onMarkerClick); //绑定click事件
      },
      function (error) {
        console.log("🚀 ~ error:", error);
        //移动端主要位置改变,这里就会一直报错
        //清除定时器
        window.navigator.geolocation.clearWatch(timer);
      },
      {
        enableHighAccuracy: true,
        timeout: 5000,
        frequence: 1000,
        maximumAge: 1000,
      }
    );
  }
};

进阶之路: 高德地图2.0文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/870244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32CubeIDE(CAN)

目录 一、概念 1、简述 2、CAN 的几种模式 二、实践 1、环回模式轮询通信 1.1 软件配置 1.2 代码编写 2、环回模式中断通信 2.1 软件配置 2.2 代码编写 一、概念 1、简述 STM32微控制器系列包含多个型号&#xff0c;其中一些型号集成了CAN&#xff08;Controller Are…

如何在 Mac 上下载安装植物大战僵尸杂交版? 最新版本 2.2 详细安装运行教程问题详解

植物大战僵尸杂交版已经更新至2.2了&#xff0c;但作者只支持 Windows、手机等版本并没有支持 MAC 版本&#xff0c;最近搞到了一个最新的杂交 2.2 版本的可以在 Macbook 上安装运行的移植安装包&#xff0c;试了一下非常完美能够正常在 MAC 上安装运行&#xff0c;看图&#x…

菜鸟从0学微服务——MyBatis-Plus

关于“菜鸟从0学微服务” 针对有编程基础&#xff0c;开始学习微服务的同学&#xff0c;我们陆续推出从0学微服务的笔记分享。力求从各个中间件的使用来反思这些中间件的作用和优势。 会分享的比较快&#xff0c;会记录demo演算和中间件的使用过程&#xff0c;至于细节的理论…

SSIS_SQLITE

1.安装 SQLite ODBC 驱动程序 2.添加SQLite数据源 在“用户DSN”或“系统DSN”选项卡中&#xff0c;点击“添加”。选择“SQLite3 ODBC Driver”&#xff0c;然后点击“完成”。在弹出的配置窗口中&#xff0c;设置数据源名称&#xff08;DSN&#xff09;&#xff0c;并指定S…

k8s核心知识总结

写在前面 时间一下子到了7月份尾&#xff1b;整个7月份都乱糟糟的&#xff0c;不管怎么样&#xff0c;日子还是得过啊&#xff0c; 1、7月份核心了解个关于k8s&#xff0c;iceberg等相关技术&#xff0c;了解了相关的基础逻辑&#xff0c;虽然和数开主线有点偏&#xff0c;但是…

二、【Python】入门 - 【PyCharm】安装教程

往期博主文章分享文章&#xff1a; 【机器学习】专栏http://t.csdnimg.cn/sQBvw 目录 第一步&#xff1a;PyCharm下载 第二步&#xff1a;安装&#xff08;点击安装包打开下图页面&#xff09; 第三步&#xff1a;科学使用&#xff0c;请前往下载最新工具及教程&#xff1a…

FreeSWITCH 1.10.10 简单图形化界面26-在网页上播放SIP设备视频

​ FreeSWITCH 1.10.10 简单图形化界面26-在网页上播放SIP设备视频 1、前言2、大概流程3、测试环境4、安装流媒体服务器5、设置流媒体服务器接口6、简单写个web接口7、测试一下1、web播放在线播放器1在线播放器2本地video控件 2、vlc播放vlc播放rtmpvlc播放rtsp 8、总结 1、前…

Jmeter三种方式获取数组中多个数据并将其当做下个接口参数入参【附带JSON提取器和CSV格式化】

目录 一、传统方式-JOSN提取器获取接口返回值 1、接口调用获取返回值 2、添加JSON提取器 3、调试程序查看结果 4、添加循环控制器 5、设置count计数器 6、添加请求 7、执行请求 二、CSV参数化 1、将结果写入后置处理程序 2、设置循环处理器 3、添加CSV文件 4、设置…

前端面试项目细节重难点分享(十三)

面试题提问&#xff1a;分享你最近做的这个项目&#xff0c;并讲讲该项目的重难点&#xff1f; 答&#xff1a;最近这个项目是一个二次迭代开发项目&#xff0c;迭代周期一年&#xff0c;在做这些任务需求时&#xff0c;确实有很多值得分享的印象深刻的点&#xff0c;我讲讲下面…

【中项】系统集成项目管理工程师-第5章 软件工程-5.3软件设计

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

设计模式|观察者模式

观察者模式是一种行为设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时&#xff0c;它的所有观察者都会收到通知并更新。观察者模式常用于实现事件处理系统、发布-订阅模式等。在项目中&#xff0c…

【spring boot】初学者项目快速练手

项目视频&#xff1a;一小时带你从0到1实现一个SpringBoot项目开发_哔哩哔哩_bilibili 注解视频&#xff1a;10、Java高级技术&#xff1a;注解&#xff1a;认识注解_哔哩哔哩_bilibili 一、基础知识 1.注解Annotation &#xff08;1&#xff09;定义 注解是Java代码里的特…

Wordpress安装到win10(2024年7月)

目录 1.wordpress介绍 2下载应用 2.1.wordpress 2.2XAMPP 2.3 PHPmyadmin 3.配置应用 3.1XAMPP进程 3.2 文件配置 3.3 phpmyadmin配置 4.配置网页 4.1 数据库创建 4.2 安装wordpress 5.进入面板 6.总结 1.wordpress介绍 WordPress是一个开源内容管理系统&#xff0…

Node.js知识点总结

Node.js知识点总结 Node.js其本质和浏览器一样是一个JavaScript运行环境。浏览器的运行环境为V8引擎浏览器内置API&#xff08;BOM、DOM、Canvas);而node.js的运行环境是V8引擎node提供的API(fs、path、http)。它使JavaScript可以编写后端。 基本知识 fs文件系统模块 它提供一…

C语言·分支和循环语句(超详细系列·全面总结)

前言&#xff1a;Hello大家好&#x1f618;&#xff0c;我是心跳sy&#xff0c;为了更好地形成一个学习c语言的体系&#xff0c;最近将会更新关于c语言语法基础的知识&#xff0c;今天更新一下分支循环语句的知识点&#xff0c;我们一起来看看吧~ 目录 一、什么是语句&#xf…

剪画小程序:短视频搬运必备!去除视频字幕!

在这个人人都自媒体的盛世&#xff0c;新人想要创作爆款视频那里难上加难&#xff0c;所以搬运视频就成了很多新手自媒体人的不二选择。 搬运优质内容成为许多人的需求。但原视频中的字幕往往成为困扰大家的难题。 你是否曾为了搬运一个精彩的短视频&#xff0c;却因为无法去除…

gitee设置ssh公钥密码避免频繁密码验证

gitee中可以创建私有项目&#xff0c;但是在clone或者push都需要输入密码&#xff0c; 比较繁琐。 公钥则可以解决该问题&#xff0c;将私钥放在本地&#xff0c;公钥放在gitee上&#xff0c;当对项目进行操作时带有的私钥会在gitee和公钥进行验证&#xff0c;避免了手动输入密…

CTF-Web习题:[GXYCTF2019]Ping Ping Ping

题目链接&#xff1a;[GXYCTF2019]Ping Ping Ping 解题思路 访问靶机&#xff0c;得到如下页面&#xff0c;类似于URL参数 尝试用HackBar构造url传输过去看看 发现返回了ping命令的执行结果&#xff0c;可以猜测php脚本命令是ping -c 4 $ip&#xff0c;暂时不知道执行的函数…

【Android】数据存储方案——文件存储、SharedPreferences、SQLite数据库用法总结

文章目录 文件存储存储到文件读取文件 SharedPreferences存储存储获取SharedPreferences对象Context 类的 getSharedPreferences() 方法Activity 类的 getPreferences() 方法PreferenceManager 类中的 getDefaultSharedPreferences() 方法 示例 读取记住密码的功能 SQLite数据库…

通信协议_C#实现CAN通信

CAN协议 CAN&#xff08;Controller Area Network&#xff09;即控制器局域网络。特点&#xff1a; 多主网络&#xff1a;网络上的任何节点都可以主动发送数据&#xff0c;不需要一个固定的主节点。双绞线&#xff1a;使用双绞线作为通信介质&#xff0c;支持较远的通信距离。…