| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- // const app = getApp();
- // const api = require('../../../api/index.js');
-
- const QQMapWX = require('../../../libs/qqmap-wx-jssdk.min.js'); // 引入QQ地图SDK(需自行下载)
- // this.qqmapsdk = require('../../../libs/qqmap-wx-jssdk.min.js');
-
- // 初始化QQ地图API(需在腾讯地图开放平台申请key)
- const qqmapsdk = new QQMapWX({
- key: 'VRGBZ-ZFRHB-SKIUP-NHHJ3-TXGJT-ZIFG3' // 替换为自己的API密钥(https://lbs.qq.com/dev/console/application/mine)
- });
-
- Page({
- data: {
- latitude: 0, // 纬度
- longitude: 0, // 经度
- searchKey: '', // 搜索关键词
- poiList: [], // 附近地点列表
- markers: [], // 地图标记点
- loading: false // 加载状态
- },
-
- // 保持原有逻辑不变,仅需确保接收省市区参数正常
- onLoad(options) {
- if (options.params) {
- try {
- this.setData({
- prevParams: JSON.parse(decodeURIComponent(options.params))
- });
- } catch (err) {
- console.error('参数解析失败:', err);
- }
- }
- this.getLocation();
- },
-
- // 获取用户当前定位
- getLocation() {
- wx.showLoading({
- title: '获取位置中...'
- });
-
- wx.getLocation({
- type: 'gcj02', // 国测局坐标系(微信地图默认)
- success: (res) => {
- const { latitude, longitude } = res;
- this.setData({
- latitude,
- longitude,
- // 添加当前位置标记点
- markers: [{
- id: 0,
- latitude,
- longitude,
- iconPath: 'https://esos-iot.com/myminio/project/0b0593293af54ea097b168cea479c25c.png', // 可自行添加定位图标
- width: 30,
- height: 30,
- anchor: { x: 0.5, y: 0.5 }
- }]
- });
- // 获取附近地点
- this.getNearbyPoi(latitude, longitude);
- },
- fail: (err) => {
- wx.hideLoading();
- wx.showToast({
- title: '获取定位失败,请开启定位权限',
- icon: 'none',
- duration: 2000
- });
- // 若定位失败,使用上一页已选地址的经纬度(如果有)
- const { province, city, district } = this.data.prevFormData;
- if (province && city && district) {
- this.geocoder(`${province}${city}${district}`);
- }
- }
- });
- },
-
- // 地址转经纬度(地理编码)
- geocoder(address) {
- qqmapsdk.geocoder({
- address: address,
- success: (res) => {
- if (res.result && res.result.location) {
- const { lat, lng } = res.result.location;
- this.setData({
- latitude: lat,
- longitude: lng,
- markers: [{
- id: 0,
- latitude: lat,
- longitude: lng,
- iconPath: 'https://esos-iot.com/myminio/project/0b0593293af54ea097b168cea479c25c.png',
- width: 30,
- height: 30,
- anchor: { x: 0.5, y: 0.5 }
- }]
- });
- this.getNearbyPoi(lat, lng);
- }
- },
- fail: () => {
- wx.showToast({
- title: '地址解析失败',
- icon: 'none'
- });
- }
- });
- },
-
- // 获取附近地点(POI搜索)
- getNearbyPoi(latitude, longitude) {
- this.setData({ loading: true });
-
- qqmapsdk.search({
- keyword: this.data.searchKey || '小区,商铺,写字楼,学校,医院', // 默认搜索关键词
- location: `${latitude},${longitude}`,
- radius: 2000, // 搜索半径(2000米)
- page_size: 20, // 每页结果数
- success: (res) => {
- wx.hideLoading();
- this.setData({
- poiList: res.data,
- loading: false
- });
- },
- fail: (err) => {
- wx.hideLoading();
- this.setData({ loading: false });
- wx.showToast({
- title: '获取附近地点失败',
- icon: 'none'
- });
- }
- });
- },
-
- // 搜索输入事件
- handleSearchInput(e) {
- this.setData({ searchKey: e.detail.value });
- },
-
- // 搜索确认
- handleSearchConfirm() {
- const { searchKey, latitude, longitude } = this.data;
- if (searchKey.trim()) {
- // 关键词搜索
- this.getNearbyPoi(latitude, longitude);
- }
- },
-
- // 地图视野变化事件(拖动地图后刷新附近地点)
- handleRegionChange(e) {
- if (e.type === 'end' && e.causedBy === 'drag') {
- const { latitude, longitude } = this.data.mapCtx.getCenterLocation();
- this.setData({ latitude, longitude });
- this.getNearbyPoi(latitude, longitude);
- }
- },
-
- // 点击地图标记点
- handleMarkerTap(e) {
- const { id } = e.markerId;
- const { poiList } = this.data;
- if (id > 0 && poiList[id - 1]) {
- this.selectPoi({ currentTarget: { dataset: { poi: poiList[id - 1] } } });
- }
- },
-
- // 选择地点
- selectPoi(e) {
- console.log(e);
- const selectedPoi = e.currentTarget.dataset.poi;
- if (!selectedPoi) return;
-
- // 解析地址信息(省市区+详细地址)
- const {ad_info,address, title, location } = selectedPoi;
- const detailAddress = address + title;
-
- // 组装地址数据addressDetails
- const addressData = {
- province:ad_info.province,
- city:ad_info.city,
- district:ad_info.district,
- addressDetails: detailAddress,
- latitude: location.lat,
- longitude: location.lng,
- poiName: title // 标记点名称(如小区名、商铺名)
- };
- console.log(addressData);
-
- // 返回上一页并传递选择的地址数据
- const pages = getCurrentPages();
- const prevPage = pages[pages.length - 2];
- if (prevPage) {
- prevPage.setData({
- 'formData.province': ad_info.province,
- 'formData.city': ad_info.city,
- 'formData.district': ad_info.district,
- 'formData.addressDetails': detailAddress,
- 'formData.poiName': title,
- 'formData.latitude': location.lat,
- 'formData.longitude': location.lng
- });
- }
-
- wx.navigateBack({ delta: 1 });
- }
- });
|