如果只是要获取当前用户的经纬度和打开微信自带的地图

只需要

jsApiList: ["getLocation","openLocation"]

// 先获得
wx.getLocation({
type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
success: function (res) {
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
var speed = res.speed; // 速度,以米/每秒计
var accuracy = res.accuracy; // 位置精度
// 通过获得的经纬度打开地图
openMap(longitude,latitude)
}
}); function openMap(lng,lat){
wx.openLocation({
latitude: 0, // 纬度,浮点数,范围为90 ~ -90
longitude: 0, // 经度,浮点数,范围为180 ~ -180。
name: '', // 位置名
address: '', // 地址详情说明
scale: 1, // 地图缩放级别,整形值,范围从1~28。默认为最大
infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
});
}

如果还要详细地址或者地图可以操作,需要借助百度地图,腾讯地图,高德的帮助

但是因为是微信,当然选自家的产品了

使用腾讯地图

开发文档

需要申请腾讯API的使用权,就是Key,从上面的开发文档地址进去,找到常见问题,点击申请Key,如果看不懂就赶紧回去读初中吧

引入js,目前没有本地文件,只能用cdn

//YOUR_KE 就是申请到的Key
<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=YOUR_KEY"></script>

然后查看开发文档的示例,复制代码测试就行

常用的功能有【创建地图,改变地图中心,地址解析,逆地址解析,点击地图事件,点击地图时只添加一个标记,向地图上添加一个圆,给圆形覆盖物绑定单击事件】

将上面的功能融合成一个能搜索,能修改位置,能获取位置,能再次定位的插件

<div id="mapBox" style="display: none;"></div>
<div id="nowPlace">正在定位...</div>
<div id="getPlace">不准确? 重新定位</div>
#mapBox{
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 100;
background-color: white;
}
function wxGetLocation(cb,getSuccess) {
//alert('进入了wxGetLocation')
if(arguments.length==2){
//alert('arguments.length')
wx.getLocation({
type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' | wgs84
success: function (res) {
//alert("185"+JSON.stringify(res))
// console.log('获得了wxGetLocation的res')
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
var speed = res.speed; // 速度,以米/每秒计
var accuracy = res.accuracy; // 位置精度
// 把经纬度传给腾讯地图获得准确地点,微信是没提供准确地点的api的
cb(res,getSuccess)
},
error:function (res) {
// console.log('wx.getLocation报错'+JSON.stringify(res));
}
});
}
} function qqMapGetPlace(res,getSuccess) {
//alert('进入了qqMapGetPlace')
geocoder = new qq.maps.Geocoder({
complete : function(result){
//alert('获得了qqMapGetPlace的result')
getSuccess(result)
}
});
var latLng = new qq.maps.LatLng(res.latitude,res.longitude);
geocoder.getAddress(latLng);
} function qqMapOpen(loc,opt) {
var newloc = "";
var marker = "";
var zoom = opt.zoom || 15;
var now = new Date().getTime();
var domId = 'map_'+ now;
var str = `<div id="${domId}" style="width:${opt.width};height:${opt.height};"></div><div id="btnGroup_${now}" style="position: fixed;width: 10%;bottom: 0;right: 0;"></div>`;
$('#'+opt.id).append(str);
map = new qq.maps.Map(document.getElementById(domId), {
center: new qq.maps.LatLng(loc.lat,loc.lng), // 地图的中心地理坐标。
zoom:zoom // 地图的中心地理坐标。
});
marker=new qq.maps.Marker({
position: loc,
map:map
});
// 添加返回页面的功能
var str = `<img id="close_${now}" src="img/close.svg" style="width:100%;background-color: white;border-radius: 50%;"/> `;
$('#btnGroup_'+now).append(str);
$('#close_'+now).click(function () {
if(opt.onClose){
opt.onClose($('#map_'+now)[0],newloc)
}
})
//添加可以修改位置的功能
if(opt.isChange){
if(opt.radius){
var changeScopeLat = opt.changeScopeLat || loc.lat;
var changeScopeLng = opt.changeScopeLng || loc.lng;
var circle=new qq.maps.Circle({
map:map,
center:new qq.maps.LatLng(changeScopeLat,changeScopeLng),
radius:opt.radius,
strokeWeight:1
});
qq.maps.event.addListener(circle,"click",function(event){
newloc = event;
if(marker){
marker.setMap(null);
}
marker=new qq.maps.Marker({
position:event.latLng,
map:map
});
});
}else{
//添加监听事件 获取鼠标单击事件
qq.maps.event.addListener(map, 'click', function(event) {
newloc = event;
if(marker){
marker.setMap(null);
}
marker=new qq.maps.Marker({
position:event.latLng,
map:map
});
});
} // 添加回到原点的功能
var str = `<img id="return_${now}" src="img/local.svg" style="width:100%;background-color: white;border-radius: 50%;"/> `;
$('#btnGroup_'+now).prepend(str);
$('#return_'+now).click(function () {
map.setCenter(loc);
map.zoomTo(zoom);
if(marker){
marker.setMap(null);
marker=new qq.maps.Marker({
position:loc,
map:map
});
}
})
} //添加搜索框
if(opt.isFind){
var str = `<div style="position: fixed;width: 100%;top: 0; left:0; background-color: #f0f0f0;display: flex;align-items: center;z-index: 1;padding: 0.5rem;">
<div style="flex: 1">
<input id="inp_${now}" type="text" style="width: 100%;padding:0.4rem;border:1px solid rgb(200,200,200);border-radius:0.2rem;" placeholder="输入详细地址">
</div>
<img id="find_${now}" src="img/find.png" alt="" style="width:1rem;margin-left: 0.5rem;">
</div> `;
$('#map_'+now).append(str);
findGeocoder = new qq.maps.Geocoder({
complete : function(result){
map.zoomTo(zoom);
map.setCenter(result.detail.location);
}
});
$('#find_'+now).click(function () {
var val = $('#inp_'+now).val().trim()
findGeocoder.getLocation(val);
})
}
}

