Compare commits
2 Commits
cdc45140f8
...
6e81762fbb
Author | SHA1 | Date |
---|---|---|
|
6e81762fbb | |
|
aead194248 |
51
app.js
51
app.js
|
@ -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
|
||||
}
|
||||
})
|
||||
|
|
25
app.json
25
app.json
|
@ -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"
|
||||
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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() {
|
||||
|
||||
}
|
||||
})
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"usingComponents": {
|
||||
"van-icon":"../../miniprogram_npm/vant-weapp/icon/index"
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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) ; */
|
||||
}
|
|
@ -56,7 +56,11 @@
|
|||
"compileType": "miniprogram",
|
||||
"libVersion": "2.19.4",
|
||||
"appid": "wxa9783cf92ee95a72",
|
||||
<<<<<<< HEAD
|
||||
"projectname": "bridgespace-app",
|
||||
=======
|
||||
"projectname": "inlandVessel-app",
|
||||
>>>>>>> cdc45140f836a5564ba6d4f94c3e4d7e23d3df72
|
||||
"condition": {},
|
||||
"editorSetting": {
|
||||
"tabIndent": "insertSpaces",
|
||||
|
|
|
@ -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;
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue