|
@@ -1,99 +1,77 @@
|
|
|
//防抖debounce代码:
|
|
|
-export function debounce(fn,delay=500) {
|
|
|
- var timeout = null; // 创建一个标记用来存放定时器的返回值
|
|
|
- return function (e) {
|
|
|
- // 每当用户输入的时候把前一个 setTimeout clear 掉
|
|
|
- clearTimeout(timeout);
|
|
|
- // 然后又创建一个新的 setTimeout, 这样就能保证interval 间隔内如果时间持续触发,就不会执行 fn 函数
|
|
|
- timeout = setTimeout(() => {
|
|
|
- fn.apply(this, arguments);
|
|
|
- }, delay);
|
|
|
- };
|
|
|
+export function debounce(fn, delay = 500) {
|
|
|
+ var timeout = null; // 创建一个标记用来存放定时器的返回值
|
|
|
+ return function(e) {
|
|
|
+ // 每当用户输入的时候把前一个 setTimeout clear 掉
|
|
|
+ clearTimeout(timeout);
|
|
|
+ // 然后又创建一个新的 setTimeout, 这样就能保证interval 间隔内如果时间持续触发,就不会执行 fn 函数
|
|
|
+ timeout = setTimeout(() => {
|
|
|
+ fn.apply(this, arguments);
|
|
|
+ }, delay);
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
// 时间戳转换
|
|
|
-export function parseDate(time, cFormat) {
|
|
|
- if (arguments.length === 0) {
|
|
|
- return null
|
|
|
- }
|
|
|
- const format = cFormat || '{y}-{m}-{d}'
|
|
|
- let date
|
|
|
- if (typeof time === 'object') {
|
|
|
- date = time
|
|
|
- } else {
|
|
|
- if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
|
|
|
- time = parseInt(time)
|
|
|
- }
|
|
|
- if ((typeof time === 'number') && (time.toString().length === 10)) {
|
|
|
- time = time * 1000
|
|
|
- }
|
|
|
- date = new Date(time)
|
|
|
- }
|
|
|
- const formatObj = {
|
|
|
- y: date.getFullYear(),
|
|
|
- m: date.getMonth() + 1,
|
|
|
- d: date.getDate(),
|
|
|
- h: date.getHours(),
|
|
|
- i: date.getMinutes(),
|
|
|
- s: date.getSeconds(),
|
|
|
- a: date.getDay()
|
|
|
- }
|
|
|
- const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
|
|
|
- const value = formatObj[key]
|
|
|
- if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
|
|
|
- return value.toString().padStart(2, '0')
|
|
|
- })
|
|
|
- return time_str
|
|
|
+export function timestampToDate(timestamp) {
|
|
|
+ // 定义日期格式对应的映射
|
|
|
+ const date = new Date(timestamp);
|
|
|
+ const year = date.getFullYear();
|
|
|
+ const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
|
+ const day = String(date.getDate()).padStart(2, '0');
|
|
|
+ const hours = String(date.getHours()).padStart(2, '0');
|
|
|
+ const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
|
+ const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
|
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|
|
}
|
|
|
|
|
|
|
|
|
// 返回两个经纬度之间的距离 单位米
|
|
|
-const earthDistance = function (location1, location2) {
|
|
|
- const lat1 = parseFloat(location1.lat);
|
|
|
- const lng1 = parseFloat(location1.lng);
|
|
|
- const lat2 = parseFloat(location2.lat);
|
|
|
- const lng2 = parseFloat(location2.lng);
|
|
|
-
|
|
|
- const EARTH_RADIUS = 6378137.0; //单位M
|
|
|
- const PI = Math.PI;
|
|
|
-
|
|
|
- function getRad(d) {
|
|
|
- return d * PI / 180.0;
|
|
|
- }
|
|
|
-
|
|
|
- let f = getRad((lat1 + lat2) / 2);
|
|
|
- let g = getRad((lat1 - lat2) / 2);
|
|
|
- let l = getRad((lng1 - lng2) / 2);
|
|
|
-
|
|
|
- let sg = Math.sin(g);
|
|
|
- let sl = Math.sin(l);
|
|
|
- let sf = Math.sin(f);
|
|
|
-
|
|
|
- let s, c, w, r, d, h1, h2;
|
|
|
- let a = EARTH_RADIUS;
|
|
|
- let fl = 1 / 298.257;
|
|
|
-
|
|
|
- sg = sg * sg;
|
|
|
- sl = sl * sl;
|
|
|
- sf = sf * sf;
|
|
|
-
|
|
|
- s = sg * (1 - sl) + (1 - sf) * sl;
|
|
|
- c = (1 - sg) * (1 - sl) + sf * sl;
|
|
|
-
|
|
|
- w = Math.atan(Math.sqrt(s / c));
|
|
|
- r = Math.sqrt(s * c) / w;
|
|
|
- d = 2 * w * a;
|
|
|
- h1 = (3 * r - 1) / 2 / c;
|
|
|
- h2 = (3 * r + 1) / 2 / s;
|
|
|
-
|
|
|
- return d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg));
|
|
|
- };
|
|
|
+const earthDistance = function(location1, location2) {
|
|
|
+ const lat1 = parseFloat(location1.lat);
|
|
|
+ const lng1 = parseFloat(location1.lng);
|
|
|
+ const lat2 = parseFloat(location2.lat);
|
|
|
+ const lng2 = parseFloat(location2.lng);
|
|
|
+
|
|
|
+ const EARTH_RADIUS = 6378137.0; //单位M
|
|
|
+ const PI = Math.PI;
|
|
|
+
|
|
|
+ function getRad(d) {
|
|
|
+ return d * PI / 180.0;
|
|
|
+ }
|
|
|
+
|
|
|
+ let f = getRad((lat1 + lat2) / 2);
|
|
|
+ let g = getRad((lat1 - lat2) / 2);
|
|
|
+ let l = getRad((lng1 - lng2) / 2);
|
|
|
+
|
|
|
+ let sg = Math.sin(g);
|
|
|
+ let sl = Math.sin(l);
|
|
|
+ let sf = Math.sin(f);
|
|
|
+
|
|
|
+ let s, c, w, r, d, h1, h2;
|
|
|
+ let a = EARTH_RADIUS;
|
|
|
+ let fl = 1 / 298.257;
|
|
|
+
|
|
|
+ sg = sg * sg;
|
|
|
+ sl = sl * sl;
|
|
|
+ sf = sf * sf;
|
|
|
+
|
|
|
+ s = sg * (1 - sl) + (1 - sf) * sl;
|
|
|
+ c = (1 - sg) * (1 - sl) + sf * sl;
|
|
|
+
|
|
|
+ w = Math.atan(Math.sqrt(s / c));
|
|
|
+ r = Math.sqrt(s * c) / w;
|
|
|
+ d = 2 * w * a;
|
|
|
+ h1 = (3 * r - 1) / 2 / c;
|
|
|
+ h2 = (3 * r + 1) / 2 / s;
|
|
|
+
|
|
|
+ return d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg));
|
|
|
+};
|
|
|
|
|
|
|
|
|
//rpx转换px px=rpx * (屏幕宽度 / 750)
|
|
|
-export const rpxTopx = function (rpx) {
|
|
|
+export const rpxTopx = function(rpx) {
|
|
|
let width = uni.getWindowInfo().screenWidth
|
|
|
- let px = rpx *( width / 750 );
|
|
|
+ let px = rpx * (width / 750);
|
|
|
return px
|
|
|
}
|
|
|
|
|
@@ -138,43 +116,46 @@ export function bMapTransQQMap(lng, lat) {
|
|
|
* 将百度坐标(DB-09)转为GCJ-02(火星坐标):
|
|
|
*/
|
|
|
export function transformFromBaiduToGCJ(latitude, longitude) {
|
|
|
- var xPi = 3.14159265358979323846264338327950288 * 3000.0 / 180.0;
|
|
|
+ var xPi = 3.14159265358979323846264338327950288 * 3000.0 / 180.0;
|
|
|
|
|
|
- var x = longitude - 0.0065;
|
|
|
- var y = latitude - 0.006;
|
|
|
- var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * xPi);
|
|
|
- var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * xPi);
|
|
|
- var a_latitude = z * Math.sin(theta);
|
|
|
- var a_longitude = z * Math.cos(theta);
|
|
|
+ var x = longitude - 0.0065;
|
|
|
+ var y = latitude - 0.006;
|
|
|
+ var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * xPi);
|
|
|
+ var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * xPi);
|
|
|
+ var a_latitude = z * Math.sin(theta);
|
|
|
+ var a_longitude = z * Math.cos(theta);
|
|
|
|
|
|
- return { latitude: a_latitude, longitude: a_longitude };
|
|
|
+ return {
|
|
|
+ latitude: a_latitude,
|
|
|
+ longitude: a_longitude
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 判断经纬度是否超出中国境内
|
|
|
*/
|
|
|
function isLocationOutOfChina(latitude, longitude) {
|
|
|
- if (longitude < 72.004 || longitude > 137.8347 || latitude < 0.8293 || latitude > 55.8271)
|
|
|
- return true;
|
|
|
- return false;
|
|
|
+ if (longitude < 72.004 || longitude > 137.8347 || latitude < 0.8293 || latitude > 55.8271)
|
|
|
+ return true;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
function transformLatWithXY(x, y) {
|
|
|
- var pi = 3.14159265358979324;
|
|
|
- var lat = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
|
|
|
- lat += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
|
|
|
- lat += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
|
|
|
- lat += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
|
|
|
- return lat;
|
|
|
+ var pi = 3.14159265358979324;
|
|
|
+ var lat = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
|
|
|
+ lat += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
|
|
|
+ lat += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
|
|
|
+ lat += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
|
|
|
+ return lat;
|
|
|
}
|
|
|
|
|
|
function transformLonWithXY(x, y) {
|
|
|
- var pi = 3.14159265358979324;
|
|
|
- var lon = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
|
|
|
- lon += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
|
|
|
- lon += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
|
|
|
- lon += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;
|
|
|
- return lon;
|
|
|
+ var pi = 3.14159265358979324;
|
|
|
+ var lon = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
|
|
|
+ lon += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
|
|
|
+ lon += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
|
|
|
+ lon += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;
|
|
|
+ return lon;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -185,28 +166,30 @@ function transformLonWithXY(x, y) {
|
|
|
*/
|
|
|
|
|
|
export function transformFromWGSToGCJ(latitude, longitude) {
|
|
|
- var lat = "";
|
|
|
- var lon = "";
|
|
|
- var ee = 0.00669342162296594323;
|
|
|
- var a = 6378245.0;
|
|
|
- var pi = 3.14159265358979324;
|
|
|
-
|
|
|
- if (isLocationOutOfChina(latitude, longitude)) {
|
|
|
- lat = latitude;
|
|
|
- lon = longitude;
|
|
|
- }
|
|
|
- else {
|
|
|
- var adjustLat = transformLatWithXY(longitude - 105.0, latitude - 35.0);
|
|
|
- var adjustLon = transformLonWithXY(longitude - 105.0, latitude - 35.0);
|
|
|
- var radLat = latitude / 180.0 * pi;
|
|
|
- var magic = Math.sin(radLat);
|
|
|
- magic = 1 - ee * magic * magic;
|
|
|
- var sqrtMagic = Math.sqrt(magic);
|
|
|
- adjustLat = (adjustLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
|
|
|
- adjustLon = (adjustLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
|
|
|
- latitude = latitude + adjustLat;
|
|
|
- longitude = longitude + adjustLon;
|
|
|
- }
|
|
|
- return { latitude: latitude, longitude: longitude };
|
|
|
+ var lat = "";
|
|
|
+ var lon = "";
|
|
|
+ var ee = 0.00669342162296594323;
|
|
|
+ var a = 6378245.0;
|
|
|
+ var pi = 3.14159265358979324;
|
|
|
+
|
|
|
+ if (isLocationOutOfChina(latitude, longitude)) {
|
|
|
+ lat = latitude;
|
|
|
+ lon = longitude;
|
|
|
+ } else {
|
|
|
+ var adjustLat = transformLatWithXY(longitude - 105.0, latitude - 35.0);
|
|
|
+ var adjustLon = transformLonWithXY(longitude - 105.0, latitude - 35.0);
|
|
|
+ var radLat = latitude / 180.0 * pi;
|
|
|
+ var magic = Math.sin(radLat);
|
|
|
+ magic = 1 - ee * magic * magic;
|
|
|
+ var sqrtMagic = Math.sqrt(magic);
|
|
|
+ adjustLat = (adjustLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
|
|
|
+ adjustLon = (adjustLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
|
|
|
+ latitude = latitude + adjustLat;
|
|
|
+ longitude = longitude + adjustLon;
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ latitude: latitude,
|
|
|
+ longitude: longitude
|
|
|
+ };
|
|
|
|
|
|
}
|