Compare commits

...

2 Commits

Author SHA1 Message Date
何嘉峣 6e81762fbb 地图页 2022-10-20 16:59:22 +08:00
何嘉峣 aead194248 地图页 2022-10-20 16:58:52 +08:00
11 changed files with 1110 additions and 16 deletions

51
app.js
View File

@ -10,6 +10,30 @@ App({
wx.login({
success: res => {
console.log(res);
<<<<<<< HEAD
// wx.request({
// url: 'https://www.umayle.com/weixin_api/API/Wx/User/GetUserInfo.ashx?appName=Inland&code='+res.code,
// method: 'POST',
// success:(_res)=>{
// console.log(_res);
// let openId = _res.data.openid;
// this.globalData.openId = openId
// console.log('openid',openId);
// wx.request({
// url: 'https://www.umayle.com/inland/Api/GetUserInfo.ashx?openId='+openId,
// method: 'POST',
// success:(_res_)=>{
// console.log(_res_,',,,res');
// this.globalData.userInfo = _res_.data.data
// if(_res_.data.code == 0 && _res_.data.message == '获取成功'){
// //跳转到列表页面
// setTimeout(() => {
// wx.redirectTo({
// url:'/pages/map/map'
// // url:'/pages/register/register'
// })
// }, 2000);
=======
wx.request({
// url: 'https://www.umayle.com/weixin_api/API/Wx/User/GetUserInfo.ashx?appName=Inland&code='+res.code,
url: ''+res.code,
@ -34,21 +58,22 @@ App({
// url:'/pages/register/register'
})
}, 2000);
>>>>>>> cdc45140f836a5564ba6d4f94c3e4d7e23d3df72
}else{
//跳转到注册页面
setTimeout(() => {
wx.redirectTo({
url:'/pages/register/register'
// url:'/pages/list/list'
})
}, 2000);
// }else{
// //跳转到注册页面
// setTimeout(() => {
// wx.redirectTo({
// url:'/pages/register/register'
// // url:'/pages/list/list'
// })
// }, 2000);
}
}
})
}
})
// }
// }
// })
// }
// })
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})

View File

@ -1,5 +1,12 @@
{
"pages": [
<<<<<<< HEAD
"pages/map/map",
"pages/start/start",
"pages/index/index",
"pages/list/list"
=======
"pages/list/list",
"pages/item/item",
"pages/start/start",
@ -8,7 +15,24 @@
>>>>>>> cdc45140f836a5564ba6d4f94c3e4d7e23d3df72
],
"plugins": {
"routePlan": {
"version": "1.0.5",
"provider": "wx50b5593e81dd937a"
},
"chooseLocation": {
"version": "1.0.3",
"provider": "wx76a9a06e5b4e693e"
}
},
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
}
},
"requiredPrivateInfos": ["getLocation"],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#3669f8",
@ -17,5 +41,4 @@
},
"sitemapLocation": "sitemap.json",
"lazyCodeLoading": "requiredComponents"
}

View File

