【发布时间】:2019-06-16 05:21:07
【问题描述】:
数据库:
大家好, 我正在尝试使用云功能从 1 公里半径内的 firebase 实时数据库中搜索 LatLng。但是在日志中显示的自爆之后,我遇到了一个问题。
问题:
- 未配置结算帐户。外部网络无法访问 并且配额受到严格限制。配置结算帐号以删除 这些限制
- 函数执行耗时 60002 毫秒,完成 状态:“超时”
源代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
//https://*********.cloudfunctions.net/searchNearbyLatLng?originlat=23.7939419&originlng=90.3888492
exports.searchNearbyLatLng = functions.https.onRequest((request, response) => {
let lat1Param = request.query.originlat;
let lng1Param = request.query.originlng;
let rootRef = admin.database().ref('riders_online');
rootRef.once('value', gotData, errData);
function gotData(data) {
let items = data.val();
let keys = Object.keys(items);
for (let i = 0; i < keys.length; i++) {
let key = keys[i];
let item = items[key];
//console.log(item.isUserRequested, item.riderOriginLatitude, key);
let distance = getDistance( lat1Param, lng1Param, data.val().riderOriginLatitude, data.val().riderOriginLongitude );
if( distance < 1 ) {
response.send('Record' + item.riderOriginLatitude);
}
}
}
function errData(error) {
console.log("Something went wrong.");
console.log(error);
}
function getDistance( latitude1, longitude1, latitude2, longitude2 ) {
let earth_radius = 6371;
let dLat = degToRad( latitude2 - latitude1 );
let dLng = degToRad( longitude2 - longitude1 );
let a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(degToRad(latitude1)) * Math.cos(degToRad(latitude2)) * Math.sin(dLng/2) * Math.sin(dLng/2);
let c = 2 * Math.asin(Math.sqrt(a));
let d = earth_radius * c;
return d;
}
function degToRad(degrees){
let pi = Math.PI;
return degrees * (pi/180);
}
}, err => {
console.error(err.stack);
response.status(500).send('Unexpected error.');
});
【问题讨论】:
标签: javascript java android node.js