Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何假设行人通过OSM上的十字路口_Java_Android_Openstreetmap_Osmdroid_Geonames - Fatal编程技术网

Java 如何假设行人通过OSM上的十字路口

Java 如何假设行人通过OSM上的十字路口,java,android,openstreetmap,osmdroid,geonames,Java,Android,Openstreetmap,Osmdroid,Geonames,我需要使用GPS读数和findNearestIntersectionOSM调用来确认行人是否穿过十字路口,以获取最近的十字路口。 对于来自geoname的每个响应,我检查两点之间的距离是否小于某个阈值,并使用sin功能检查交叉点(GeoPoint.BearingTo)和行人当前位置之间的角度是否翻转其标志 Sin(先前位置读取)*Sin(当前位置读取)

我需要使用GPS读数和
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);
}