我正在尝试使用Geodist计算距离(以英里为单位)。里程是准确计算的。唯一的问题是,当当前位置的经度和纬度与目标位置的经度和纬度相同时,我得到的是“ NaN”而不是0英里。我不确定如何解决此NaN值。我尝试这样做:
if (item.cLat === item.LatL)
dist: 0
当当前位置和目的地的经度和纬度相同时,我仍然得到NaN。下面是我的代码和Json文件:
var geodist = require('geodist')
var dist = geodist({lat: item.cLat, lon:item.cLong}, {lat: item.LatL, lon: item.Long2}, 'mi')
if (item.cLat === item.LatL)
dist: 0
return(
<View style={{ backgroundColor: index %2 ===0? '#ffdfba':'#bae1ff'}} >
<Text style={styles.AddressSpace} >Miles:{dist}</Text>
</View>
)
我的Json文件是这样的:
[
{
"id":"1",
"fk": 1,
"addr": "101 test drive",
"phone": "(951)-955-6200",
"LatL":"33.123456",
"Long2":"117.923456",
"cLat": "33.123456",
"cLong": "117.923456",
}
]
答案 0 :(得分:1)
正如注释中已指出的那样,您未使用dist : 0
设置dist的值。您使用dist = 0
进行设置。 dist : 0
仅在将dist
设置为对象的属性时才适用,例如:var someObject = { dist : 0 };
。为了爱所有神圣的东西,人-弄一些分号。他们没有受伤。
但是我将其作为完整的“答案”(而不是其他注释),因为示例代码中的条件仅用于检查等效纬度。因此,在您的示例中,即使解决了dist : 0
问题,对于共享相同纬度的两个位置,即使它们的经度不同,它也会显示零距离。所以你需要有这样的东西:
if (item.cLat === item.LatL && item.cLong === item.Long2) {
dist = 0;
}
但是如果您仍然 看到NaN
,那么最完整的解决方案是仅检查该特定条件。因此,您可以丢弃整个if (item.cLat === item.LatL && item.cLong === item.Long2)
并替换为:
if (isNan(dist)) {
dist = 0;
}
仅供参考,以下是isNaN()函数的链接:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN
答案 1 :(得分:0)
之所以会这样,是因为lat和lon是不是数字的字符串。尝试将其强制为数字,如下所示:
var geodist = require('geodist')
var dist = geodist({lat: +item.cLat, +lon:item.cLong}, {lat: +item.LatL, lon: +item.Long2}, 'mi')
if (item.cLat === item.LatL)
dist: 0
return(
<View style={{ backgroundColor: index %2 ===0? '#ffdfba':'#bae1ff'}} >
<Text style={styles.AddressSpace} >Miles:{dist}</Text>
</View>
)