前端开发中地图定位与距离计算的应用实践

这篇具有很好参考价值的文章主要介绍了前端开发中地图定位与距离计算的应用实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前端开发中地图定位与距离计算的应用实践

在前端开发中,地图功能的应用日益广泛,无论是用户位置的定位、目标距离的计算,还是地址的解析与展示,地图都发挥着不可替代的作用。本文将重点介绍前端开发中实现地图定位、距离计算以及地址解析的方法,并以腾讯地图API为例,详细解析其在前端实践中的应用。

前端开发中地图定位与距离计算的应用实践,html5,前端,前端框架,vue.js,微信小程序,微信公众平台,uni-app

一、地图定位功能的实现

前端实现地图定位主要依赖于浏览器的地理位置API以及地图服务提供商的API。在Vue框架中,我们可以使用<map>组件来嵌入地图,并通过设置经纬度来定位地图的中心点。例如,通过:latitude:longitude属性绑定,我们可以将地图中心定位到指定的位置。

同时,为了提升用户体验,我们通常会开启定位功能,让用户能够直接看到自己当前的位置。这可以通过调用浏览器的地理位置API来实现,但需要注意的是,用户需要授予权限才能进行定位。

前端开发中地图定位与距离计算的应用实践,html5,前端,前端框架,vue.js,微信小程序,微信公众平台,uni-app

二、距离计算的实现

在前端开发中,计算当前定位离目标位置的距离是一个常见的需求。这通常涉及到地理坐标的计算,包括经纬度之间的距离计算。我们可以利用Haversine公式或者球面三角法来计算两点之间的距离。

以Haversine公式为例,该公式可以根据地球上两个点的经纬度计算出它们之间的大圆距离。在前端开发中,我们可以封装一个函数来实现这一功能,传入两个点的经纬度坐标,即可得到它们之间的距离。

三、腾讯地图API的应用

腾讯地图API提供了丰富的地图服务,包括地图展示、定位、搜索、路线规划等。在前端开发中,我们可以利用腾讯地图API来实现更加丰富的地图功能。

其中,经纬度反向编码解析地址是腾讯地图API的一个重要功能。通过调用API接口,并传入经纬度坐标,我们可以得到对应的地址信息,包括省、市、区、街道等详细信息。这对于前端开发中的地址展示和位置识别非常有用。

四、实践案例

下面是一个简单的实践案例,展示了如何在Vue项目中使用腾讯地图API实现地图定位、距离计算和地址解析功能。

首先,我们需要在项目中引入腾讯地图API的SDK,并在Vue组件中初始化地图实例。然后,通过调用API接口获取用户的位置信息,并在地图上展示定位点。接着,我们可以利用Haversine公式计算用户位置与目标位置之间的距离,并在界面上展示。最后,通过调用腾讯地图API的经纬度反向编码接口,我们可以解析出目标位置的详细地址信息。

<template>
    <view class="content">
        <scroll-view class="scrollV" scroll-y="true">

            <view class="inputView">
                <text class="leftTitle">活动内容</text>
            </view>
            <view class="inputView">
                {{"去清远古龙峡漂流"}}
            </view>

            <view class="inputView">
                <text class="leftTitle">签到须知</text>
            </view>
            <view class="inputView">
                {{'距离活动地10km内可签到成功'}}
            </view>

            <!-- 
             App端:manifest.json的“App模块配置”中勾选“Maps(地图)”,并根据项目实际情况勾选使用的三方地图SDK:https://uniapp.dcloud.net.cn/tutorial/app-maps.html#
             H5端: 使用地图和定位相关,需要在 manifest.json 内配置腾讯或谷歌等三方地图服务商申请的秘钥(key)。高德地图需要额外配置 securityJsCode 或 serviceHost,

             若是微信小程序只需配置微信小程序权限配置):
                  page.json配置以下

                  // 权限设置
                  "permission": {
                      "scope.userLocation": {
                          "desc": "您的位置信息将用于该活动签到"
                      }
                  }
             -->
            <!-- scale缩放级别,取值范围为3-20 longitude:地图中心精度 latitude:地图中心纬度 markers:覆盖物 show-location:是否显示定位-->
            <map class="mapV" :latitude="infoDict.lat" :longitude="infoDict.lon" scale='6' :markers="covers"
                show-location=false>
            </map>

        </scroll-view>

        <view class="btnview" @tap="goSignIn">{{'签到' + distanceStr}}</view>

    </view>
