I've created an issue for this: https://github.com/graphhopper/graphhopper/issues/335
Peter On 17.02.2015 16:48, Laura Barroso wrote: > Yes, that will solve my issue, Backward search will be required too. > > -----Mensaje original----- > De: Peter [mailto:[email protected]] > Enviado el: martes, 17 de febrero de 2015 10:43 > Para: [email protected] > Asunto: Re: [GraphHopper] Fwd: Re: instruction too early > > ok. So what you would need some method like this: > > currentInstruction = find(lat, lon, maxDistance, previousInstruction) > > which can be called several times (and is cheap&fast) and only searches e.g. > forward for the closest instruction? Would this solve your issue? > Or would 'backward' search also be necessary as a user could go far off the > route? > > Peter > > > On 17.02.2015 16:32, Laura Barroso wrote: >> well,yes, I can probably do that, but I was thinking that if my >> current location is near to one of the points that holds the >> instruction then I will miss it, am I right?...however will do your >> suggestion.Thanks. >> My usecase is guide the user depending on the gps current location and >> the route. >> >>> if you find once the next instruction why would you need to iterate >>> over all points, why not just take the first of this instruction >>> (getFirstLat >>> etc) and check the distance? what is your usecase? >>> >>> Peter >>> >>> >>> On 17.02.2015 16:15, Laura Barroso wrote: >>>> you mean something like this? >>>> DistanceCalc distCalc = Helper.DIST_EARTH; >>>> distCalc.calcDist(instruction.getPoints().getLat(0), >>>> instruction.getPoints().getLon(0), >>>> currentLocation.getLatitude(), >>>> currentLocation.getLongitude()) >>>> >>>> but still will have iterate over all the points inside the >>>> instruction... >>>> is there any better way???? >>>> >>>> >>>>> Laura, >>>>> >>>>> why not find the next instruction and only display it if the >>>>> current location is close to it? No need to do unnecessary find() calls. >>>>> >>>>>> until the max distance between >>>>>> one of the edges and the current position is right, even is that >>>>>> mean that the user don't get any instruction at all >>>>> Why not specify the allowed maximum distance to the route in the >>>>> find method appropriately? >>>>> >>>>> Regards, >>>>> Peter >>>>> >>>>> >>>>> On 17.02.2015 14:43, Laura Barroso wrote: >>>>>> oh boy, so that's what's happening...this is not good for me, I'm >>>>>> not interested in knowing the next instruction until the max >>>>>> distance between one of the edges and the current position is >>>>>> right, even is that mean that the user don't get any instruction >>>>>> at all because he don't get close enough to them. ok, Thanks a lot >>>>>> for the clarification, now everything gets more sense. >>>>>> Thinking a good approach maybe override instructionList class in >>>>>> order to modify this behavior to suit my needs. Second approach: >>>>>> compute everything twice, one the instructionlist(in the find >>>>>> method) and the second on my method... >>>>>> >>>>>>> Hi Laura, >>>>>>> >>>>>>> I took a look at InstructionList.find() and actually found some >>>>>>> inconsistent behaviour: >>>>>>> https://github.com/graphhopper/graphhopper/issues/331 >>>>>>> >>>>>>> Nevertheless I don't think this is the reason for the problems >>>>>>> you described. >>>>>>> >>>>>>> Maybe to avoid misunderstandings, the find(lat, lon, dist) method >>>>>>> is supposed to work as following: >>>>>>> Given lat,lon find the closest point on the route. If lat,lon is >>>>>>> not more than than dist away from the route, then it yields the >>>>>>> upcoming instruction (even if this instruction is a lot further >>>>>>> away than dist). >>>>>>> >>>>>>>> Easy: any point in Havana I have test routes in Miramar, Vedado >>>>>>>> and Guanabacoa, note those are like areas that are not close to >>>>>>>> each other(at list Guanabacoa from the rest), the last point >>>>>>>> that I test was: >>>>>>>> START: latitud: 23.12529533541739 longitude: -82.41401873360883 >>>>>>>> END: latitud: 23.124871881707463 longitude: -82.4237889156866 >>>>>>>> The route that I create was on foot, for android purpose. Thanks! >>>>>>>> >>>>>>>> >>>>>>> To find the reason for your exact problem, it would help a lot if >>>>>>> you can also give me lat, lon coordinates for which you don't get >>>>>>> any instruction or the instruction within wrong distance. >>>>>>> >>>>>>> Cheers, >>>>>>> Jan >>>>>>> >>>>>>>>> Hi Laura, >>>>>>>>> >>>>>>>>> thanks for the clarification. i will take a look into this, but >>>>>>>>> it would be helpfull if you can provide me start and end point >>>>>>>>> of the route, as well as one or two points where there is a >>>>>>>>> wrong instruction or one missing. >>>>>>>>> >>>>>>>>> Jan >>>>>>>>> >>>>>>>>>> Hello, thanks for your reply, I was not referring to that >>>>>>>>>> issue but it is quite similar to was happen to me... however I >>>>>>>>>> know that graphhopper generate all the instructions for the >>>>>>>>>> route, I check it out every time. >>>>>>>>>> The problem is that it gives me the wrong instruction at the >>>>>>>>>> wrong time. >>>>>>>>>> The sniped code you see is part of the class that overrides >>>>>>>>>> MyLocationOverlay, on the onLocationChanged method. >>>>>>>>>> I tell graphhopper to give me the next instruction in this >>>>>>>>>> piece of >>>>>>>>>> code: >>>>>>>>>> Instruction instruction = il.find(location.getLatitude(), >>>>>>>>>> location.getLongitude(), 2); il is the InstructionList that is >>>>>>>>>> created as part of the route, I pass it to the class and every >>>>>>>>>> time that location changes I check if there is anything to say >>>>>>>>>> to the user. >>>>>>>>>> Hi Laura, >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> Hello everyone: I notices that graphhopper is giving me the >>>>>>>>>>> instructions too early and sometimes it wont even give me >>>>>>>>>>> anything, I think I read about an issue pointing that but now >>>>>>>>>>> is close... >>>>>>>>>> maybe you refer to this issue >>>>>>>>>> https://github.com/graphhopper/graphhopper/issues/94 regarding >>>>>>>>>> missing instructions? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> I override MyLocationOverlay class, and this is my code: >>>>>>>>>>> @Override public void onLocationChanged(Location location) { >>>>>>>>>>> super.onLocationChanged(location); >>>>>>>>>>> if (lastLocation == null || location != lastLocation) { >>>>>>>>>>> lastLocation = location; if (il != null) { Instruction >>>>>>>>>>> instruction = il.find(location.getLatitude(), >>>>>>>>>>> location.getLongitude(), 2); if (instruction != null && >>>>>>>>>>> instruction != >>>>>>>>>> lastInstruction) { >>>>>>>>>>> lastInstruction = instruction; String text = >>>>>>>>>> lastInstruction.getTurnDescription(esTR); >>>>>>>>>>> Toast.makeText(context, text, >>>>>>>>>> Toast.LENGTH_LONG).show(); >>>>>>>>>>> if (tts != null) { tts.speak(text, TextToSpeech.QUEUE_FLUSH, >>>>>>>>>>> null); } } } } } >>>>>>>>>> I would take a look into this, but I don't understand yet >>>>>>>>>> where exactly your code hooks into the GraphHopper Code. I do >>>>>>>>>> not see any LocationOverlay class, but maybe you can point me >>>>>>>>>> there with a github link. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> Note that it suppose to give me the instruction with at list >>>>>>>>>>> 2 meters of distance, last time I check it gave me the >>>>>>>>>>> instruction with at list 5 meters of distance in the first >>>>>>>>>>> edge...the next turn wont dispatch anything at all...what >>>>>>>>>>> could be happening? My start point now is branch "issue 314" >>>>>>>>>>> since I haven't being able to download the complete >>>>>>>>>>> repository(problems with my connection). >>>>>>>>>>> any >>>>>>>>>>> help will be appreciated. >>>>>>>>>> Cheers, >>>>>>>>>> Jan >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> _______________________________________________ GraphHopper mailing list [email protected] https://lists.openstreetmap.org/listinfo/graphhopper
