Esempio di codice: recupero delle coordinate geografiche di un indirizzo mediante il geocoding

L'esempio di codice seguente mostra come recuperare le coordinate geografiche per un indirizzo mediante una richiesta di geocoding asincrona. Anche se la richiesta specifica solo un indirizzo, il server di geocoding può restituire una serie pertinente di coordinate dovuta all'inclusione del contesto geografico nella richiesta. Quando l'applicazione riceve i risultati della ricerca, visualizza la latitudine e la longitudine sullo schermo.
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 informazioni sono state utili? Inviateci i vostri commenti.