@ -1,5 +1,5 @@
{
"name": "inlandvessel-app",
"name": "bridgespace-app",
"version": "1.0.0",
"main": "app.js",
"dependencies": {
@ -16,7 +16,7 @@
},
"repository": {
"type": "git",
"url": "http://git.umayle.com:2022/lgzn/inlandVessel-app.git"
"url": "https://git.lgzn.space/chengdandan/bridgeSpace.git"
},
"author": "",
"license": "ISC",

View File

@ -22,6 +22,16 @@ Page({
},
onLoad(options) {
if (wx.getUserProfile) {
<<<<<<< HEAD
// let url = 'https://www.umayle.com/inland/dist/index.html?openId='+options.openId+'&page='+options.page;
// console.log(url);
// this.setData({
// openId: options.openId,
// page: options.page,
// url: url,
// canIUseGetUserProfile: true
// })
=======
//https://download-1300932214.cos.ap-nanjing.myqcloud.com/inlandVessel/dist/index.html
//let url = 'https://download-1300932214.cos.ap-nanjing.myqcloud.com/inlandVessel/dist/index.html?openId='+options.openId+'&page='+options.page;
// let url = 'https://www.umayle.com/inland/dist/index.html?openId='+options.openId+'&page='+options.page;
@ -33,6 +43,7 @@ Page({
url: url,
canIUseGetUserProfile: true
})
>>>>>>> cdc45140f836a5564ba6d4f94c3e4d7e23d3df72
}
},
getUserProfile(e) {

138
pages/map/map.js Normal file
View File

@ -0,0 +1,138 @@
// pages/map.js
var QQMapWX = require('../../utils/qqmap-wx-jssdk.js');
var qqmapsdk = new QQMapWX({
key: 'QLPBZ-QODCX-7KB46-TQERC-T36BT-IIBJO' // 必填
});
Page({
/**
* 页面的初始数据
*/
data: {
inputVal:'',
latitude: 31.22786,
longitude: 121.46658,
suggestion:[],
district:{}
},
// 选择位置
handlePos(val){
console.log(val,'asdas');
var _this = this;
//调用关键词提示接口
qqmapsdk.getSuggestion({
//获取输入框值并设置keyword参数
keyword: val.detail.value, //用户输入的关键词,可设置固定值,如keyword:'KFC'
//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,
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
});
},
fail: function(error) {
console.error(error);
},
complete: function(res) {
console.log(res);
}
});
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
var that = this
wx.getLocation({
type: 'wgs84',
altitude: false,
success: (result) => {
// that.getOnlineDistrict(result.latitude, result.longitude)
var obj = {
latitude:result.latitude,longitude:result.longitude
}
this.setData({
district:obj
})
console.log(this.district,obj,'district');
},
});
},
getOnlineDistrict(latitude, longitude) {
var that = this;
//通过这个方法来实现经纬度反推省市区
qqmapsdk.reverseGeocoder({
location: {
latitude: latitude,
longitude: longitude
},
success: function (res) {
that.setData({
district:res.result.address_component.city
})
console.log(this.district,'asda');
}
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

5
pages/map/map.json Normal file
View File

@ -0,0 +1,5 @@
{
"usingComponents": {
"van-icon":"../../miniprogram_npm/vant-weapp/icon/index"
}
}

53
pages/map/map.wxml Normal file
View File

@ -0,0 +1,53 @@
<!--pages/map.wxml-->
<view class="mapContent">
<view class="mapTop">
<view class="inputVal">
<input class="weui-input" placeholder-class="phcolor" value="{{inputVal}}" bindinput="handlePos" placeholder="输入关键字查询"/>
<!--关键词输入提示列表渲染-->
<view wx:for="{{suggestion}}" wx:key="index">
<!--绑定回填事件-->
<view>
<!--根据需求渲染相应数据-->
<!--渲染地址title-->
<view style="text-align:center;" bindtap="backfill" id="{{index}}">{{item.title}}</view>
<!--渲染详细地址-->
<view style="font-size:12px;color:#666;text-align:center;">{{item.addr}}</view>
</view>
</view>
<van-icon class="el-icon-microphone"></van-icon>
</view>
<map id="myMap"
latitude="{{district.latitude}}"
longitude="{{district.longitude}}"
show-location scale="14" style="width: 100%; height: calc(100% - 100rpx);"></map>
</view>
<view class="info">
<view class="top">
<view class="image">
<image mode="aspectFill" src=""></image>
</view>
<view class="title">
<view class="text">
<span style="font-size:15px;font-weight: 600;">董滨枢纽小桥</span>
<view style="display: flex;align-items: center">
<span style="font-size:14px;color:rgb(105, 131, 255)">详情</span>
<van-icon name="arrow" style="font-size:14px;color:rgb(105, 131, 255);margin: 8rpx 0 0 5rpx;"/>
</view>
</view>
<view class="middle" style="font-size:12px;margin: 18rpx 0;">
(14+9*20)+(20+2*30+20)+(6*20+14)
</view>
<view class="bottom">
<span class="btn" style="width: 70rpx;">g15</span>
<span class="btn" style="width: 120rpx;">kd+212</span>
<span class="btn" style="width: 150rpx;">预制空心板</span>
</view>
</view>
</view>
<view style="font-size: 12.5px;line-height: 20px;margin-top: 10rpx;">
最近一天桥梁结构监测统计信息:过车总量<span style="color: rgb(105, 131, 255);">12542</span>; 49吨以上车辆总数<span style="color: rgb(105, 131, 255);">289</span>;
100吨以上车辆总数<span style="color: rgb(105, 131, 255);">214</span>;车辆效应与设计值最大比值<span style="color: rgb(105, 131, 255);">24/100</span>;监测预警数量<span>12</span>条;
最大预警级别:红色预警。
</view>
</view>
</view>

91
pages/map/map.wxss Normal file
View File

@ -0,0 +1,91 @@
/* pages/map.wxss */
.mapContent{
width: 100%;
height: 100%;
display: flex;
flex-flow: row wrap;
justify-content: center;
}
.mapContent .mapTop{
width: 100%;
height: 900rpx;
display: flex;
flex-flow: column nowrap;
}
.inputVal{
width: 100%;
height: 100rpx;
background-color: rgb(54, 105, 248);
display: flex;
flex-flow: row nowrap;
align-items: center;
justify-content: center;
}
.weui-input{
width: 450rpx;
height: 60rpx;
border-radius: 40rpx;
background-color: rgb(156, 133, 252);
padding-left: 40rpx;
color: #ffffff;
font-size: 14px;
box-sizing: border-box;
}
.phcolor{
color: #ffffff;
font-size: 14px;
letter-spacing: 1rpx;
text-align: center;
}
.mapContent .info{
width: 100%;
height: calc(100% - 900rpx);
padding: 20rpx 15rpx;
box-sizing: border-box;
}
.mapContent .info .top{
width: 100%;
height: 170rpx;
display: flex;
flex-flow: row nowrap;
justify-content: space-between;
}
.mapContent .info .top .image{
width: 260rpx;
height: 100%;
background-color: blue;
}
.mapContent .info .top .image image{
width: 100%;
height: 100%;
}
.mapContent .info .top .title{
flex: 1;
height: 100%;
padding-left: 10rpx;
box-sizing: border-box;
}
.mapContent .info .top .title .text{
width: 100%;
height: 20px;
display: flex;
flex-flow: row nowrap;
justify-content: space-between;
align-items: center;
}
.mapContent .info .top .title .bottom{
display: flex;
flex-flow: row nowrap;
}
.mapContent .info .top .title .bottom .btn{
display: inline-block;
color: rgb(156, 133, 252);
margin-right: 10rpx;
font-size: 13px;
text-align: center;
border: 1px solid rgb(156, 133, 252);
border-radius: 10rpx;
height: 40rpx;
line-height: 40rpx;
/* width: calc(fit-content + 10rpx) ; */
}

View File

@ -56,7 +56,11 @@
"compileType": "miniprogram",
"libVersion": "2.19.4",
"appid": "wxa9783cf92ee95a72",
<<<<<<< HEAD
"projectname": "bridgespace-app",
=======
"projectname": "inlandVessel-app",
>>>>>>> cdc45140f836a5564ba6d4f94c3e4d7e23d3df72
"condition": {},
"editorSetting": {
"tabIndent": "insertSpaces",

741
utils/qqmap-wx-jssdk.js Normal file
View File

@ -0,0 +1,741 @@
/**
* 微信小程序JavaScriptSDK
*
* @version 1.1
* @date 2019-01-20
*/
var ERROR_CONF = {
KEY_ERR: 311,
KEY_ERR_MSG: 'key格式错误',
PARAM_ERR: 310,
PARAM_ERR_MSG: '请求参数信息有误',
SYSTEM_ERR: 600,
SYSTEM_ERR_MSG: '系统错误',
WX_ERR_CODE: 1000,
WX_OK_CODE: 200
};
var BASE_URL = 'https://apis.map.qq.com/ws/';
var URL_SEARCH = BASE_URL + 'place/v1/search';
var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion';
var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/';
var URL_CITY_LIST = BASE_URL + 'district/v1/list';
var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren';
var URL_DISTANCE = BASE_URL + 'distance/v1/';
var EARTH_RADIUS = 6378136.49;
var Utils = {
/**
* 得到终点query字符串
* @param {Array|String} 检索数据
*/
location2query(data) {
if (typeof data == 'string') {
return data;
}
var query = '';
for (var i = 0; i < data.length; i++) {
var d = data[i];
if (!!query) {
query += ';';
}
if (d.location) {
query = query + d.location.lat + ',' + d.location.lng;
}
if (d.latitude && d.longitude) {
query = query + d.latitude + ',' + d.longitude;
}
}
return query;
},
/**
* 计算角度
*/
rad(d) {
return d * Math.PI / 180.0;
},
/**
* 处理终点location数组
* @return 返回终点数组
*/
getEndLocation(location){
var to = location.split(';');
var endLocation = [];
for (var i = 0; i < to.length; i++) {
endLocation.push({
lat: parseFloat(to[i].split(',')[0]),
lng: parseFloat(to[i].split(',')[1])
})
}
return endLocation;
},
/**
* 计算两点间直线距离
* @param a 表示纬度差
* @param b 表示经度差
* @return 返回的是距离单位m
*/
getDistance(latFrom, lngFrom, latTo, lngTo) {
var radLatFrom = this.rad(latFrom);
var radLatTo = this.rad(latTo);
var a = radLatFrom - radLatTo;
var b = this.rad(lngFrom) - this.rad(lngTo);
var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(radLatTo) * Math.pow(Math.sin(b / 2), 2)));
distance = distance * EARTH_RADIUS;
distance = Math.round(distance * 10000) / 10000;
return parseFloat(distance.toFixed(0));
},
/**
* 使用微信接口进行定位
*/
getWXLocation(success, fail, complete) {
wx.getLocation({
type: 'gcj02',
success: success,
fail: fail,
complete: complete
});
},
/**
* 获取location参数
*/
getLocationParam(location) {
if (typeof location == 'string') {
var locationArr = location.split(',');
if (locationArr.length === 2) {
location = {
latitude: location.split(',')[0],
longitude: location.split(',')[1]
};
} else {
location = {};
}
}
return location;
},
/**
* 回调函数默认处理
*/
polyfillParam(param) {
param.success = param.success || function () { };
param.fail = param.fail || function () { };
param.complete = param.complete || function () { };
},
/**
* 验证param对应的key值是否为空
*
* @param {Object} param 接口参数
* @param {String} key 对应参数的key
*/
checkParamKeyEmpty(param, key) {
if (!param[key]) {
var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key +'参数格式有误');
param.fail(errconf);
param.complete(errconf);
return true;
}
return false;
},
/**
* 验证参数中是否存在检索词keyword
*
* @param {Object} param 接口参数
*/
checkKeyword(param){
return !this.checkParamKeyEmpty(param, 'keyword');
},
/**
* 验证location值
*
* @param {Object} param 接口参数
*/
checkLocation(param) {
var location = this.getLocationParam(param.location);
if (!location || !location.latitude || !location.longitude) {
var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误');
param.fail(errconf);
param.complete(errconf);
return false;
}
return true;
},
/**
* 构造错误数据结构
* @param {Number} errCode 错误码
* @param {Number} errMsg 错误描述
*/
buildErrorConfig(errCode, errMsg) {
return {
status: errCode,
message: errMsg
};
},
/**
*
* 数据处理函数
* 根据传入参数不同处理不同数据
* @param {String} feature 功能名称
* search 地点搜索
* suggest关键词提示
* reverseGeocoder逆地址解析
* geocoder地址解析
* getCityList获取城市列表父集
* getDistrictByCityId获取区县列表子集
* calculateDistance距离计算
* @param {Object} param 接口参数
* @param {Object} data 数据
*/
handleData(param,data,feature){
if (feature === 'search') {
var searchResult = data.data;
var searchSimplify = [];
for (var i = 0; i < searchResult.length; i++) {
searchSimplify.push({
id: searchResult[i].id || null,
title: searchResult[i].title || null,
latitude: searchResult[i].location && searchResult[i].location.lat || null,
longitude: searchResult[i].location && searchResult[i].location.lng || null,
address: searchResult[i].address || null,
category: searchResult[i].category || null,
tel: searchResult[i].tel || null,
adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null,
city: searchResult[i].ad_info && searchResult[i].ad_info.city || null,
district: searchResult[i].ad_info && searchResult[i].ad_info.district || null,
province: searchResult[i].ad_info && searchResult[i].ad_info.province || null
})
}
param.success(data, {
searchResult: searchResult,
searchSimplify: searchSimplify
})
} else if (feature === 'suggest') {
var suggestResult = data.data;
var suggestSimplify = [];
for (var i = 0; i < suggestResult.length; i++) {
suggestSimplify.push({
adcode: suggestResult[i].adcode || null,
address: suggestResult[i].address || null,
category: suggestResult[i].category || null,
city: suggestResult[i].city || null,
district: suggestResult[i].district || null,
id: suggestResult[i].id || null,
latitude: suggestResult[i].location && suggestResult[i].location.lat || null,
longitude: suggestResult[i].location && suggestResult[i].location.lng || null,
province: suggestResult[i].province || null,
title: suggestResult[i].title || null,
type: suggestResult[i].type || null
})
}
param.success(data, {
suggestResult: suggestResult,
suggestSimplify: suggestSimplify
})
} else if (feature === 'reverseGeocoder') {
var reverseGeocoderResult = data.result;
var reverseGeocoderSimplify = {
address: reverseGeocoderResult.address || null,
latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null,
longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null,
adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null,
city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || null,
district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.district || null,
nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.nation || null,
province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.province || null,
street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street || null,
street_number: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street_number || null,
recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.recommend || null,
rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.rough || null
};
if (reverseGeocoderResult.pois) {//判断是否返回周边poi
var pois = reverseGeocoderResult.pois;
var poisSimplify = [];
for (var i = 0;i < pois.length;i++) {
poisSimplify.push({
id: pois[i].id || null,
title: pois[i].title || null,
latitude: pois[i].location && pois[i].location.lat || null,
longitude: pois[i].location && pois[i].location.lng || null,
address: pois[i].address || null,
category: pois[i].category || null,
adcode: pois[i].ad_info && pois[i].ad_info.adcode || null,
city: pois[i].ad_info && pois[i].ad_info.city || null,
district: pois[i].ad_info && pois[i].ad_info.district || null,
province: pois[i].ad_info && pois[i].ad_info.province || null
})
}
param.success(data,{
reverseGeocoderResult: reverseGeocoderResult,
reverseGeocoderSimplify: reverseGeocoderSimplify,
pois: pois,
poisSimplify: poisSimplify
})
} else {
param.success(data, {
reverseGeocoderResult: reverseGeocoderResult,
reverseGeocoderSimplify: reverseGeocoderSimplify
})
}
} else if (feature === 'geocoder') {
var geocoderResult = data.result;
var geocoderSimplify = {
title: geocoderResult.title || null,
latitude: geocoderResult.location && geocoderResult.location.lat || null,
longitude: geocoderResult.location && geocoderResult.location.lng || null,
adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null,
province: geocoderResult.address_components && geocoderResult.address_components.province || null,
city: geocoderResult.address_components && geocoderResult.address_components.city || null,
district: geocoderResult.address_components && geocoderResult.address_components.district || null,
street: geocoderResult.address_components && geocoderResult.address_components.street || null,
street_number: geocoderResult.address_components && geocoderResult.address_components.street_number || null,
level: geocoderResult.level || null
};
param.success(data,{
geocoderResult: geocoderResult,
geocoderSimplify: geocoderSimplify
});
} else if (feature === 'getCityList') {
var provinceResult = data.result[0];
var cityResult = data.result[1];
var districtResult = data.result[2];
param.success(data,{
provinceResult: provinceResult,
cityResult: cityResult,
districtResult: districtResult
});
} else if (feature === 'getDistrictByCityId') {
var districtByCity = data.result[0];
param.success(data, districtByCity);
} else if (feature === 'calculateDistance') {
var calculateDistanceResult = data.result.elements;
var distance = [];
for (var i = 0; i < calculateDistanceResult.length; i++){
distance.push(calculateDistanceResult[i].distance);
}
param.success(data, {
calculateDistanceResult: calculateDistanceResult,
distance: distance
});
} else {
param.success(data);
}
},
/**
* 构造微信请求参数公共属性处理
*
* @param {Object} param 接口参数
* @param {Object} param 配置项
* @param {String} feature 方法名
*/
buildWxRequestConfig(param, options, feature) {
var that = this;
options.header = { "content-type": "application/json" };
options.method = 'GET';
options.success = function (res) {
var data = res.data;
if (data.status === 0) {
that.handleData(param, data, feature);
} else {
param.fail(data);
}
};
options.fail = function (res) {
res.statusCode = ERROR_CONF.WX_ERR_CODE;
param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
};
options.complete = function (res) {
var statusCode = +res.statusCode;
switch(statusCode) {
case ERROR_CONF.WX_ERR_CODE: {
param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
break;
}
case ERROR_CONF.WX_OK_CODE: {
var data = res.data;
if (data.status === 0) {
param.complete(data);
} else {
param.complete(that.buildErrorConfig(data.status, data.message));
}
break;
}
default:{
param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG));
}
}
};
return options;
},
/**
* 处理用户参数是否传入坐标进行不同的处理
*/
locationProcess(param, locationsuccess, locationfail, locationcomplete) {
var that = this;
locationfail = locationfail || function (res) {
res.statusCode = ERROR_CONF.WX_ERR_CODE;
param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
};
locationcomplete = locationcomplete || function (res) {
if (res.statusCode == ERROR_CONF.WX_ERR_CODE) {
param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
}
};
if (!param.location) {
that.getWXLocation(locationsuccess, locationfail, locationcomplete);
} else if (that.checkLocation(param)) {
var location = Utils.getLocationParam(param.location);
locationsuccess(location);
}
}
};
class QQMapWX {
/**
* 构造函数
*
* @param {Object} options 接口参数,key 为必选参数
*/
constructor(options) {
if (!options.key) {
throw Error('key值不能为空');
}
this.key = options.key;
};
/**
* POI周边检索
*
* @param {Object} options 接口参数对象
*
* 参数对象结构可以参考
* @see http://lbs.qq.com/webservice_v1/guide-search.html
*/
search(options) {
var that = this;
options = options || {};
Utils.polyfillParam(options);
if (!Utils.checkKeyword(options)) {
return;
}
var requestParam = {
keyword: options.keyword,
orderby: options.orderby || '_distance',
page_size: options.page_size || 10,
page_index: options.page_index || 1,
output: 'json',
key: that.key
};
if (options.address_format) {
requestParam.address_format = options.address_format;
}
if (options.filter) {
requestParam.filter = options.filter;
}
var distance = options.distance || "1000";
var auto_extend = options.auto_extend || 1;
var region = null;
var rectangle = null;
//判断城市限定参数
if (options.region) {
region = options.region;
}
//矩形限定坐标(暂时只支持字符串格式)
if (options.rectangle) {
rectangle = options.rectangle;
}
var locationsuccess = function (result) {
if (region && !rectangle) {
//城市限定参数拼接
requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + result.longitude + ")";
} else if (rectangle && !region) {
//矩形搜索
requestParam.boundary = "rectangle(" + rectangle + ")";
} else {
requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")";
}
wx.request(Utils.buildWxRequestConfig(options, {
url: URL_SEARCH,
data: requestParam
}, 'search'));
};
Utils.locationProcess(options, locationsuccess);
};
/**
* sug模糊检索
*
* @param {Object} options 接口参数对象
*
* 参数对象结构可以参考
* http://lbs.qq.com/webservice_v1/guide-suggestion.html
*/
getSuggestion(options) {
var that = this;
options = options || {};
Utils.polyfillParam(options);
if (!Utils.checkKeyword(options)) {
return;
}
var requestParam = {
keyword: options.keyword,
region: options.region || '全国',
region_fix: options.region_fix || 0,
policy: options.policy || 0,
page_size: options.page_size || 10,//控制显示条数
page_index: options.page_index || 1,//控制页数
get_subpois : options.get_subpois || 0,//返回子地点
output: 'json',
key: that.key
};
//长地址
if (options.address_format) {
requestParam.address_format = options.address_format;
}
//过滤
if (options.filter) {
requestParam.filter = options.filter;
}
//排序
if (options.location) {
var locationsuccess = function (result) {
requestParam.location = result.latitude + ',' + result.longitude;
wx.request(Utils.buildWxRequestConfig(options, {
url: URL_SUGGESTION,
data: requestParam
}, "suggest"));
};
Utils.locationProcess(options, locationsuccess);
} else {
wx.request(Utils.buildWxRequestConfig(options, {
url: URL_SUGGESTION,
data: requestParam
}, "suggest"));
}
};
/**
* 逆地址解析
*
* @param {Object} options 接口参数对象
*
* 请求参数结构可以参考
* http://lbs.qq.com/webservice_v1/guide-gcoder.html
*/
reverseGeocoder(options) {
var that = this;
options = options || {};
Utils.polyfillParam(options);
var requestParam = {
coord_type: options.coord_type || 5,
get_poi: options.get_poi || 0,
output: 'json',
key: that.key
};
if (options.poi_options) {
requestParam.poi_options = options.poi_options
}
var locationsuccess = function (result) {
requestParam.location = result.latitude + ',' + result.longitude;
wx.request(Utils.buildWxRequestConfig(options, {
url: URL_GET_GEOCODER,
data: requestParam
}, 'reverseGeocoder'));
};
Utils.locationProcess(options, locationsuccess);
};
/**
* 地址解析
*
* @param {Object} options 接口参数对象
*
* 请求参数结构可以参考
* http://lbs.qq.com/webservice_v1/guide-geocoder.html
*/
geocoder(options) {
var that = this;
options = options || {};
Utils.polyfillParam(options);
if (Utils.checkParamKeyEmpty(options, 'address')) {
return;
}
var requestParam = {
address: options.address,
output: 'json',
key: that.key
};
//城市限定
if (options.region) {
requestParam.region = options.region;
}
wx.request(Utils.buildWxRequestConfig(options, {
url: URL_GET_GEOCODER,
data: requestParam
},'geocoder'));
};
/**
* 获取城市列表
*
* @param {Object} options 接口参数对象
*
* 请求参数结构可以参考
* http://lbs.qq.com/webservice_v1/guide-region.html
*/
getCityList(options) {
var that = this;
options = options || {};
Utils.polyfillParam(options);
var requestParam = {
output: 'json',
key: that.key
};
wx.request(Utils.buildWxRequestConfig(options, {
url: URL_CITY_LIST,
data: requestParam
},'getCityList'));
};
/**
* 获取对应城市ID的区县列表
*
* @param {Object} options 接口参数对象
*
* 请求参数结构可以参考
* http://lbs.qq.com/webservice_v1/guide-region.html
*/
getDistrictByCityId(options) {
var that = this;
options = options || {};
Utils.polyfillParam(options);
if (Utils.checkParamKeyEmpty(options, 'id')) {
return;
}
var requestParam = {
id: options.id || '',
output: 'json',
key: that.key
};
wx.request(Utils.buildWxRequestConfig(options, {
url: URL_AREA_LIST,
data: requestParam
},'getDistrictByCityId'));
};
/**
* 用于单起点到多终点的路线距离(非直线距离)计算
* 支持两种距离计算方式步行和驾车
* 起点到终点最大限制直线距离10公里
*
* 新增直线距离计算
*
* @param {Object} options 接口参数对象
*
* 请求参数结构可以参考
* http://lbs.qq.com/webservice_v1/guide-distance.html
*/
calculateDistance(options) {
var that = this;
options = options || {};
Utils.polyfillParam(options);
if (Utils.checkParamKeyEmpty(options, 'to')) {
return;
}
var requestParam = {
mode: options.mode || 'walking',
to: Utils.location2query(options.to),
output: 'json',
key: that.key
};
if (options.from) {
options.location = options.from;
}
//计算直线距离
if(requestParam.mode == 'straight'){
var locationsuccess = function (result) {
var locationTo = Utils.getEndLocation(requestParam.to);//处理终点坐标
var data = {
message:"query ok",
result:{
elements:[]
},
status:0
};
for (var i = 0; i < locationTo.length; i++) {
data.result.elements.push({//将坐标存入
distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i].lat, locationTo[i].lng),
duration:0,
from:{
lat: result.latitude,
lng:result.longitude
},
to:{
lat: locationTo[i].lat,
lng: locationTo[i].lng
}
});
}
var calculateResult = data.result.elements;
var distanceResult = [];
for (var i = 0; i < calculateResult.length; i++) {
distanceResult.push(calculateResult[i].distance);
}
return options.success(data,{
calculateResult: calculateResult,
distanceResult: distanceResult
});
};
Utils.locationProcess(options, locationsuccess);
} else {
var locationsuccess = function (result) {
requestParam.from = result.latitude + ',' + result.longitude;
wx.request(Utils.buildWxRequestConfig(options, {
url: URL_DISTANCE,
data: requestParam
},'calculateDistance'));
};
Utils.locationProcess(options, locationsuccess);
}
}
};
module.exports = QQMapWX;

3
utils/qqmap-wx-jssdk.min.js vendored Normal file

File diff suppressed because one or more lines are too long