</template>

<script>
    import Vue from 'vue'

    export default {
        data() {
            return {

                // 覆盖物
                covers: [],

                // 目标经纬度信息
                infoDict: {
                    'lon': '113.17',
                    'lat': '23.8'
                },

                // 我的定位经纬度信息
                myPinInfo: {},

                // 默认距离为负数
                distance: -9999,
                distanceStr: ''
            }
        },

        onShow() {

            // 获取当前位置
            this.getlocation();

        },
        methods: {

            getlocation() {

                let myThis = this;
                console.log('获取位置开始');
                uni.getLocation({
                    type: 'gcj02',
                    success: function(res) {
                        myThis.myPinInfo = res;
                        console.log('当前位置的经度:' + res.longitude);
                        console.log('当前位置的纬度:' + res.latitude);

                        myThis.covers = [{
                                latitude: myThis.infoDict.lat,
                                longitude: myThis.infoDict.lon,
                                width: 30,
                                height: 30,
                                id: 20000,
                                iconPath: '../../static/activity_pin.png'
                            },
                            {
                                latitude: myThis.myPinInfo.latitude,
                                longitude: myThis.myPinInfo.longitude,
                                width: 30,
                                height: 30,
                                id: 20001,
                                iconPath: '../../static/people_pin.png'
                            }
                        ];
                        myThis.distance = myThis.getDistance(myThis.infoDict.lat, myThis.infoDict.lon, myThis
                            .myPinInfo.latitude, myThis.myPinInfo.longitude)
                        myThis.distanceStr = '(当前距离' + myThis.distance + '米)';

                    }
                });
            },
            // 计算两点距离
            getDistance(lat1, lng1, lat2, lng2) {
                let EARTH_RADIUS = 6378.137;
                let radLat1 = this.rad(lat1);
                let radLat2 = this.rad(lat2);
                let a = radLat1 - radLat2;
                let b = this.rad(lng1) - this.rad(lng2);
                let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
                    Math.cos(radLat1) * Math.cos(radLat2) *
                    Math.pow(Math.sin(b / 2), 2)));
                s = s * EARTH_RADIUS;
                //s = Math.round(s * 10000d) / 10000d;
                s = Math.round(s * 10000) / 10000;
                s = s * 1000; //乘以1000是换算成米
                return s;
            },
            // 弧度计算
            rad(d) {
                return d * Math.PI / 180.0;
            },

            // 立即签到
            goSignIn(e) {

                if (this.distance > 10000) {

                    uni.showModal({
                        title: '温馨提示',
                        content: '您的当前位置距离活动目的地太远, 无法签到',
                        showCancel: false
                    })
                    return;
                } else if (this.distance < 0) {

                    uni.showModal({
                        title: '温馨提示',
                        content: '您的定位权限未打开, 请点击小程序右上角···菜单按钮, 然后点击设置,打开定位权限',
                        showCancel: false
                    })

                    return
                }

            },

        }
    }
</script>

五、总结与展望

前端开发中地图功能的应用不仅提升了用户体验,也为开发者提供了更多的可能性。通过合理利用地图服务提供商的API,我们可以实现丰富的地图功能,满足各种业务需求。

未来,随着前端技术的不断发展和地图服务的不断完善,我们相信地图在前端开发中的应用将会更加广泛和深入。同时,我们也期待更多的开发者能够参与到地图开发的行列中来,共同推动前端技术的发展和创新。

小程序体验地址(已上线)

前端开发中地图定位与距离计算的应用实践,html5,前端,前端框架,vue.js,微信小程序,微信公众平台,uni-app文章来源地址https://www.toymoban.com/news/detail-847598.html

