지도상 위치에 대한 태그 지정 및 가시성 설정

다음 절차는 MapDataModel 클래스에 저장된 지도에 표시 가능한 항목에 태그를 할당하는 방법을 설명합니다. 가시성은 "work" 태그가 있는 위치를 표시하도록 설정됩니다. 프로그램에서 표시되는 지도는 아래 이미지에 나와 있습니다.

  1. 필요한 클래스와 인터페이스를 가져옵니다.
    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. UiApplication 클래스를 확장하여 프로그램 구조를 만듭니다. main()에서 새 클래스의 인스턴스를 만들고 enterEventDispatcher()를 호출하여 프로그램이 이벤트를 수신할 수 있도록 합니다. 프로그램 생성자에서 pushScreen()을 호출하여 프로그램의 사용자 정의 화면을 표시합니다. 3단계에서 설명하는 MapTagScreen은 사용자 정의 화면을 나타냅니다.
    public class MapTaggingDemo extends UiApplication
    {
        public static void main(String[] args)
        {
            MapTaggingDemo theApp = new MapTaggingDemo();
            theApp.enterEventDispatcher();
        }
        public MapTaggingDemo()
        {
            pushScreen(new MapTagScreen());
        }
    }
  3. FullScreen 클래스를 확장하여 사용자 정의 화면의 구조를 만듭니다. 생성자에서 super()를 호출하여 기본 메뉴를 만듭니다.
    class MapTagScreen extends FullScreen
    {
        public MapTagScreen() 
        {
            super(FullScreen.DEFAULT_CLOSE | FullScreen.DEFAULT_MENU | 
                    FullScreen.VERTICAL_SCROLL | FullScreen.VERTICAL_SCROLLBAR);
  4. 화면 생성자에서 MapFactory.getInstance()를 호출하여 MapFactory 클래스의 인스턴스를 만든 후 generateRichMapField()를 호출하여 지도 필드를 생성합니다. add()를 호출하여 RichMapField인스턴스를 화면에 추가합니다.
    RichMapField map = MapFactory.getInstance().generateRichMapField();
    add(map);
  5. getModel()을 호출하여 MapDataModel 클래스의 인스턴스를 만듭니다.
    MapDataModel data = map.getModel();
  6. 위치를 정의할 MapLocation 클래스의 인스턴스를 만듭니다. 각 위치의 위도, 경도, 레이블 및 설명을 MapLocation 객체에 전달합니다.
    MapLocation julieHome = new MapLocation( 43.47751, -80.54817, 
            "Julie - Home", null );
    MapLocation headOffice = new MapLocation( 43.47550, -80.53900, 
            "Head Office", null );
  7. 지도에 표시 가능한 항목을 나타내는 integer 식별자를 만듭니다. add()를 호출해 위치를 추가하고 MapLocation 객체 중 하나와 MapDataModel 위치에 대한 태그를 전달하여 지도에 표시 가능한 항목을 식별자에 할당합니다. 식별자는 MapDataModel의 항목을 액세스하는 데 사용할 수 있으며, tag()를 호출하여 식별자와 태그를 인수로 전달하면 지도에 표시 가능한 항목에 또 다른 태그를 추가할 수 있습니다. 다음 코드 샘플에서는 두 위치가 MapDataModel에 추가되고, 각 위치에는 두 개의 태그가 할당됩니다.
    int julieHomeId = data.add( (Mappable) julieHome, "julie" );
    data.tag( julieHomeId, "home" );
    int headOfficeId = data.add( (Mappable) headOffice, "julie" );
    data.tag( headOfficeId, "work" );
  8. 두 위치를 더 정의하고 add()를 호출하여 위치를 MapDataModel에 추가합니다. tag()를 호출하여 해당 위치에 적절한 태그를 할당합니다.
    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. "work" 태그를 할당한 위치가 표시되도록 합니다. 기본적으로 지도에서는 모든 위치가 표시됩니다. setVisibleNone()을 호출하여 모든 위치가 표시되지 않도록 합니다. setVisible()을 호출하고 "work" 태그를 인수로 전달하여 "work" 태그가 있는 위치만 지도에 표시되도록 합니다.
    data.setVisibleNone();
    data.setVisible( "work" );
  10. getMapField().update()를 호출하여 지도 보기를 업데이트합니다. Boolean 값 trueupdate 메소드에 전달하여 지도에 표시되는 위치를 기반으로 지도의 중심 및 확대/축소 수준을 다시 계산합니다.
    map.getMapField().update(true);

이 정보가 도움이 되었습니까? 의견을 보내 주십시오.