【发布时间】:2021-07-17 03:55:50
【问题描述】:
$.getJSON("https://example.com//json/", function (data) {
var count = Object.keys(data).length;
for (var i = 0; i < count; i++) {
var lat = data[i].LAT;
var lng = data[i].LNG;
var locs = { lat: lat, lng: lng };
var check = arePointsNear(pos, locs, 2487);
if (check) listStations.push(data[i].ID);
}
console.log(listStations);
console.log(listStations[0]);
});
function arePointsNear(checkPoint, centerPoint, m) {
var km = m/1000;
var ky = 40000 / 360;
var kx = Math.cos(Math.PI * centerPoint.lat / 180) * ky;
var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;
var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;
return Math.sqrt(dx * dx + dy * dy) <= km;
}
数据中的json示例;
{
"ID": 359,
"NAME": "Atatürk Bulvarı 1",
"LOCATION": "0001 Atatürk Bulvarı 1",
"PARK_INFO": "2",
"PARK_CAPACITY": 18,
"START_TIME": {
"Ticks": 270000000000,
"Days": 0,
"Hours": 7,
"Milliseconds": 0,
"Minutes": 30,
"Seconds": 0,
"TotalDays": 0.3125,
"TotalHours": 7.5,
"TotalMilliseconds": 27000000,
"TotalMinutes": 450,
"TotalSeconds": 27000
},
"FINISH_TIME": {
"Ticks": 666000000000,
"Days": 0,
"Hours": 18,
"Milliseconds": 0,
"Minutes": 30,
"Seconds": 0,
"TotalDays": 0.77083333333333326,
"TotalHours": 18.5,
"TotalMilliseconds": 66600000,
"TotalMinutes": 1110,
"TotalSeconds": 66600
},
"DISTRICT_CODE": "20",
"ADRESS": "KEMALPAŞA MAHALLESİ ATATÜRK BULVARI 1 / EMİNÖNÜ",
"LNG": 28.9535382991555,
"LAT": 41.0112914996693,
"SUBS_PRICE": 0,
"FREE_TIME": 15
}
可以从相关链接拉取json数据。将数据发送到 arePointsNear 函数并验证真假就可以了。当我写console.log数据写在最底线(in for)的代码中时,0.index是未定义的。
顺便说一句,变量在顶部是独立且全局定义的。
我该怎么办?
【问题讨论】:
-
请提供
data的例子。 -
我已经添加了 arePointsNear 函数和示例 json 数据
-
pos定义在哪里? -
在用户登录时查询当前位置(latlng),但全局定义为var pos
-
这与您的问题没有直接关系,但它是一个有用的提示,可以更快地比较很多距离:您可以通过比较平方距离来避免调用 Math.Sqrt() 。初始化
var km2 = m * m / 1000000;然后return dx * dx + dy * dy <= km2;。如果您以米而不是公里为单位计算 dx 和 dy,您也可能会减少一些数学运算。只是提醒一下。
标签: javascript jquery json web