Javascript 在具有纬度和经度最小值和最大值以及网格值 return 的 table 中查找
Javascript lookup in a table that has minimum and maximum values of latitude and longitude and return the grid value
我有一个从 json 获得的纬度/经度对。要求是我需要 return 对应于 latitude/longitude 对的网格值。
我有这个 table,它具有相应值的纬度和经度的最小值和最大值。它看起来像这样:
我是 javascript 的新手。在检查传入的纬度和经度是否在每个网格值的范围内之后,我如何编写一个函数/代码来获取值?感谢您的帮助。
我不确定我是否正确解释了你的问题,但试试这个。
const [latitude, longitude] = [117.5783, -33.6768];
function getData() {
const tbody = document.querySelector("tbody");
const rows = [...tbody.rows];
const data = rows.map(row => {
const [minLng, minLat, maxLng, maxLat, gridName] = [...row.cells].map(
cell => cell.textContent
);
return {
minLng: +minLng,
minLat: +minLat,
maxLng: +maxLng,
maxLat: +maxLng,
gridName
};
});
return data;
}
function getGridValue({ latitude, longitude }) {
const data = getData();
const item = data.find(
item =>
(item.minLat >= latitude || item.maxLat <= latitude) ||
(item.minLng >= longitude || item.maxLng <= longitude)
);
if (item) {
return item.gridName;
}
return null;
}
const value = getGridValue({ latitude, longitude });
console.log(value);
<table>
<thead>
<tr>
<th>MIN_LNG</th>
<th>MIN_LAT</th>
<th>MAX_LNG</th>
<th>MAX_LAT</th>
<th>GRIDname</th>
</tr>
</thead>
<tbody>
<tr>
<td>117.5783</td>
<td>-33.6764</td>
<td>117.5787</td>
<td>-33.6766</td>
<td>5c</td>
</tr>
<tr>
<td>117.5783</td>
<td>-33.6766</td>
<td>117.5785</td>
<td>-33.6768</td>
<td>4c</td>
</tr>
<tr>
<td>117.5783</td>
<td>-33.6768</td>
<td>117.5785</td>
<td>-33.6770</td>
<td>3c</td>
</tr>
</tbody>
</table>
首先我模拟了你从jsonconst [latitude, longitude] = [117.5783, -33.6768];
得到的一对数据
getData
函数从htmltable中获取数据,所以我不知道数据的来源。我这样做是因为使用数组和对象比使用 DOM 节点
更容易
函数 getGridValue
搜索数据,如果满足条件,它将 return gridName
属性 的值,否则它将 return null
再次,我希望我已经正确解释了你的问题,希望你觉得它有用
非常感谢 user615274 给我的见解。我稍微调整了代码,这是我在您的代码帮助下生成的最终代码。
grid_table = [
{"minLng":"117.5783","minLat":"-33.6764","maxLng": "117.5787","maxLat":"-33.6766","gridName" :"5c"},
{"minLng":"117.5783","minLat":"-33.6766","maxLng":"117.5785","maxLat":"-33.6768","gridName":"4c"},
{"minLng":"117.5783","minLat":"-33.6768","maxLng":"117.5785","maxLat":"-33.6770","gridName":"3c"}
]
function getGridValue({ latitude, longitude }) {
const data = [...grid_table];
const item = data.find(
item =>
(latitude >= item.minLat && longitude >= item.minLng) &&
(latitude <= item.maxLat && longitude <= item.maxLng)
);
if (item) {
return item.gridName;
}
return null;
}
const [latitude, longitude] = ["-33.6769","117.5784"];
const value = getGridValue({ latitude, longitude});
document.write(value);
非常感谢。如果您有任何建议或进一步的想法,请告诉我。
我有一个从 json 获得的纬度/经度对。要求是我需要 return 对应于 latitude/longitude 对的网格值。 我有这个 table,它具有相应值的纬度和经度的最小值和最大值。它看起来像这样:
我是 javascript 的新手。在检查传入的纬度和经度是否在每个网格值的范围内之后,我如何编写一个函数/代码来获取值?感谢您的帮助。
我不确定我是否正确解释了你的问题,但试试这个。
const [latitude, longitude] = [117.5783, -33.6768];
function getData() {
const tbody = document.querySelector("tbody");
const rows = [...tbody.rows];
const data = rows.map(row => {
const [minLng, minLat, maxLng, maxLat, gridName] = [...row.cells].map(
cell => cell.textContent
);
return {
minLng: +minLng,
minLat: +minLat,
maxLng: +maxLng,
maxLat: +maxLng,
gridName
};
});
return data;
}
function getGridValue({ latitude, longitude }) {
const data = getData();
const item = data.find(
item =>
(item.minLat >= latitude || item.maxLat <= latitude) ||
(item.minLng >= longitude || item.maxLng <= longitude)
);
if (item) {
return item.gridName;
}
return null;
}
const value = getGridValue({ latitude, longitude });
console.log(value);
<table>
<thead>
<tr>
<th>MIN_LNG</th>
<th>MIN_LAT</th>
<th>MAX_LNG</th>
<th>MAX_LAT</th>
<th>GRIDname</th>
</tr>
</thead>
<tbody>
<tr>
<td>117.5783</td>
<td>-33.6764</td>
<td>117.5787</td>
<td>-33.6766</td>
<td>5c</td>
</tr>
<tr>
<td>117.5783</td>
<td>-33.6766</td>
<td>117.5785</td>
<td>-33.6768</td>
<td>4c</td>
</tr>
<tr>
<td>117.5783</td>
<td>-33.6768</td>
<td>117.5785</td>
<td>-33.6770</td>
<td>3c</td>
</tr>
</tbody>
</table>
首先我模拟了你从jsonconst [latitude, longitude] = [117.5783, -33.6768];
getData
函数从htmltable中获取数据,所以我不知道数据的来源。我这样做是因为使用数组和对象比使用 DOM 节点
函数 getGridValue
搜索数据,如果满足条件,它将 return gridName
属性 的值,否则它将 return null
再次,我希望我已经正确解释了你的问题,希望你觉得它有用
非常感谢 user615274 给我的见解。我稍微调整了代码,这是我在您的代码帮助下生成的最终代码。
grid_table = [
{"minLng":"117.5783","minLat":"-33.6764","maxLng": "117.5787","maxLat":"-33.6766","gridName" :"5c"},
{"minLng":"117.5783","minLat":"-33.6766","maxLng":"117.5785","maxLat":"-33.6768","gridName":"4c"},
{"minLng":"117.5783","minLat":"-33.6768","maxLng":"117.5785","maxLat":"-33.6770","gridName":"3c"}
]
function getGridValue({ latitude, longitude }) {
const data = [...grid_table];
const item = data.find(
item =>
(latitude >= item.minLat && longitude >= item.minLng) &&
(latitude <= item.maxLat && longitude <= item.maxLng)
);
if (item) {
return item.gridName;
}
return null;
}
const [latitude, longitude] = ["-33.6769","117.5784"];
const value = getGridValue({ latitude, longitude});
document.write(value);
非常感谢。如果您有任何建议或进一步的想法,请告诉我。