如何使用

// 在最上面声明
var locat = {}
var firstPlace = {} wx.ready(function(){
getPlace({first:1})
}) function getPlace(opt){
wxGetLocation(qqMapGetPlace,function (res) {
locat = res.detail.location; //根据点击会发生改变
firstPlace = {
latitude:locat.lat,
longitude:locat.lng
}; //不重新获取是不变的
var addressComponents = res.detail.addressComponents;
var str = addressComponents.province+addressComponents.city+addressComponents.district+addressComponents.street+addressComponents.streetNumber;
locat.address = str;
$('#nowPlace').html(str);
if(opt.first){
$('#nowPlace').click(function () {
qqMapOpen(locat,{
'id':'mapBox',
'width':'100%',
'height':'100%',
'isChange':true,
'isFind':true,
'radius':50,
'zoom':18,
'changeScopeLat':firstPlace.latitude,
'changeScopeLng':firstPlace.longitude,
onClose:function (p,newloc) {
$(p).remove();
$('#mapBox').hide()
if(newloc){
locat = newloc.latLng;
qqMapGetPlace({latitude:locat.lat,longitude:locat.lng},function (newPlace) {
locat.address = newPlace.detail.address;
$('#nowPlace').html(newPlace.detail.address);
})
}
}
})
$('#mapBox').show()
})
$('#getPlace').click(function () { getPlace({}) })
}
})
}

还需要一个img文件夹,有三个图标

一个是local.svg

一个是close.svg

一个是find.png

效果图如下

wx地址和腾讯地图的更多相关文章

  1. [微信小程序] 微信小程序获取用户定位信息并加载对应城市信息,wx.getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息

    因为需要在小程序加个定位并加载对应城市信息 然而小程序自带api目前只能获取经纬度不能逆解析,虽然自己解析方式,但是同时也要调用地图,难道用户每次进小程序还要强行打开地图选择地址才定位吗?多麻烦也不利 ...

  2. PHP CURL根据详细地址获取腾讯地图经纬度

    <?php $address = "广东省广州市天河区"; $point = getPoint($address); var_dump($point);//输出经纬度 /** ...

  3. 微信小程序wx.getLocation()获取经纬度及JavaScript SDK调用腾讯地图API获取某一类地址

    简介 腾讯位置服务为微信小程序提供了基础的标点能力.线和圆的绘制接口等地图组件和位置展示.地图选点等地图API位置服务能力支持,使得开发者可以自由地实现自己的微信小程序产品. 在此基础上,腾讯位置服务 ...

  4. JAVA使用经纬度通过腾讯地图API获取详细地址

    官方文档:https://lbs.qq.com/service/webService/webServiceGuide/webServiceGcoder package com.weixin.map; ...

  5. 微信小程度腾讯地图SDK使用方法

    在开发过程中,不少人肯定遇到过要用到地图,那么在小程序里,腾讯也给出了相应的SDK供我们来使用.那么接下来,就介绍下如何使用该SDK实现获取经纬度然后显示当前用户所在地址 首先第一步:下载腾讯地图SD ...

  6. 微信小程序 使用腾讯地图SDK详解及实现步骤

    信小程序 使用腾讯地图SDK详解及实现步骤    微信小程序JavaScript SDK: 官方文档:http://lbs.qq.com/qqmap_wx_jssdk/index.html 步骤: 1 ...

  7. 微信小程序腾讯地图SDK使用方法

    一.本篇文章主要知识点有以下几种: 1.授权当前位置 2.map组件的使用 3.腾讯地图逆地址解析 4.坐标系的转化 二.效果如下: 三.WXML代码 <map id="map&quo ...

  8. 地图API使用文档-以腾讯地图为例

    目录 腾讯地图API 2 1.API概览... 2 1.1 WebService API(官网注明是beta版本,可能不稳定,慎用):... 2 1.2 URL API:... 2 1.3 静态图AP ...

  9. 基于MySQL + Node.js + Leaflet的离线地图展示,支持百度、谷歌、高德、腾讯地图

    1. 基本说明 本项目实现了离线展示百度.谷歌.高德.腾讯地图.主要功能如下: 实现了地图瓦片图下载.存储.目前支持存储至MySQL Node.js服务调用MySQL中的瓦片图 Leaflet展示地图 ...

随机推荐

  1. Write-Up-wakanda-1

    关于 下载地址:点我 哔哩哔哩:哔哩哔哩 祖传开头 信息收集 这里用vm虚拟机可能有一点问题,因为官方的是用vbox虚拟机导出的镜像文件.所以这次使用vbox虚拟机. ➜ ~ ip a show de ...

  2. ios中时间倒计时

    博客地址 https://github.com/sundayios/SQCountTimeDown.git

  3. 记一次安装体验:pwn工具

    几天前删了JDK,结果和VM在一个目录中,结果VM全没了,重安走起 记载一下安装虚拟机出现的问题,官网一个字....慢,于是找了百度网盘,据说win10版本太低没法用,我就下了vw15.5.0(建立在 ...

  4. Linux 下面搭建KMS服务器

    1. 下载安装Linux 版的KMS服务软件 # wget https://github.com/Wind4/vlmcsd/releases/download/svn1111/binaries.tar ...

  5. myBatis mapper接口方法重载问题

    在mybatis框架中,写dao层的mapper接口时,是不可以进行方法的重载的,下面是截图证明:   当mapper接口中有方法的重载时,会出现异常,   这是mapper接口中定义的两个方法,进行 ...

  6. Nodejs 开发 随手记

    console.log(Object.prototype.toString.call(Now.toString())); //类型判断

  7. 「HNOI2002」营业额统计

    「HNOI2002」营业额统计 传送门 这题比较板子吧应该... 有几个需要注意的地方: 第一次插入时就要贡献答案 在每次计算贡献时,注意分裂出来的子树是否为空,并且要对两边的相邻元素之差取 \(\m ...

  8. unique 验证 criteria 使用

    model array('code', 'unique', 'criteria' =>array('condition' =>'schoolid=:schoolid','params' = ...

  9. 1-1SpringBoot简介

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...

  10. jQuery Validation Engine(二) checkHello data-errormessage

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...