Ejemplo de código: recuperar las coordenadas geográficas de una dirección mediante la codificación geográfica

El siguiente ejemplo de código muestra cómo recuperar las coordenadas geográficas de una dirección mediante una solicitud de codificación geográfica asíncrona. Aunque la solicitud especifique únicamente la dirección de una calle, el servidor de codificación geográfica puede devolver un conjunto de coordenadas relevantes gracias al contexto geográfico incluido en la solicitud. Cuando la aplicación recibe los resultados de la búsqueda, muestra la latitud y la longitud en la pantalla.
import net.rim.device.api.lbs.maps.MapDimensions;
import net.rim.device.api.lbs.maps.model.*;
import net.rim.device.api.lbs.maps.server.*;
import net.rim.device.api.lbs.maps.server.exchange.*;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.MainScreen;
import java.util.Vector;
public class GeocodingDemo extends UiApplication
{
    public static void main(String[] args)
    {
        GeocodingDemo app = new GeocodingDemo();
        app.enterEventDispatcher();
    }
    public GeocodingDemo()
    {
        pushScreen(new GeocodingDemoScreen());
    }
    public class GeocodingDemoScreen extends MainScreen
    {
        private LabelField _resultsField;
        public GeocodingDemoScreen()
        {
            setTitle("Geocoding Demo");
            _resultsField = new LabelField();
            add(_resultsField);
            // Geographic context that is sent with the request.
            MapDimensions location = new MapDimensions(
                    new MapPoint(43.4815, -80.5407), 480, 360, 5, 0);           
            // The address used in the request. Only the street name is 
            // required, since geographic context is provided that
            // indicates the search is coming from Waterloo, Ontario.
            MapLocation address = new MapLocation();
            address.addData(MapLocation.LBS_LOCATION_STREET_ADDRESS_KEY, 
                    "419 phillip st");
            // Create an instance of the class that implements 
            // ServerExchangeCallback.
            MyServerExchangeCallback callback = new MyServerExchangeCallback();
            try
            {
                // Initiate the reverse geocoding request.
                Geocoder.getInstance().geocode(callback, address, location, 0);
            } 
            catch (GeocodeException e)
            {
                // Do something with the exception.
            }   
        }
        public class MyServerExchangeCallback implements ServerExchangeCallback
        {
            // StringBuffer used to display the location information from the 
            // request.
            StringBuffer buffer = new StringBuffer();
            public void requestSuccess(ServerExchange exchange)
            {
                if(exchange instanceof GeocodeExchange)
                {
                    // Cast the Exchange object to a GeocodeExchange object
                    // and retrieve the Vector of results.
                    GeocodeExchange geocodeExchange = (GeocodeExchange)exchange;
                    Vector results = geocodeExchange.getResults();
                    // Iterate through each MapLocation object in the Vector 
                    // (can be many results depending on the context you provide 
                    // with the request).
                    for(int i = 0; i < results.size(); i++)
                    {
                        // Retrieve the lat and lon from the MapLocation object 
                        // and appends it to the StringBuffer.
                        MapLocation location = (MapLocation) results.elementAt(i);
                        buffer.append("Latitude: ").append(location.getLat())
                                .append('\n');
                        buffer.append("Longitude: ").append(location.getLon())
                                .append('\n');
                    }
                    // Take control of the UI thread and displays the location 
                    // information on the screen.
                    synchronized(UiApplication.getEventLock())
                    {
                        _resultsField.setText(buffer.toString());
                    }
                }
            }
            public void requestFailure(ServerExchange exchange)
            {
                // Report the failure to the user.
            }
            public void requestHalted()
            {
                // Request was stopped.
            }   
        }
    }        
}

¿Le ha resultado útil esta información? Envíenos sus comentarios.