uniapp使用地图

Posted 砚言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uniapp使用地图相关的知识,希望对你有一定的参考价值。

uniapp使用地图

使用内置地图查看定位

效果

实现

<!-- 方法一:点击小程序map地图插件跳转到app中打开 -->
<map @click="mapFun" class='map' :latitude="latitude" :longitude="longitude" :markers="covers" />
 
<!-- 方法二:点击button等按钮打开 -->
<button type="default" @click="mapFun">唤醒题图</button>

<!-- js中 -->
// 高德地图、腾讯、百度等地图中打开
data()
    return
	    latitude: 39.909,
		longitude: 116.39742,
		covers: [
			latitude: 39.909,
			longitude: 116.39742,
			width:'50rpx'
		]
    
,
methods:
    mapFun() 
	    uni.openLocation(
		latitude: this.latitude,, //纬度 - 目的地/坐标点
 		longitude: this.longitude,, //经度 - 目的地/坐标点
		name: "电脑城",
		address: "重庆九龙坡"
	    );
   

<map>注意事项:
使用map地图插件时,具体注意事项及使用方法,参考 uniapp地图组件官网:
https://uniapp.dcloud.net.cn/component/map.html#map-地图组件
1. 组件的宽/高推荐写直接量,比如:750rpx,不要设置百分比值。
2.谷歌地图使用 wgs84 坐标,其他地图使用 gcj02 坐标,用错坐标类型会显示偏移。
3.App平台 layer-style 属性需要在地图服务商后台创建,值设置为高德后台申请的字符串https://developer.amap.com/api/android-sdk/guide/create-map/custom
4.
组件在不同平台的底层引擎是不同的:微信小程序为腾讯地图;H5为腾讯地图或谷歌地图;App、支付宝(中国大陆地区版本)小程序为高德地图;百度小程序、快应用为百度地图。app-vue也可以使用百度地图,在manifest中配置,打包后生效,但app-nvue只支持高德地图。另外选择地图、查看地图位置的API也仅支持高德地图。App端如无特殊必要,建议使用高德地图。
5.map 组件默认的api是参考微信小程序的,如需要使用plus.map,可以通过$getAppMap获取原生地图对象。
注意nvue的map组件不是plus.map对象,无法使用$getAppMap
https://uniapp.dcloud.net.cn/api/location/map.html
6.
组件默认为国测局坐标,调用 uni.getLocation 返回结果传递给 组件时,需指定 type 为 gcj02。

uniapp打开第三方地图

打开第三方地图应用需传入 latitude 和 longitude ,name
直接上代码!!!

toMapAPP(latitude, longitude, name) 
	let url = "";
    if (plus.os.name == "Android")  //判断是安卓端
        plus.nativeUI.actionSheet( //选择菜单
            title: "选择地图应用",
            cancel: "取消",
            buttons: [
                title: "腾讯地图"
            , 
                title: "百度地图"
            , 
                title: "高德地图"
            ],
        , 
        function(e) 
            console.log(e);
            switch (e.index) 
                //下面是拼接url,不同系统以及不同地图都有不同的拼接字段
                case 1:
                //注意referer=xxx的xxx替换成你在腾讯地图开发平台申请的key

                    url=`qqmap://map/geocodercoord=$latitude,$longitude&referer=I47BZ-QPEWO-HIPWK-SA5DW-F6ZRE-O2FCO`;
                    break;
                case 2:
                    url = `baidumap://map/marker?location=$latitude,$longitude&title=$name&coord_type=gcj02&src=andr.baidu.openAPIdemo`;
                    break;
                case 3:
                     url = `androidamap://viewMap?sourceApplication=appname&poiname=$name&lat=$latitude&lon=$longitude&dev=0`;
                    break;
                default:
                    break;
			
			if (url != "") 
				url = encodeURI(url);
				//plus.runtime.openURL(url,function(e))调起手机APP应用
				plus.runtime.openURL(url, function(e) 
					plus.nativeUI.alert("本机未安装指定的地图应用");
				);
			
		)
	 else 
		// ios上获取本机是否安装了百度高德地图,需要在manifest里配置
		 // 在manifest.json文件app-plus->distribute->apple->urlschemewhitelist节点下添加
		 //(如urlschemewhitelist:["iosamap","baidumap"])
		 //uniapp 里配置
		 //"ios" : 
		 	// "urlschemewhitelist":["iosamap","baidumap"]
		  // ,
		  plus.nativeUI.actionSheet(
			title: "选择地图应用",
			cancel: "取消",
			buttons: [
				title: "腾讯地图"
			, 
				title: "百度地图"
			, 
				title: "高德地图"
			]
		, function(e) 
			switch (e.index) 
				case 1:
					url = `qqmap://map/geocoder?coord=$latitude,$longitude&referer=I47BZ-QPEWO-HIPWK-SA5DW-F6ZRE-O2FCO`;
					break;
				case 2:
					url =                             `baidumap://map/markerlocation=$latitude,$longitude&title=$name&content=$name&src=ios.baidu.openAPIdemo&coord_type=gcj02`;
					break;
				case 3:
					url = `iosamap://viewMap?sourceApplication=applicationName&poiname=$name&lat=$latitude&lon=$longitude&dev=0`;
					break;
				default:
					break;
			
			if (url != "") 
				url = encodeURI(url);
				plus.runtime.openURL(url, function(e) 
					plus.nativeUI.alert("本机未安装指定的地图应用");
				);
			
		)
	

