Codebeispiel: Abrufen von geografischen Koordinaten für eine Adresse mithilfe der Geokodierung

Das folgende Codebeispiel zeigt, wie Sie die geografischen Koordinaten einer Adresse mithilfe einer asynchronen Geokodierungs-Anforderung abrufen. Obwohl die Anforderung nur eine Adresse angibt, kann der Geokodierungs-Server einen relevanten Koordinatensatz zurückgeben, da der geografische Kontext in der Anforderung enthalten ist. Wenn die Anwendung die Ergebnisse der Suche empfängt, zeigt sie den Längen- und Breitengrad auf dem Bildschirm an.
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.
            }   
        }
    }        
}

Waren diese Informationen hilfreich? Senden Sie uns Ihren Kommentar.