Marcar e configurar a visibilidade para localizações em um mapa

As etapas a seguir descrevem como atribuir tags a itens mapeados que são armazenados em uma classe MapDataModel. A visibilidade é configurada para exibir localizações que tenham a tag "work". O mapa resultante do aplicativo é mostrado na seguinte imagem:

  1. Importe as classes e interfaces necessárias.
    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. Crie a estrutura do aplicativo estendendo a classe UiApplication. Em main(), crie uma instância da nova classe e invoque enterEventDispatcher() para habilitar o aplicativo para receber eventos. No construtor de aplicativo, invoque pushScreen() para exibir a tela personalizada do aplicativo. O MapTagScreen, que é descrito na etapa 3, representa a tela personalizada.
    public class MapTaggingDemo extends UiApplication
    {
        public static void main(String[] args)
        {
            MapTaggingDemo theApp = new MapTaggingDemo();
            theApp.enterEventDispatcher();
        }
        public MapTaggingDemo()
        {
            pushScreen(new MapTagScreen());
        }
    }
  3. Crie a estrutura da tela personalizada estendendo a classe FullScreen. No construtor, invoque super() para criar um menu padrão.
    class MapTagScreen extends FullScreen
    {
        public MapTagScreen() 
        {
            super(FullScreen.DEFAULT_CLOSE | FullScreen.DEFAULT_MENU | 
                    FullScreen.VERTICAL_SCROLL | FullScreen.VERTICAL_SCROLLBAR);
  4. No construtor de tela, chame MapFactory.getInstance() para criar uma instância da classe MapFactory, e em seguida chame generateRichMapField() para gerar o campo de mapa. Invoque add() para adicionar a instância RichMapField à tela.
    RichMapField map = MapFactory.getInstance().generateRichMapField();
    add(map);
  5. Invoque getModel() para criar uma instância da classe MapDataModel.
    MapDataModel data = map.getModel();
  6. Crie instâncias da classe MapLocation para definir as localizações. Passe a latitude, longitude, rótulo e descrição de cada localização aos 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. Crie um identificador de número inteiro para representar um item mapeável. Atribua o item mapeável ao identificador invocando add() para adicionar uma localização e forneça um dos objetos MapLocation e uma tag da localização para MapDataModel. Você pode usar o identificador para acessar o item em MapDataModel e atribuir outra tag a um item mapeável invocando tag() e fornecendo como argumento o identificador e a tag. Na amostra de código a seguir, duas localizações são adicionadas a MapDataModel e para cada localização são atribuídas duas tags.
    int julieHomeId = data.add( (Mappable) julieHome, "julie" );
    data.tag( julieHomeId, "home" );
    int headOfficeId = data.add( (Mappable) headOffice, "julie" );
    data.tag( headOfficeId, "work" );
  8. Defina mais duas localizações e invoque add() para adicionar as localizações a MapDataModel. Invoque tag() para atribuir as tags apropriadas às localizações.
    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. Ative a visibilidade para as localizações que têm a tag "work". Por padrão, todas as localizações são visíveis no mapa. Invoque setVisibleNone() para desativar a visibilidade de todas as localizações. Invoque setVisible() e forneça a tag "trabalho" como argumento para especificar que somente as localizações com a tag "trabalho" estão visíveis no mapa.
    data.setVisibleNone();
    data.setVisible( "work" );
  10. Invoque getMapField().update() para atualizar a visualização do mapa. Passe o valor Booleano true ao método update para recalcular o centro e o zoom do mapa com as localizações visíveis no mapa.
    map.getMapField().update(true);

Estas informações foram úteis? Gostaríamos de receber seus comentários.