其他使用可参考
https://blog.csdn.net/m0_56344602/article/details/123640217?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167214148016800186599855%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167214148016800186599855&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-123640217-null-null.142^v68^wechat,201^v4^add_ask,213^v2^t3_control2&utm_term=uniapp%E5%9C%B0%E5%9B%BE&spm=1018.2226.3001.4187

https://blog.csdn.net/weixin_50343572/article/details/116483501?ops_request_misc=&request_id=&biz_id=102&utm_term=uniapp%E5%9C%B0%E5%9B%BE&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-116483501.nonecase&spm=1018.2226.3001.4187

uniapp使用高德地图

uniapp使用高德地图

1、项目前准备

1.1、首先你需要去申请一个属于自己的高德地图key,怎么申请暂不多说需要的去官网看
1.2、链接: 高德地图申请key直通车,点击前往
有一个uniapp项目。

2、页面创建引入

新建一个uniapp的空白页 使用web-view 渲染html文件页

  <web-view src="/hybrid/html/adminr.html"></web-view>

新建一个html文件,头部hede里面引入文件

  <!-- 地图 -->
  <script type="text/javascript">
   //这个地方的securityJsCode是自己的高德安全密钥,用自己的哈
  window._AMapSecurityConfig =  securityJsCode: '蛋糕吃不完我打包带走,respect' 
  </script>
  <script src="https://webapi.amap.com/loader.js"></script>
  <!-- vue -->
  <script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script

然后在body 里面加一个div 就是我们地图的展示了

  <body>
    <div id="app">
      <div id="container"></div>
    </div>
  </body>

3、地图实现js

这个地方除了key用自己的就可以直接复制
链接: 官网直通车

      AMapLoader.load(
            "key": "蛋糕吃不完我打包带走,respect",  // 申请好的Web端开发者Key ,一样用自己的
            "version": "2.0",   // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
            "plugins": ['AMap.Driving'],           // 需要使用的的插件列表,如比例尺'AMap.Scale'等
            "AMapUI":              // 是否加载 AMapUI,缺省不加载
                "version": '1.1',   // AMapUI 版本
                "plugins":['overlay/SimpleMarker'],       // 需要加载的 AMapUI ui插件
            ,
            "Loca":                // 是否加载 Loca, 缺省不加载
                "version": '2.0'  // Loca 版本
            ,
     ).then((AMap)=>
		var map = new AMap.Map('container',
          center: [118.045616, 24.366646], //经纬度地图一进来显的位置
          resizeEnable: true,
		  zoom: 13 //地图显示的缩放级别
		)
     );
        

完成以上步骤 我们就可以获取到一个完整的地图啦 Let me see see

然后我们要给刚刚设置经纬度添加一个标记 不然不知道是哪个位置

4、地图实现单点标记

