Search code examples
luagpsgeolocationcoronasdk

Location listener Corona sdk


I am working with location based application using Corona SDK. I have image and image corner value(Lat - Long). Using the code below to find XY pixels. But location listener is not working properly.In android location listener fires after first execution. I have got accurate lat-lon value every 1 meter.

 local function GetPixelCoordinatesInBounds( width,height,lat,lon )

    minLat = 12.9837
    maxLat = 12.9850
    MAP_HEIGHT = W
    minLon = 80.24662
    maxLon = 80.24666
    MAP_WIDTH = H-35

    x = ((lon - minLon) / (maxLon - minLon)) * (MAP_WIDTH - 1)
    y = ((lat - minLat) / (maxLat - minLat)) * (MAP_HEIGHT - 1)
end

local function locationHandler(event)
 if ( event.errorCode ) then
         native.showAlert( "GPS Location Error", event.errorMessage, {"OK"} )

 else
    GetPixelCoordinatesInBounds(ImageWidth, ImageHeight,  event.latitude, event.longitude)
 end
   Runtime:addEventListener( "location", locationHandler ) 

Solution

  • I dont think you are handling the coordinates properly. Look at this example where the coordinates are converted and the app is working fine:

    function locationHandler(event)
            -- Check for error (user may have turned off Location Services)
        if event.errorCode then
            title = display.newText( "errorgps", 200, 150, "Verdana-Bold", 20 )
            --print( "Location error: " .. tostring( event.errorMessage ) )
        else
    
             ycor = string.format( '%.6f', event.latitude )
             xcor = string.format( '%.6f', event.longitude )
             accuracyText = string.format( '%.3f', event.accuracy )
        end
    
    mxl0 = 5
     myl0 = 4
    -- Specifically check here how you have to manipulate your local y coordinates 
            mxl = ((mxl0-xmin)/(xmax-xmin))*300+10
            myl = -((myl0-ymin)/(ymax-ymin))*300+460
                if mylocationi == 1 then mxl = ((mxl-zx[1])/(zx[2]-zx[1]))*300 end
            if mylocationi == 1 then myl = ((myl-(zy[1]+zy[2])/2)/(zx[2]-zx[1]))*300+160 end
        if mxl > 340 then mxl = 340 end
        if myl > 460 then myl = 460 end
        if mxl < 0 then mxl = 5 end
        if myl < 160 then myl = 160 end
    
    
         mylocation = display.newCircle( mxl, myl, 3 )
         mylocation:setFillColor( 0,0,1 )
         timer.performWithDelay( 1000, removecircle )
    
    end
    Runtime:addEventListener( "location", locationHandler )
    

    Check this app, if it is what you are trying to do I can give you the codes: https://play.google.com/store/apps/details?id=com.jorc.amirfarazmand.GPS&hl=en