Thursday, March 15, 2012

Re: [android-developers] Re: [Android - developers] Exponential Smoothing on Latitude and Langitude

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.reinharts@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 Applications http://www.poncho.co.il/gateaway.php https://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+unsubscribe@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+unsubscribe@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+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment