530 lines
15 KiB
JavaScript
530 lines
15 KiB
JavaScript
var QQMapWX = require('../../utils/qqmap-wx-jssdk.min.js');
|
||
var qqmapsdk;
|
||
Page({
|
||
data: {
|
||
addListShow: false,
|
||
chooseCity: false,
|
||
regionShow: {
|
||
province: false,
|
||
city: false,
|
||
district: true
|
||
},
|
||
regionData: {},
|
||
currentRegion: {
|
||
province: '选择城市',
|
||
city: '选择城市',
|
||
district: '选择城市',
|
||
},
|
||
currentProvince: '选择城市',
|
||
currentCity: '选择城市',
|
||
currentDistrict: '选择城市',
|
||
latitude: '',
|
||
longitude: '',
|
||
centerData: {},
|
||
nearList: [],
|
||
suggestion: [],
|
||
selectedId: 0,
|
||
defaultKeyword: '房产小区',
|
||
keyword: ''
|
||
},
|
||
onLoad: function () {
|
||
let self =this;
|
||
self.mapCtx = wx.createMapContext('myMap')
|
||
// 实例化API核心类
|
||
qqmapsdk = new QQMapWX({
|
||
key: 'RQJBZ-6ZOCX-3QI4R-Z3JUH-GFDOS-YYBJ4'
|
||
});
|
||
wx.showLoading({
|
||
title: '加载中'
|
||
});
|
||
//定位
|
||
wx.getLocation({
|
||
type: 'wgs84',
|
||
success(res) {
|
||
console.log(res)
|
||
const latitude = res.latitude
|
||
const longitude = res.longitude
|
||
const speed = res.speed
|
||
const accuracy = res.accuracy
|
||
//你地址解析
|
||
qqmapsdk.reverseGeocoder({
|
||
location: {
|
||
latitude: latitude,
|
||
longitude: longitude
|
||
},
|
||
success: function (res) {
|
||
//console.log(res)
|
||
self.setData({
|
||
latitude: latitude,
|
||
longitude: longitude,
|
||
currentRegion: res.result.address_component,
|
||
keyword: self.data.defaultKeyword
|
||
})
|
||
// 调用接口
|
||
self.nearby_search();
|
||
},
|
||
});
|
||
},
|
||
fail(err) {
|
||
//console.log(err)
|
||
wx.hideLoading({});
|
||
wx.showToast({
|
||
title: '定位失败',
|
||
icon: 'none',
|
||
duration: 1500
|
||
})
|
||
setTimeout(function () {
|
||
wx.navigateBack({
|
||
delta: 1
|
||
})
|
||
}, 1500)
|
||
}
|
||
})
|
||
},
|
||
onReady: function () {
|
||
|
||
},
|
||
//监听拖动地图,拖动结束根据中心点更新页面
|
||
mapChange: function (e) {
|
||
let self = this;
|
||
if (e.type == 'end' && (e.causedBy == 'scale' || e.causedBy == 'drag')){
|
||
self.mapCtx.getCenterLocation({
|
||
success: function (res) {
|
||
//console.log(res)
|
||
self.setData({
|
||
nearList:[],
|
||
latitude: res.latitude,
|
||
longitude: res.longitude,
|
||
})
|
||
self.nearby_search();
|
||
}
|
||
})
|
||
}
|
||
|
||
},
|
||
//重新定位
|
||
reload: function () {
|
||
this.onLoad();
|
||
},
|
||
//整理目前选择省市区的省市区列表
|
||
getRegionData: function () {
|
||
let self = this;
|
||
//调用获取城市列表接口
|
||
qqmapsdk.getCityList({
|
||
success: function (res) {//成功后的回调
|
||
//console.log(res)
|
||
let provinceArr = res.result[0];
|
||
let cityArr = [];
|
||
let districtArr = [];
|
||
for (var i = 0; i < provinceArr.length; i++) {
|
||
var name = provinceArr[i].fullname;
|
||
if (self.data.currentRegion.province == name) {
|
||
if (name == '北京市' || name == '天津市' || name == '上海市' || name == '重庆市') {
|
||
cityArr.push(provinceArr[i])
|
||
} else {
|
||
qqmapsdk.getDistrictByCityId({
|
||
// 传入对应省份ID获得城市数据,传入城市ID获得区县数据,依次类推
|
||
id: provinceArr[i].id,
|
||
success: function (res) {//成功后的回调
|
||
//console.log(res);
|
||
cityArr = res.result[0];
|
||
self.setData({
|
||
regionData: {
|
||
province: provinceArr,
|
||
city: cityArr,
|
||
district: districtArr
|
||
}
|
||
})
|
||
},
|
||
fail: function (error) {
|
||
//console.error(error);
|
||
},
|
||
complete: function (res) {
|
||
//console.log(res);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
}
|
||
for (var i = 0; i < res.result[1].length; i++) {
|
||
var name = res.result[1][i].fullname;
|
||
if (self.data.currentRegion.city == name) {
|
||
qqmapsdk.getDistrictByCityId({
|
||
// 传入对应省份ID获得城市数据,传入城市ID获得区县数据,依次类推
|
||
id: res.result[1][i].id,
|
||
success: function (res) {//成功后的回调
|
||
//console.log(res);
|
||
districtArr = res.result[0];
|
||
self.setData({
|
||
regionData: {
|
||
province: provinceArr,
|
||
city: cityArr,
|
||
district: districtArr
|
||
}
|
||
})
|
||
},
|
||
fail: function (error) {
|
||
//console.error(error);
|
||
},
|
||
complete: function (res) {
|
||
//console.log(res);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
},
|
||
fail: function (error) {
|
||
//console.error(error);
|
||
},
|
||
complete: function (res) {
|
||
//console.log(res);
|
||
}
|
||
});
|
||
},
|
||
onShow: function () {
|
||
let self = this;
|
||
},
|
||
//地图标记点
|
||
addMarker: function (data) {
|
||
//console.log(data)
|
||
//console.log(data.title)
|
||
var mks = [];
|
||
mks.push({ // 获取返回结果,放到mks数组中
|
||
title: data.title,
|
||
id: data.id,
|
||
addr: data.addr,
|
||
province: data.province,
|
||
city: data.city,
|
||
district: data.district,
|
||
latitude: data.latitude,
|
||
longitude: data.longitude,
|
||
iconPath: "../../assets/my_marker.png", //图标路径
|
||
width: 25,
|
||
height: 25
|
||
})
|
||
this.setData({ //设置markers属性,将搜索结果显示在地图中
|
||
markers: mks,
|
||
currentRegion: {
|
||
province: data.province,
|
||
city: data.city,
|
||
district: data.district,
|
||
}
|
||
})
|
||
wx.hideLoading({});
|
||
},
|
||
//点击选择搜索结果
|
||
backfill: function (e) {
|
||
var id = e.currentTarget.id;
|
||
let name = e.currentTarget.dataset.name;
|
||
for (var i = 0; i < this.data.suggestion.length; i++) {
|
||
if (i == id) {
|
||
//console.log(this.data.suggestion[i])
|
||
this.setData({
|
||
centerData: this.data.suggestion[i],
|
||
addListShow: false,
|
||
latitude: this.data.suggestion[i].latitude,
|
||
longitude: this.data.suggestion[i].longitude
|
||
});
|
||
this.nearby_search();
|
||
return;
|
||
//console.log(this.data.centerData)
|
||
}
|
||
}
|
||
},
|
||
//点击选择地图下方列表某项
|
||
chooseCenter: function (e) {
|
||
var id = e.currentTarget.id;
|
||
let name = e.currentTarget.dataset.name;
|
||
for (var i = 0; i < this.data.nearList.length; i++) {
|
||
if (i == id) {
|
||
this.setData({
|
||
selectedId: id,
|
||
centerData: this.data.nearList[i],
|
||
latitude: this.data.nearList[i].latitude,
|
||
longitude: this.data.nearList[i].longitude,
|
||
});
|
||
this.addMarker(this.data.nearList[id]);
|
||
return;
|
||
//console.log(this.data.centerData)
|
||
}
|
||
}
|
||
},
|
||
//显示搜索列表
|
||
showAddList: function () {
|
||
this.setData({
|
||
addListShow: true
|
||
})
|
||
},
|
||
// 根据关键词搜索附近位置
|
||
nearby_search: function () {
|
||
var self = this;
|
||
wx.hideLoading();
|
||
wx.showLoading({
|
||
title: '加载中'
|
||
});
|
||
// 调用接口
|
||
qqmapsdk.search({
|
||
keyword: self.data.keyword, //搜索关键词
|
||
//boundary: 'nearby(' + self.data.latitude + ', ' + self.data.longitude + ', 1000, 16)',
|
||
location: self.data.latitude + ',' + self.data.longitude,
|
||
page_size: 20,
|
||
page_index: 1,
|
||
success: function (res) { //搜索成功后的回调
|
||
//console.log(res.data)
|
||
var sug = [];
|
||
for (var i = 0; i < res.data.length; i++) {
|
||
sug.push({ // 获取返回结果,放到sug数组中
|
||
title: res.data[i].title,
|
||
id: res.data[i].id,
|
||
addr: res.data[i].address,
|
||
province: res.data[i].ad_info.province,
|
||
city: res.data[i].ad_info.city,
|
||
district: res.data[i].ad_info.district,
|
||
latitude: res.data[i].location.lat,
|
||
longitude: res.data[i].location.lng
|
||
});
|
||
}
|
||
self.setData({
|
||
selectedId: 0,
|
||
centerData: sug[0],
|
||
nearList: sug,
|
||
suggestion: sug
|
||
})
|
||
self.addMarker(sug[0]);
|
||
},
|
||
fail: function (res) {
|
||
//console.log(res);
|
||
},
|
||
complete: function (res) {
|
||
//console.log(res);
|
||
}
|
||
});
|
||
},
|
||
//根据关键词搜索匹配位置
|
||
getsuggest: function (e) {
|
||
var _this = this;
|
||
var keyword = e.detail.value;
|
||
_this.setData({
|
||
addListShow: true
|
||
})
|
||
//调用关键词提示接口
|
||
qqmapsdk.getSuggestion({
|
||
//获取输入框值并设置keyword参数
|
||
keyword: keyword, //用户输入的关键词,可设置固定值,如keyword:'KFC'
|
||
location: _this.data.latitude + ',' + _this.data.longitude,
|
||
page_size: 20,
|
||
page_index: 1,
|
||
//region:'北京', //设置城市名,限制关键词所示的地域范围,非必填参数
|
||
success: function (res) {//搜索成功后的回调
|
||
//console.log(res);
|
||
var sug = [];
|
||
for (var i = 0; i < res.data.length; i++) {
|
||
sug.push({ // 获取返回结果,放到sug数组中
|
||
title: res.data[i].title,
|
||
id: res.data[i].id,
|
||
addr: res.data[i].address,
|
||
province: res.data[i].province,
|
||
city: res.data[i].city,
|
||
district: res.data[i].district,
|
||
latitude: res.data[i].location.lat,
|
||
longitude: res.data[i].location.lng
|
||
});
|
||
}
|
||
_this.setData({ //设置suggestion属性,将关键词搜索结果以列表形式展示
|
||
suggestion: sug,
|
||
nearList: sug,
|
||
keyword: keyword
|
||
});
|
||
},
|
||
fail: function (error) {
|
||
//console.error(error);
|
||
},
|
||
complete: function (res) {
|
||
//console.log(res);
|
||
}
|
||
});
|
||
},
|
||
//打开选择省市区页面
|
||
chooseCity: function () {
|
||
let self = this;
|
||
self.getRegionData();
|
||
self.setData({
|
||
chooseCity: true,
|
||
regionShow: {
|
||
province: false,
|
||
city: false,
|
||
district: true
|
||
},
|
||
currentProvince: self.data.currentRegion.province,
|
||
currentCity: self.data.currentRegion.city,
|
||
currentDistrict: self.data.currentRegion.district,
|
||
})
|
||
},
|
||
//选择省
|
||
showProvince: function () {
|
||
this.setData({
|
||
regionShow: {
|
||
province: true,
|
||
city: false,
|
||
district: false
|
||
}
|
||
})
|
||
},
|
||
//选择城市
|
||
showCity: function () {
|
||
this.setData({
|
||
regionShow: {
|
||
province: false,
|
||
city: true,
|
||
district: false
|
||
}
|
||
})
|
||
},
|
||
//选择地区
|
||
showDistrict: function () {
|
||
this.setData({
|
||
regionShow: {
|
||
province: false,
|
||
city: false,
|
||
district: true
|
||
}
|
||
})
|
||
},
|
||
//选择省之后操作
|
||
selectProvince: function (e) {
|
||
//console.log(e)
|
||
let self = this;
|
||
let id = e.currentTarget.dataset.id;
|
||
let name = e.currentTarget.dataset.name;
|
||
self.setData({
|
||
currentProvince: name,
|
||
currentCity: '请选择城市',
|
||
})
|
||
if (name == '北京市' || name == '天津市' || name == '上海市' || name == '重庆市'){
|
||
var provinceArr = self.data.regionData.province;
|
||
var cityArr = [];
|
||
for (var i = 0; i < provinceArr.length;i++){
|
||
if(provinceArr[i].fullname == name){
|
||
cityArr.push(provinceArr[i])
|
||
self.setData({
|
||
regionData: {
|
||
province: self.data.regionData.province,
|
||
city: cityArr,
|
||
district: self.data.regionData.district
|
||
}
|
||
})
|
||
self.showCity();
|
||
return;
|
||
}
|
||
}
|
||
}else{
|
||
let bj = self.data.regionShow;
|
||
self.getById(id, name, bj)
|
||
}
|
||
},
|
||
//选择城市之后操作
|
||
selectCity: function (e) {
|
||
let self = this;
|
||
let id = e.currentTarget.dataset.id;
|
||
let name = e.currentTarget.dataset.name;
|
||
self.setData({
|
||
currentCity: name,
|
||
currentDistrict: '请选择城市',
|
||
})
|
||
let bj = self.data.regionShow;
|
||
self.getById(id, name, bj)
|
||
},
|
||
//选择区县之后操作
|
||
selectDistrict: function (e) {
|
||
let self = this;
|
||
let id = e.currentTarget.dataset.id;
|
||
let name = e.currentTarget.dataset.name;
|
||
let latitude = e.currentTarget.dataset.latitude;
|
||
let longitude = e.currentTarget.dataset.longitude;
|
||
self.setData({
|
||
currentDistrict: name,
|
||
latitude: latitude,
|
||
longitude: longitude,
|
||
currentRegion: {
|
||
province: self.data.currentProvince,
|
||
city: self.data.currentCity,
|
||
district: name
|
||
},
|
||
chooseCity: false,
|
||
keyword: self.data.defaultKeyword
|
||
})
|
||
self.nearby_search();
|
||
},
|
||
//根据选择省市加载市区列表
|
||
getById: function (id,name,bj) {
|
||
let self = this;
|
||
qqmapsdk.getDistrictByCityId({
|
||
// 传入对应省份ID获得城市数据,传入城市ID获得区县数据,依次类推
|
||
id: id, //对应接口getCityList返回数据的Id,如:北京是'110000'
|
||
success: function (res) {//成功后的回调
|
||
//console.log(res);
|
||
if(bj.province){
|
||
self.setData({
|
||
regionData: {
|
||
province: self.data.regionData.province,
|
||
city: res.result[0],
|
||
district: self.data.regionData.district
|
||
}
|
||
})
|
||
self.showCity();
|
||
} else if (bj.city) {
|
||
self.setData({
|
||
regionData: {
|
||
province: self.data.regionData.province,
|
||
city: self.data.regionData.city,
|
||
district: res.result[0]
|
||
}
|
||
})
|
||
self.showDistrict();
|
||
} else {
|
||
self.setData({
|
||
chooseCity: false,
|
||
})
|
||
}
|
||
},
|
||
fail: function (error) {
|
||
//console.error(error);
|
||
},
|
||
complete: function (res) {
|
||
//console.log(res);
|
||
}
|
||
});
|
||
},
|
||
//返回上一页或关闭搜索页面
|
||
back1: function () {
|
||
if (this.data.addListShow) {
|
||
this.setData({
|
||
addListShow: false
|
||
})
|
||
}else {
|
||
wx.navigateBack({
|
||
delta: 1
|
||
})
|
||
}
|
||
},
|
||
//关闭选择省市区页面
|
||
back2: function () {
|
||
this.setData({
|
||
chooseCity: false
|
||
})
|
||
},
|
||
//确认选择地址
|
||
selectedOk: function () {
|
||
let pages = getCurrentPages(); //获取当前页面js里面的pages里的所有信息。
|
||
let prevPage = pages[pages.length - 2];
|
||
console.log(this.data.centerData)
|
||
prevPage.setData({
|
||
storeAddress: this.data.centerData.title,
|
||
storeLatitude: this.data.centerData.latitude,
|
||
storeLongitude: this.data.centerData.longitude,
|
||
})
|
||
wx.navigateBack({
|
||
delta: 1
|
||
})
|
||
}
|
||
}) |