окончательный эффект
1. Реализуемая функция
-
Показать карту.
- Ссылаться на
map
компоненты
- Ссылаться на
-
Показать несколько магазинов на карте.
-
marker
Точки маркеров используются для отображения местоположения маркеров на карте.
-
-
Щелкните значок увеличения магазина, чтобы отобразить информацию о выбранном магазине.
- Измените размер отметки выбранного магазина.
-
Поместите визуальный маркер в центр карты.
-
cover-view
Метка размещает изображение маркера, размещает его в центре размера карты и отлаживает его самостоятельно.
-
-
После перемещения получите расположение центральной точки карты и выберите ближайший магазин.
-
map
изbindregionchange
Событие, срабатывающее при изменении поля зрения, повторном запросе, изменении размера метки для ближайшего магазина (Есть меры предосторожности).
-
-
После перемещения инверсный адрес разбивается на китайский адрес по координатам центральной точки экрана (подробности см. в четвертом).
-
Увеличьте выбор других страниц города (упакованных в компоненты,нажмите здесь, чтобы посмотреть).
-
Щелкните другие города, преобразуйте координаты в координаты в соответствии с названием и адресом города и обновите представление (подробности см. в четвертом).
2. Вопросы, требующие внимания
- Срабатывает каждый раз при обновлении представления
bindregionchange
событие, если координаты центральной точки вида карты получены и переназначены на координаты карты, это событие будет запускаться непрерывно. - Каждый раз, когда вы перетаскиваете положение центральной точки вида, вам нужно перезапросить магазин рядом с координатами. Обратите внимание на способ упаковки
- Метки, отображаемые на карте, должны использовать
cover-view
илиcover-image
3. Связанные технологии и ссылки
- апплет
map
компоненты - Апплет WeChat от Tencent Map, javaScript SDK, преобразование адреса (китайский адрес в координаты) и обратное преобразование адреса (координаты в китайский адрес)
4. Использование апплета WeChat javaScript SDK Tencent Maps
Использование Перейти непосредственно к официальным документам, введение также очень подробно. JS-файл непосредственно к загрузке, затем введен. Не изменил ES6 выделения по умолчанию / импорт в экспорт введен
export default QQMapWX
Затем используйте импорт страницы, чтобы создать экземпляр основного класса API в onLoad.
//index.vue
import QQMapWX from "@/utils/qqmap-wx-jssdk"; //腾讯地图,reverseGeocoder逆地址转码
export default {
data(){
return {
qqmapsdk: null, //实例化地图sdk
}
},
onLoad(){
// 实例化API核心类
this.qqmapsdk = new QQMapWX({
key: "3P2BZ-6G***-C***3-***5G-3VDYH-N5BGH" // 必填
});
}
}
Обратно разрешить подробный адрес в соответствии с координатами
//根据坐标逆解析详细地址
getCityinfo() {
return new Promise((resolved, rejected) => {
const that = this;
this.qqmapsdk.reverseGeocoder({
location: {
latitude: this.latitude,
longitude: this.longitude
},
success(res) {
console.log("地址转码成功", res);
const _res = res.result;
that.cityName = _res.address_component.city;
that.update({
cityName: _res.address_component.city,
nowPlace:
_res.formatted_addresses.recommend + " - " + _res.address
});
that.getShopData();
},
fail: function(res) {
console.log(res);
}
});
});
},
Разрешается в координаты на основе города/адреса
//根据城市/地址解析成坐标
cityNameGetPosition() {
return new Promise((resolved, rejected) => {
const that = this;
this.qqmapsdk.geocoder({
address: this.cityName,
success(res) {
console.log("根据地址转换坐标", res);
const _res = res.result.location;
that.latitude = _res.lat;
that.longitude = _res.lng;
that.update({
latitude: _res.lat,
longitude: _res.lng
});
that.getCityinfo();
},
fail(err) {
console.log("根据地址转换坐标err", err);
}
});
});
},
5. Часть кода реализована
Используемая логика запроса и функции должна быть такой, и была составлена карта разума. (Примечание: между кодом и ментальной картой могут быть расхождения. Изображение представляет собой сводку после завершения кода, который является относительно полным)
Этот проект разработан с использованием небольшой программы, разработанной mpvue, в mpvuebindregionchange
событие становится
//不是mpvue开发请无视
@regionchange="getCenterMap1"
@end="getCenterMap"
компонент карты
<div>
<!-- 地图组件 -->
<map
id="map"
:longitude="longitude"
:latitude="latitude"
scale="13"
:markers="markers"
@markertap="markertap"
@regionchange="getCenterMap1"
@end="getCenterMap"
show-location
style="width:750rpx; height:99vh;"
>
</map>
<!-- 中心点 -->
<cover-image class="centerImg"
src="/static/images/person.png"
></cover-image>
<!-- 回到我的定位 -->
<cover-image
@click="getMyPosition"
class="backMyPosition"
src="/static/images/location.png"
></cover-image>
</div>
получить собственное позиционированиеwx.getLocation
// 获取定位
getMyPosition() {
return new Promise((resolved, rejected) => {
wx.getLocation({
type: "wgs84",
success: data => {
// console.log(data,"微信地图")
this.latitude = data.latitude;
this.longitude = data.longitude;
this.$store.commit("update", {
latitude: data.latitude,
longitude: data.longitude
});
// 根据坐标获取城市信息
this.getCityinfo().then(() => {
resolved();
});
},
fail() {
//失败回调
//如果用户拒绝授权,默认为北京
this.cityName = "北京市";
this.update({ cityName: "北京市" });
}
});
});
},
Запускается при обновлении представления карты
// 地图视野更新时触发
getCenterMap() {
if (this.active === "上门") {
const that = this;
console.log("自身位置坐标", this.longitude, this.latitude);
const map = wx.createMapContext("map");
map.getCenterLocation({
success(res) {
// 判断坐标一致,不用重复请求数据
if (
that.longitude === res.longitude &&
that.latitude === res.latitude
) {
return false;
}
// const ress = transformFromGCJToWGS(res.latitude,res.longitude)
that.latitude = res.latitude;
that.longitude = res.longitude;
that.$store.commit("update", {
latitude: res.latitude,
longitude: res.longitude
});
console.log("中心位置坐标", that.longitude, that.latitude);
// console.log('转换后的中心位置坐标',ress)
that.getCityinfo();
}
});
}
}