Java 如何假设行人通过OSM上的十字路口
我需要使用GPS读数和Java 如何假设行人通过OSM上的十字路口,java,android,openstreetmap,osmdroid,geonames,Java,Android,Openstreetmap,Osmdroid,Geonames,我需要使用GPS读数和findNearestIntersectionOSM调用来确认行人是否穿过十字路口,以获取最近的十字路口。 对于来自geoname的每个响应,我检查两点之间的距离是否小于某个阈值,并使用sin功能检查交叉点(GeoPoint.BearingTo)和行人当前位置之间的角度是否翻转其标志 Sin(先前位置读取)*Sin(当前位置读取)
findNearestIntersectionOSM
调用来确认行人是否穿过十字路口,以获取最近的十字路口。
对于来自geoname
的每个响应,我检查两点之间的距离是否小于某个阈值,并使用sin
功能检查交叉点(GeoPoint.BearingTo
)和行人当前位置之间的角度是否翻转其标志
Sin(先前位置读取)*Sin(当前位置读取)<0
不幸的是,这是不够的,我有时会收到误报等等
有没有更好的方法,或者我遗漏了什么
为了说明这一点,我不打算深入到图像处理领域,而只是简单地使用一些OSM的功能(如果可能的话)
CloseStInterSectionPoint上的专用void(地质点gPtIntersection){
int iDistance=mGeoLastKnownPosition.distanceTo(gPtIntersection);
双dbCurrentBearing=mGeoLastKnownPosition.bearingTo(gPtIntersection);
if(mDbLastKnownBearing==null){
mDbLastKnownBearing=新双精度(dbCurrentBearing);
返回;
}
布尔bFlippedSignByCrossing=Math.sin(mDbLastKnownBearing)*Math.sin(dbCurrentBearing)<0;
mDbLastKnownBearing=dbCurrentBearing;//无论发生什么情况,都要更新轴承
如果(b LippedSignByCrossing&&i立场完全不清楚您使用的是哪个框架/库,osmdroid除外。此外,消费者GPS不够准确,无法回答此问题。@scai这是一种算法,我可以忽略osmdroid部分,告诉您我有起点和终点。在这种情况下,您可能问错了StayExchange网络。如果没有人回答你的问题,请考虑你的问题。完全不清楚你使用的是哪一个框架/库,除了OsMoDoad。而且,消费者GPS还不够精确,无法回答这个问题。@ SCAI这是一个算法,我可以简单地忽略OsMIDROLD部分并告诉你我已经开始和E了。在这种情况下,你可能会问到错误的StayExchange网络。如果没有人回答你的问题,请考虑一下你的问题。
private void OnClosestIntersectionPoint(GeoPoint gPtIntersection) {
int iDistance = mGeoLastKnownPosition.distanceTo(gPtIntersection);
double dbCurrentBearing = mGeoLastKnownPosition.bearingTo(gPtIntersection);
if(mDbLastKnownBearing == null) {
mDbLastKnownBearing = new Double(dbCurrentBearing);
return;
}
boolean bFlippedSignByCrossing = Math.sin(mDbLastKnownBearing) * Math.sin(dbCurrentBearing) < 0;
mDbLastKnownBearing = dbCurrentBearing; // update bearing regardless to what's going to happen
if(bFlippedSignByCrossing && iDistance <= 10 && !HasntMarkIntersectionAsCrossed(gPtIntersection))
MarkAsIntersectionCrossed(mGeoLastKnownIntersection);
}