Etiquetar y configurar la visibilidad de las ubicaciones en un mapa

Los siguientes pasos describen cómo asignar etiquetas a elementos asignables que se almacenan en una clase MapDataModel. La visibilidad se configura para mostrar las ubicaciones que tienen la etiqueta "trabajo". El mapa resultante de la aplicación se muestra en la siguiente imagen:

  1. Importe las clases y las interfaces necesarias.
    import net.rim.device.api.lbs.maps.*;
    import net.rim.device.api.lbs.maps.model.*;
    import net.rim.device.api.lbs.maps.ui.*;
    import net.rim.device.api.ui.*;
    import net.rim.device.api.ui.container.*;
  2. Cree el marco de la aplicación ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicación para recibir eventos. En el constructor de la aplicación, invoque pushScreen() para mostrar la pantalla personalizada para la aplicación. MapTagScreen, que se describe en el paso 3, representa la pantalla personalizada.
    public class MapTaggingDemo extends UiApplication
    {
        public static void main(String[] args)
        {
            MapTaggingDemo theApp = new MapTaggingDemo();
            theApp.enterEventDispatcher();
        }
        public MapTaggingDemo()
        {
            pushScreen(new MapTagScreen());
        }
    }
  3. Cree el marco de la pantalla personalizada ampliando la clase FullScreen. En el constructor, invoque super() para crear un menú predeterminado.
    class MapTagScreen extends FullScreen
    {
        public MapTagScreen() 
        {
            super(FullScreen.DEFAULT_CLOSE | FullScreen.DEFAULT_MENU | 
                    FullScreen.VERTICAL_SCROLL | FullScreen.VERTICAL_SCROLLBAR);
  4. En el constructor de pantalla, invoque MapFactory.getInstance() para crear una instancia de la clase MapFactory y, a continuación, invoque generateRichMapField() para generar el campo de mapa. Invoque RichMapField para agregar la instancia add() a la pantalla.
    RichMapField map = MapFactory.getInstance().generateRichMapField();
    add(map);
  5. Invoque getModel() para crear una instancia de la clase MapDataModel.
    MapDataModel data = map.getModel();
  6. Cree las instancias de la clase MapLocation para definir las ubicaciones. Pase la latitud, la longitud, la etiqueta y la descripción de cada ubicación a los objetos MapLocation.
    MapLocation julieHome = new MapLocation( 43.47751, -80.54817, 
            "Julie - Home", null );
    MapLocation headOffice = new MapLocation( 43.47550, -80.53900, 
            "Head Office", null );
  7. Cree un identificador de número entero para representar un elemento asignable. Asigne el elemento asignable al identificador invocando add() para agregar una ubicación y pasar uno de los objetos MapLocation y una etiqueta para la ubicación a MapDataModel. Puede utilizar el identificador para acceder al elemento en MapDataModel y asignar otra etiqueta a un elemento asignable invocando tag() y pasando como argumentos el identificador y la etiqueta. En el siguiente ejemplo de código, se han agregado dos ubicaciones a MapDataModel y a cada ubicación se le han asignado dos etiquetas.
    int julieHomeId = data.add( (Mappable) julieHome, "julie" );
    data.tag( julieHomeId, "home" );
    int headOfficeId = data.add( (Mappable) headOffice, "julie" );
    data.tag( headOfficeId, "work" );
  8. Defina dos ubicaciones más e invoque add() para agregar las ubicaciones a MapDataModel. Invoque tag() para asignar las etiquetas adecuadas a las ubicaciones.
    MapLocation paulHome = new MapLocation( 43.49487, -80.55335, 
            "Paul - Home", null );
    int paulHomeId = data.add( (Mappable) paulHome, "paul" );
    data.tag( paulHomeId, "home" );
    data.tag( headOfficeId, "paul" );
    data.tag( paulHomeId, "sarah" );
    MapLocation manufacturing = new MapLocation( 43.46514, -80.50506, 
            "Manufacturing", null );
    int manufacturingId = data.add( (Mappable) manufacturing, "sarah" );
    data.tag( manufacturingId, "work" );
  9. Active la visibilidad para las ubicaciones que tienen la etiqueta "trabajo". De forma predeterminada, todas las ubicaciones estarán visibles en el mapa. Invoque setVisibleNone() para desactivar la visibilidad de todas las ubicaciones. Invoque setVisible() y pase la etiqueta "trabajo" como argumento para especificar que sólo las ubicaciones con la etiqueta "trabajo" están visibles en el mapa.
    data.setVisibleNone();
    data.setVisible( "work" );
  10. Invoque getMapField().update() para actualizar la vista de mapa. Pase el valor booleano true al método update para calcular de nuevo el centro y el nivel de zoom del mapa con las ubicaciones visibles en el mapa.
    map.getMapField().update(true);

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