我尝试计算两点之间的距离(给定十进制格式的那些点的纬度/经度)。
VBA代码:
Const pi = 3.14159265358979
Function distance(lat1, lon1, lat2, lon2)
Dim theta, dist
theta = lon1 - lon2
dist = Sin(deg2rad(lat1)) * Sin(deg2rad(lat2)) + Cos(deg2rad(lat1)) * Cos(deg2rad(lat2)) * Cos(deg2rad(theta))
dist = acos(dist)
dist = rad2deg(dist)
distance = (dist * 60 * 1.1515) * 1.609344
End Function
Function acos(rad)
If Abs(rad) <> 1 Then
acos = pi / 2 - Atn(rad / Sqr(1 - rad * rad))
ElseIf rad = -1 Then
acos = pi
End If
End Function
Function deg2rad(deg)
deg2rad = CDbl(deg * pi / 180)
End Function
Function rad2deg(rad)
rad2deg = CDbl(rad * 180 / pi)
End Function
我得到错误运行时错误'94':在此行“deg2rad = CDbl(deg * pi / 180)”中无效使用Null。 我写了一个查询:
SELECT DISTINCT
([band].E_laip+([band].E_min*(1/60))+([band].E_sec*(1/3600))) AS Band_E_dec,
([band2].E_laip+([band2].E_min*(1/60))+([band2].E_sec*(1/3600))) AS Band2_E_dec,
([band].N_laip+([band].N_min*(1/60))+([band].N_sec*(1/3600))) AS Band_N_dec,
([band2].N_laip+([band2].N_min*(1/60))+([band2].N_sec*(1/3600))) AS Band2_N_dec,
distance([Band_N_dec],[Band_E_dec],[Band2_N_dec],[Band2_E_dec]) AS Atstumas
FROM [band] LEFT JOIN band2 ON [band].Stotis = band2.Stotis;
也许有人有想法?提前谢谢。
答案 0 :(得分:2)
如果您没有匹配的行,则在LEFT JOIN
ed表中使用JOIN
,允许空值。我猜你的band
表格中至少有一条记录band2
字段stotis
中没有匹配的行。
要了解,请执行:
SELECT *
FROM band
LEFT JOIN band2
ON [band].Stotis = band2.Stotis
WHERE band2.stotis IS NULL
如果您有任何点击,则会出现参考数据问题。
您的解决方案是使用LEFT JOIN
执行WHERE Band2.stotis IS NOT NULL
,或者使用相同的条件执行INNER JOIN
,这只会返回两个表中的匹配行。