首页 > 其他分享 >JS之调用百度地图接口进行打卡

JS之调用百度地图接口进行打卡

时间:2024-04-25 14:12:53浏览次数:13  
标签:JS var 百度 lat sin 打卡 PI lng Math

调用百度地图接口进行打卡

1.在百度地图开放平台申请AK

2.在index.html导入百度地图SDK(此AK值为假)

<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=f029hEOpyCQnXySQsug94D1yUU0Yil"></script>

3.新增coordTransform.js

//定义一些常量
var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
var PI = 3.1415926535897932384626;
var a = 6378245.0;
var ee = 0.00669342162296594323;
/**
 * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
 * 即 百度 转 谷歌、高德
 */
export function bd09togcj02(bd_lon, bd_lat) {
  var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
  var x = bd_lon - 0.0065;
  var y = bd_lat - 0.006;
  var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
  var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
  var gg_lng = z * Math.cos(theta);
  var gg_lat = z * Math.sin(theta);
  return [gg_lng, gg_lat]
}
/**
 * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
 * 即谷歌、高德 转 百度
 */
export function gcj02tobd09(lng, lat) {
  var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
  var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
  var bd_lng = z * Math.cos(theta) + 0.0065;
  var bd_lat = z * Math.sin(theta) + 0.006;
  return [bd_lng, bd_lat]
}
/**
 * WGS84转GCj02
 */
export function wgs84togcj02(lng, lat) {
  if (out_of_china(lng, lat)) {
    return [lng, lat]
  }
  else {
    var dlat = transformlat(lng - 105.0, lat - 35.0);
    var dlng = transformlng(lng - 105.0, lat - 35.0);
    var radlat = lat / 180.0 * PI;
    var magic = Math.sin(radlat);
    magic = 1 - ee * magic * magic;
    var sqrtmagic = Math.sqrt(magic);
    dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
    dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
    var mglat = lat + dlat;
    var mglng = lng + dlng;
    return [mglng, mglat]
  }
}
/**
 * GCJ02 转换为 WGS84
 */
export function gcj02towgs84(lng, lat) {
  if (out_of_china(lng, lat)) {
    return [lng, lat]
  }
  else {
    var dlat = transformlat(lng - 105.0, lat - 35.0);
    var dlng = transformlng(lng - 105.0, lat - 35.0);
    var radlat = lat / 180.0 * PI;
    var magic = Math.sin(radlat);
    magic = 1 - ee * magic * magic;
    var sqrtmagic = Math.sqrt(magic);
    dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
    dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
    var mglat = lat + dlat;
    var mglng = lng + dlng;
    return [lng * 2 - mglng, lat * 2 - mglat]
  }
}
export function transformlat(lng, lat) {
  var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
  ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
  ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
  ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
  return ret
}
export function transformlng(lng, lat) {
  var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
  ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
  ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
  ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
  return ret
}
/**
 * 判断是否在国内,不在国内则不做偏移
 */
export function out_of_china(lng, lat) {
  return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
}

4.导入和调用示例如下:

导入

import { bd09togcj02, gcj02towgs84 } from "@/utils/coordTransform.js";

调用

const getCurrentBMapPosition = (item) => {
  const geolocation = new BMap.Geolocation({
    maximumAge: 10, // 清除缓存
  });
  // 开启SDK辅助定位
  geolocation.enableSDKLocation();
  // 定义获取位置成功时的回调函数
  geolocation.getCurrentPosition(
    function (r) {
      if (this.getStatus() == BMAP_STATUS_SUCCESS) {
        console.log("百度坐标系当前经度:", r.point.lng);
        console.log("百度坐标系当前纬度:", r.point.lat);
        let point = new BMap.Point(r.point.lng, r.point.lat);
        const gc = new BMap.Geocoder();
        gc.getLocation(point, function (rs) {
          console.log("百度坐标系当前地址:", rs.address);
        });
        const [lng, lat] = bd09togcj02(r.point.lng, r.point.lat);
        const [wgs84lng, wgs84lat] = gcj02towgs84(lng, lat);
        currentLongitude.value = wgs84lng.toFixed(6); // wgs84经度
        currentLatitude.value = wgs84lat.toFixed(6); // wgs84纬度
        point = new BMap.Point(currentLongitude.value, currentLatitude.value);
        console.log("当前wgs84经度:", currentLongitude.value);
        console.log("当前wgs84纬度:", currentLatitude.value);
        gc.getLocation(point, function (rs) {
          console.log("wgs84坐标系当前地址:", rs.address);
          currentBMapPosInfo.value = `${rs.address}-(${currentLongitude.value},${currentLatitude.value})`;
        });
      } else {
        alert("failed" + this.getStatus());
      }
    },
    { enableHighAccuracy: true }
  );
};

 