到了这里,关于前端开发中地图定位与距离计算的应用实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端vue uni-app百度地图定位组件,显示地图定位,标记点,并显示详细地址

    快速实现前端百度地图定位组件,显示地图定位,标记点,并显示详细地址; 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下:     代码如下: # 百度地图定位组件,显示地图定位,标记点,并显示详细地址 #### 使用方法 ```使用方法 #安装vue-baidu-map插件

    2024年02月08日
    浏览(65)
  • TypeScript 在前端开发中的应用实践

    TypeScript 已经成为前端开发领域越来越多开发者的首选工具。它是一种静态类型的超集,由 Microsoft 推出,为开发者提供了强大的静态类型检查、面向对象编程和模块化开发的特性,解决了 JavaScript 的动态类型特性带来的一些问题。 在本篇博文中,我们将深入探讨 TypeScript 在

    2024年02月15日
    浏览(37)
  • 前端桌面应用开发实践:Electron入门指南

    随着互联网的快速发展,前端开发不再局限于网页应用,而是逐渐涉及到桌面应用的开发。Electron作为一种流行的前端桌面应用开发框架,为开发者提供了一种快速构建跨平台桌面应用的方式。本文将介绍Electron的基本概念和使用方法,并通过一个简单的示例来说明其开发实践

    2024年02月11日
    浏览(47)
  • 多端统一开发框架Taro、UniApp和WeApp这三个应用各自在前端开发领域有着独特的定位和功能

    Taro、UniApp和WeApp这三个应用各自在前端开发领域有着独特的定位和功能,下面是对它们的详细介绍以及三者之间的对比,包括各自的优缺点和社区维护支持程度。 一、应用介绍 Taro Taro是一个多端统一开发框架,支持使用React语法编写一次代码,生成多个平台的应用。它旨在提

    2024年04月22日
    浏览(37)
  • Android开发之百度地图定位

    调试版本(debug)和发布版本(release)下的 SHA1 值是不同的,发布 apk 时需要根据发布 apk 对应的 keystore 重新配置 Key。(注意:我们这里使用的是调试版本,在开发时请使用调试版本) 。 Android Studio场景使用keytool (1)进入cmd控制台,执行”cd .android”定位到”.android”文件夹下。

    2023年04月08日
    浏览(47)
  • HTML5+CSS3学习笔记(九)前端页面六大布局(文档流布局、浮动布局、定位布局、表格布局、弹性布局、网格布局)

    本系列更多文章,可以查看专栏 HTML+CSS学习笔记 块级元素自上至下垂直排列,行内元素自左至右水平排列 块级元素独占一行,行内元素不会另起一行 默认情况下,height和width决定内容区的大小;内容区、内边距和边框构成可见区域的大小;外边距决定元素的位置 更多内容可

    2024年02月02日
    浏览(64)
  • 微信小程序开发如何开启地图定位(个人开发版)(连接第三方百度地图api)

    目前腾讯位置服务提供路线规划、地图选点、地铁图、城市选择器插件四款插件产品 在微信公众平台 选择开发工具可开启腾讯位置服务 之后便可以在 设置--第三方设置中添加自己所需要的腾讯地图插件 因为我做的小程序中需要用到地图选点功能 但是在安装 地图选点插件

    2024年02月11日
    浏览(48)
  • uniapp开发小程序获取定位信息(腾讯地图)

    定位一直是一个让人头疼的问题,不是这个有问题就是那里有问题。这里结合我多方查找和实际运行,获得的一些经验给予分享。 怎么进行定位?基本流程是: 1.去腾讯位置服务的控制那里创建一个应用 腾讯位置服务 - 立足生态,连接未来 (qq.com) 2.添加一个key,并开通WebS

    2024年02月22日
    浏览(69)
  • 前端(angular)在谷歌(chrome)浏览器使用高德地图api定位报错超时geolocation time out ,能定位但不安全的方法

    已知信息整合 正如大家搜到的大佬说的原因是chrome浏览器本身的问题。我换成edge就可以。 高德地图给出的地图定位api的常见问题,这是\\\'另外还有个别浏览器(如google Chrome浏览器等)本身的定位接口是黑洞\\\' 以下是能定位但不安全的方法 连接上了外网谷歌浏览器定位是定位

    2024年01月23日
    浏览(48)
  • 从零开始Vue项目中使用MapboxGL开发三维地图教程(四)改变鼠标style、地图置于单击feature中心、量测距离和polgon面积和中心点坐标

    总章节 从零开始Vue项目中使用MapboxGL开发三维地图教程 (一) MapboxGL介绍以及前期vue项目的搭建 (二) Mapbox地图样式 (三) 添加全屏,缩放旋转和比例控制面板以及自定义图标、标记点击弹窗、地图平移等功能 (四) 改变鼠标style、地图置于单击feature中心、量测距离和polgon面积和中

    2024年02月09日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包