Hi Concave,

Okay, I see that you need to keep the values as x1E6 now. However, you are 
still multiplying by 1E6 twice, you only need to do it once. Remove the 
*1E6 from the following lines, so..

smoothLat = (int) (smoothingCoor [0] * 1E6); 
smoothLongi = (int) (smoothingCoor [1] * 1E6);  

becomes...

smoothLat = (int) (smoothingCoor [0]); 
smoothLongi = (int) (smoothingCoor [1]);  

Try stepping through your code in the debugger to reveal if your values now 
remain in the correct order of magnitude. Until you've fixed the bug in 
your filtering code I recommend you lock the GPS to a known value e.g. 
insert this at the top of your function...

newLocation.setLatitude( 49.28214015975995 );
newLocation.setLongitude( -123.12438011169434 );

That's Vancouver, use some location you will recognize as correct. Once 
your filter works then you can remove the fixed location and start using 
the GPS values again.




On Thursday, March 15, 2012 6:58:04 AM UTC-7, concave wrote:
>
> Hi, thanks for all the input
> Right now i still don't have any solution for get the best latitude and 
> longitude
> I want to use kalman filter at the first, but after read some paper and 
> articles kalman filter is need the value from accelorometer
> Unfortunately my requirement for this application is doesn't use any 
> sensor except the gps
>
> @jinja : Hi thanks for the input, but i think it's the right way to get 
> the gps value.
>  Because i need the int type value to put it on GeoPoint methode and get 
> the GeoPoint to animateTo ().
>
>
> On Tue, Mar 13, 2012 at 1:47 PM, Yaron Reinharts <
> yaron.reinha...@gmail.com> wrote:
>
>>  Hi,
>>
>> There is a section with the title "Maintaining a current best estimate" 
>> in the following link, it contains an implementation of a method called " 
>> isBetterLocation".
>>
>> http://developer.android.com/guide/topics/location/obtaining-user-location.html
>>
>> Hope this helps
>> /Yaron
>>
>> -- 
>> Yaron Reinharts 
>> Smart Drive 
>> Applicationshttp://www.poncho.co.il/gateaway.phphttps://market.android.com/details?id=com.poncho.gsm.gate.activities
>>
>>  
>>
>> On 03/13/2012 05:32 AM, Jinja wrote: 
>>
>> Hello, I've never dealt with GPS data before, but having a quick look at 
>> your code it looks like you have a mismatch in converting your data to and 
>> from integers and doubles. 
>>
>> I notice you multiply by 1E6 when extracting the lat/long, presumably 
>> this is to maintain some accuracy during the double to int conversion... 
>>
>>  int lat = (int) (currentPosition.getLatitude()***1E6); 
>>  
>>  So one fix is to use all doubles and remove all of your *1E6. The other 
>> fix is to use /1E6 instead of *1E6 when converting back to doubles...
>>
>>  currentPosition.**setLatitude(smoothingCoor [0] / 1E6);  
>>
>>  instead of...
>>
>>  smoothLat = (int) (smoothingCoor [0] * 1E6);
>> currentPosition.**setLatitude(smoothLat);  
>>  
>>  I hope that fixes your issue. 
>>
>>  
>>  
>> On Sunday, March 11, 2012 12:46:24 AM UTC-8, concave wrote: 
>>>
>>> Hi guys, i've a little problem here. 
>>> I'm working with gps data, getting values every second and displaying 
>>> current position on a map. 
>>> The problem is that sometimes (specially when im using the app on 
>>> indoor and not make a move) the values vary a lot, making the current 
>>> position to change. 
>>> I was wondering about some easy enough method to avoid this. 
>>>  As a first idea, I thought about discarding values with accuracy 
>>> beyond certain threshold, and use Exponential filtering as i use on my 
>>> Bearing. But i get up on Antartica. Here's the code that i used to get 
>>> the location and filtering it with exponential : 
>>>
>>> public void onLocationChanged(Location newLocation) { 
>>>                                // Get previous Location, needed to get 
>>> the Bearing Value 
>>>                               **  if(currentPosition != null) 
>>>                               **          { 
>>>                               **                  prevLocation = 
>>> currentPosition; 
>>>                               **                  pLat = (int) 
>>> (prevLocation.getLatitude() *1E6); 
>>>                               **                  pLongi = (int) 
>>> (prevLocation.getLongitude()***1E6); 
>>>
>>>                               **          } 
>>>                               **  currentPosition = new Location 
>>> (newLocation); 
>>>                               **  int lat = (int) 
>>> (currentPosition.getLatitude()***1E6); 
>>>                               **  int longi = (int) 
>>> (currentPosition.getLongitude(**)*1E6); 
>>>
>>>                               **  //Smoothing Latitude,Longitude 
>>>                               **  if(lat != 0 && longi != 0){ 
>>>                               **          coor[0] = lat; 
>>>                               **          coor[1] = longi; 
>>>                               **          if (smoothingCoor == null){ 
>>>                               **                  **smoothingCoor = 
>>> coor; 
>>>                               **          } 
>>>                               **                  for (i=0; 
>>> i<coor.length;i++){ 
>>>                               **                          
>>> **smoothingCoor[i] 
>>> = smoothingCoor [i] +alpha * (coor[i] - 
>>> smoothingCoor[i]); 
>>>                               **                  } 
>>>                               **                  smoothLat = (int) 
>>> (smoothingCoor [0] * 1E6); 
>>>                               **                  smoothLongi = (int) 
>>> (smoothingCoor [1] * 1E6); 
>>>
>>>                               **          
>>> currentPosition.**setLatitude(smoothLat); 
>>>
>>>                               **          
>>> currentPosition.**setLongitude(smoothLongi); 
>>>
>>>                               **  } 
>>>
>>>                               **  // Get Bearing Value 
>>>                               **  if(prevLocation != null && 
>>> currentPosition != null){ 
>>>
>>>                               **  bearing = 
>>> prevLocation.bearingTo(**currentPosition); 
>>>
>>>
>>>                               **  //Smoothing bearing value with 
>>> exponential 
>>>                               **          if (smoothingBearing == 0) { 
>>>                                     **smoothingBearing = bearing; 
>>>                               **          } else { 
>>>                                     **smoothingBearing = 
>>> smoothingBearing +alpha * (bearing - 
>>> smoothingBearing); 
>>>                                     } 
>>>
>>>                               **  } 
>>>
>>> Hope you can understand my explanataion, and i provide enough 
>>> information 
>>> Thanks
>>
>>  -- 
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to android-developers@googlegroups.com
>> To unsubscribe from this group, send email to
>> android-developers+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en 
>>
>>
>>
>>  -- 
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to android-developers@googlegroups.com
>> To unsubscribe from this group, send email to
>> android-developers+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>>
>
>
On Thursday, March 15, 2012 6:58:04 AM UTC-7, concave wrote:
>
> Hi, thanks for all the input
> Right now i still don't have any solution for get the best latitude and 
> longitude
> I want to use kalman filter at the first, but after read some paper and 
> articles kalman filter is need the value from accelorometer
> Unfortunately my requirement for this application is doesn't use any 
> sensor except the gps
>
> @jinja : Hi thanks for the input, but i think it's the right way to get 
> the gps value.
>  Because i need the int type value to put it on GeoPoint methode and get 
> the GeoPoint to animateTo ().
>
>
> On Tue, Mar 13, 2012 at 1:47 PM, Yaron Reinharts <
> yaron.reinha...@gmail.com> wrote:
>
>>  Hi,
>>
>> There is a section with the title "Maintaining a current best estimate" 
>> in the following link, it contains an implementation of a method called " 
>> isBetterLocation".
>>
>> http://developer.android.com/guide/topics/location/obtaining-user-location.html
>>
>> Hope this helps
>> /Yaron
>>
>> -- 
>> Yaron Reinharts 
>> Smart Drive 
>> Applicationshttp://www.poncho.co.il/gateaway.phphttps://market.android.com/details?id=com.poncho.gsm.gate.activities
>>
>>  
>>
>> On 03/13/2012 05:32 AM, Jinja wrote: 
>>
>> Hello, I've never dealt with GPS data before, but having a quick look at 
>> your code it looks like you have a mismatch in converting your data to and 
>> from integers and doubles. 
>>
>> I notice you multiply by 1E6 when extracting the lat/long, presumably 
>> this is to maintain some accuracy during the double to int conversion... 
>>
>>  int lat = (int) (currentPosition.getLatitude()***1E6); 
>>  
>>  So one fix is to use all doubles and remove all of your *1E6. The other 
>> fix is to use /1E6 instead of *1E6 when converting back to doubles...
>>
>>  currentPosition.**setLatitude(smoothingCoor [0] / 1E6);  
>>
>>  instead of...
>>
>>  smoothLat = (int) (smoothingCoor [0] * 1E6);
>> currentPosition.**setLatitude(smoothLat);  
>>  
>>  I hope that fixes your issue. 
>>
>>  
>>  
>> On Sunday, March 11, 2012 12:46:24 AM UTC-8, concave wrote: 
>>>
>>> Hi guys, i've a little problem here. 
>>> I'm working with gps data, getting values every second and displaying 
>>> current position on a map. 
>>> The problem is that sometimes (specially when im using the app on 
>>> indoor and not make a move) the values vary a lot, making the current 
>>> position to change. 
>>> I was wondering about some easy enough method to avoid this. 
>>>  As a first idea, I thought about discarding values with accuracy 
>>> beyond certain threshold, and use Exponential filtering as i use on my 
>>> Bearing. But i get up on Antartica. Here's the code that i used to get 
>>> the location and filtering it with exponential : 
>>>
>>> public void onLocationChanged(Location newLocation) { 
>>>                                // Get previous Location, needed to get 
>>> the Bearing Value 
>>>                               **  if(currentPosition != null) 
>>>                               **          { 
>>>                               **                  prevLocation = 
>>> currentPosition; 
>>>                               **                  pLat = (int) 
>>> (prevLocation.getLatitude() *1E6); 
>>>                               **                  pLongi = (int) 
>>> (prevLocation.getLongitude()***1E6); 
>>>
>>>                               **          } 
>>>                               **  currentPosition = new Location 
>>> (newLocation); 
>>>                               **  int lat = (int) 
>>> (currentPosition.getLatitude()***1E6); 
>>>                               **  int longi = (int) 
>>> (currentPosition.getLongitude(**)*1E6); 
>>>
>>>                               **  //Smoothing Latitude,Longitude 
>>>                               **  if(lat != 0 && longi != 0){ 
>>>                               **          coor[0] = lat; 
>>>                               **          coor[1] = longi; 
>>>                               **          if (smoothingCoor == null){ 
>>>                               **                  **smoothingCoor = 
>>> coor; 
>>>                               **          } 
>>>                               **                  for (i=0; 
>>> i<coor.length;i++){ 
>>>                               **                          
>>> **smoothingCoor[i] 
>>> = smoothingCoor [i] +alpha * (coor[i] - 
>>> smoothingCoor[i]); 
>>>                               **                  } 
>>>                               **                  smoothLat = (int) 
>>> (smoothingCoor [0] * 1E6); 
>>>                               **                  smoothLongi = (int) 
>>> (smoothingCoor [1] * 1E6); 
>>>
>>>                               **          
>>> currentPosition.**setLatitude(smoothLat); 
>>>
>>>                               **          
>>> currentPosition.**setLongitude(smoothLongi); 
>>>
>>>                               **  } 
>>>
>>>                               **  // Get Bearing Value 
>>>                               **  if(prevLocation != null && 
>>> currentPosition != null){ 
>>>
>>>                               **  bearing = 
>>> prevLocation.bearingTo(**currentPosition); 
>>>
>>>
>>>                               **  //Smoothing bearing value with 
>>> exponential 
>>>                               **          if (smoothingBearing == 0) { 
>>>                                     **smoothingBearing = bearing; 
>>>                               **          } else { 
>>>                                     **smoothingBearing = 
>>> smoothingBearing +alpha * (bearing - 
>>> smoothingBearing); 
>>>                                     } 
>>>
>>>                               **  } 
>>>
>>> Hope you can understand my explanataion, and i provide enough 
>>> information 
>>> Thanks
>>
>>  -- 
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to android-developers@googlegroups.com
>> To unsubscribe from this group, send email to
>> android-developers+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en 
>>
>>
>>
>>  -- 
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to android-developers@googlegroups.com
>> To unsubscribe from this group, send email to
>> android-developers+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>>
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to