标签:JS,var,百度,lat,sin,打卡,PI,lng,Math
From: https://www.cnblogs.com/luoyihao/p/18157295

相关文章

  • lazarus数据序列为JSON
    uses  DataSet.Serialize, fpjson;varobj:tjsonobject;procedureTForm1.Button1Click(Sender:TObject);beginuniquery1.Close;uniquery1.SQL.clear;uniquery1.sql.Add('selecttop2*fromtunit');uniquery1.Open;memo1.text:=uniquery1......
  • 【2024最新】获取街道、镇级的地图geoJson数据方法
    一、目的1、在echarts上绘制市级以下的区、县的区域地图。2、在市级下很多都是有区、县的区域,而少部分是不存在区、县的,是直接市下面一级就是街道、镇级别的区域。3、统一管理区域数据,有区县的市直接拿区县的geoJson数据,没有区县的市级直接拿街道、镇级的geoJson数据来绘制区......
  • js逆向实战之智通财经网token参数解密
    url:https://www.zhitongcaijing.com/immediately.html分析过程抓流量包,主要关注如下这条数据包。响应数据如下。由于该url中的token参数是经过加密的,所以目的就是找到加密过程。关键字搜索immediately/content-list.html,只有两条记录,第一处是个html代码,肯定不是,所以只......
  • 使用 NestJS 和 qrcode.js 创建 QR 码生成器 API
    前言QR码(QuickResponseCode)是一种二维码,于1994年开发。它能快速存储和识别数据,包含黑白方块图案,常用于扫描获取信息。QR码具有高容错性和快速读取的优点,广泛应用于广告、支付、物流等领域。通过扫描QR码,用户可以快速获取信息和实现便捷操作,为现代生活带来便利。在本教程中,小编......
  • js获取当前的操作系统
    在JavaScript中,没有直接的方式来获取操作系统的信息,因为出于安全考虑,浏览器不允许访问这些信息。但是,你可以通过用户代理字符串(User-Agentstring)来间接地推断操作系统信息。以下是一个简单的JavaScript函数,用于解析用户代理字符串以推断操作系统://获取操作系统类型fu......
  • 20240424打卡
    第九周第一天第二天第三天第四天第五天第六天第七天所花时间9h4h1h代码量(行)727110198博客量(篇)111知识点了解完成了地铁查询系统的App优化了地铁查询代码并通过验收python题目练习......
  • Python基础-模块和包(hashlib、random、json、time、datetime和os模块)
    什么是模块和包?模块:python中的.py文件,将一些功能按照某一种维度进行划分;自定义、内置。、第三方.包:文件夹里面好多个.py文件。在讨论的时候,一般统称为:模块。学习:自定义模块和包+使用内置模块+使用第三方模块+使用1自定义模块和包1.1快速上手-项目文件夹(......
  • idea启动jsp项目
    idea启动jsp项目1、idea打开jsp项目:2、项目配置:3、项目启动~~~~~~~~~~~~~~~~~~~~~over~~~~~~~~~~~~~~~~   ......
  • js逆向实战之莫莫铺子sign参数解密
    url:http://mmpz.ttzhuijuba.com/?r=/l&cids=1&site=classify&sort=0分析过程抓取流量包。主要关注图中框起来这条流量包,因为这条流量包返回的是当前页面数据。该流量包的url地址有个加密的参数sign,目的就是找到sign参数的加密过程。按照常规思路会去搜索url中的关键......
  • 百度的代码,Comate写了27%。诚邀你来测评,获取丰厚好礼!
    4月16日,在Create2024百度AI开发者大会上发表的《人人都是开发者》主题演讲中,李彦宏指出:“百度每天新增的代码中,已经有27%是由Comate生成的。”是的!Comate被老板表扬啦!BaiduComate智能代码助手,和百度的工程师们共同完成了27%的代码!而现在,Comate还走入了喜马拉雅、三菱电梯、......