接着在刚刚的 var map = new AMap.Map下面添加标记

        var map = new AMap.Map('container',
          center: [118.045616, 24.366646], //经纬度地图一进来显的位置
          resizeEnable: true,
		  zoom: 13 //地图显示的缩放级别
		) 
       // 根据经纬度标记地理位置
        var marker = new AMap.Marker(
           position: new AMap.LngLat(118.045616, 24.366646),  
           title: '默认图标' //可以自定义icon图标展示
        )
        // 将创建的点标记添加到已有的地图实例
        map.add(marker)

5、地图实现终点与起点标记

               // 构造路线导航类
                var driving = new AMap.Driving(
                    map: map,
                ); 
                // 根据起终点经纬度规划驾车导航路线
               driving.search(
                new AMap.LngLat(118.099481, 24.583817),
                new AMap.LngLat(118.045616, 24.366646), 
                function(status, result) 
                    if (status === 'complete') 
                      console.log('绘制驾车路线完成')
                     //new AMap.InfoWindow 自定义窗体
                     else 
                      console.log('获取驾车数据失败:' + result)
                    
               );

最终实起点到终点路线

6、最后 上代码~

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
  <title>Document</title>
  <!-- 地圖 -->
  <script type="text/javascript">
    window._AMapSecurityConfig = 
      securityJsCode: '868c41a6460a22634ecee3efc61abe07',
    
  </script>
  <script src="https://webapi.amap.com/loader.js"></script>
  <!-- vus -->
  <script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
 

</head>
<body>
  <div id="app">
    <div id="container"></div>
  </div>
</body>

<script>
  new Vue(
    el: '#app',
    data() 
      return 
    ,
    mounted() 
      this.initr()
    ,
    methods: 
      initr()
         AMapLoader.load(
            "key": "11326b9fd9fdfa988cd15851bc55525a",  // 申请好的Web端开发者Key,首次调用 load 时必填
            "version": "2.0",   // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
            "plugins": ['AMap.Driving'],           // 需要使用的的插件列表,如比例尺'AMap.Scale'等
            "AMapUI":              // 是否加载 AMapUI,缺省不加载
                "version": '1.1',   // AMapUI 版本
                "plugins":['overlay/SimpleMarker'],       // 需要加载的 AMapUI ui插件
            ,
            "Loca":                // 是否加载 Loca, 缺省不加载
                "version": '2.0'  // Loca 版本
            ,
        ).then((AMap)=>
                var map = new AMap.Map('container',
                  center: [118.045616, 24.366646],
                  resizeEnable: true,
								  zoom: 13 //地图显示的缩放级别
                );

                // // 根据经纬度标记地理位置
                // var marker = new AMap.Marker(
                //     position: new AMap.LngLat(118.045616, 24.366646),  
                //     title: '默认图标' //可以自定义icon图标展示
                // );

                // // 将创建的点标记添加到已有的地图实例
                // map.add(marker);

                // 构造路线导航类
                var driving = new AMap.Driving(
                    map: map,
                ); 
                // 根据起终点经纬度规划驾车导航路线
                driving.search(new AMap.LngLat(118.099481, 24.583817), new AMap.LngLat(118.045616, 24.366646), 
                function(status, result) 
                    if (status === 'complete') 
                      console.log('绘制驾车路线完成') 
                      // console.log(status,'status')
                     else 
                      console.log('获取驾车数据失败:' + result)
                    
                );

        ).catch((e)=>
                console.error(e);  //加载错误提示
        );  
      
    ,
  )
</script>

<style scoped>
*
  margin: 0;

body,html,#container 
	width: 100vw;
	height: 100vh


#panel 
  position: fixed;
  background-color: white;
  max-height: 90%;
  overflow-y: auto;
  top: 10px;
  right: 10px;
  width: 280px;

#panel .amap-call 
  background-color: #009cf9;
  border-top-left-radius: 4px;
  border-top-right-radius: 4px;

#panel .amap-lib-driving 
  border-bottom-left-radius: 4px;
  border-bottom-right-radius: 4px;
  overflow: hidden;

        
</style>
</html>

以上是关于uniapp使用地图的主要内容,如果未能解决你的问题,请参考以下文章

【uni-app】微信登录在微信小程序和APP中的区别

uni-app 微信小程序获取手机号并解密

在uni-app框架中使用rem(h5和微信小程序)

uniapp开发的微信小程序,没有appid可以打开吗

uni-app长按二维码跳转微信

图形框架clunch如何实现跨端开发(uniapp+微信小程序)