`
lyunabc
  • 浏览: 553755 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

Java ME引路蜂地图开发示例:第一个地图应用

 
阅读更多

下面的代码显示中国南京地图

//------------------------------------------------------------------------------
//                         COPYRIGHT 2011 GUIDEBEE
//                           ALL RIGHTS RESERVED.
//                     GUIDEBEE CONFIDENTIAL PROPRIETARY
///////////////////////////////////// REVISIONS ////////////////////////////////
// Date       Name                 Tracking #         Description
// ---------  -------------------  ----------         --------------------------
// 28JAN2011  James Shen                              Initial Creation
////////////////////////////////////////////////////////////////////////////////
//--------------------------------- PACKAGE ------------------------------------
package com.pstreets.gisengine.demo.midp;
 
//--------------------------------- IMPORTS ------------------------------------
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Display;
 
import com.mapdigit.gis.MapLayer;
import com.mapdigit.gis.drawing.IGraphics;
import com.mapdigit.gis.drawing.IImage;
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.raster.IMapDrawingListener;
import com.mapdigit.gis.raster.IReaderListener;
import com.mapdigit.gis.raster.MapTileDownloadManager;
import com.mapdigit.gis.raster.MapType;
import com.mapdigit.gis.raster.RasterMap;
 
import com.mapdigit.licence.LicenceManager;
import com.pstreets.gisengine.demo.midp.drawing.MIDPGraphicsFactory;
 
//[------------------------------ MAIN CLASS ----------------------------------]
/**
 * Hello China demo.
 * <hr><b>© Copyright 2011 Guidebee, Inc. All Rights Reserved.</b>
 * @version     1.00, 28/01/11
 * @author      Guidebee Pty Ltd.
 */
public class HelloChina extends MIDlet implements IReaderListener,
        IMapDrawingListener {
 
    protected RasterMap map;
    protected MapTileDownloadManager mapTileDownloadManager;
    protected IImage mapImage;
    protected IGraphics mapGraphics;
    protected MapCanvas canvas;
 
    public HelloChina() {
        try {
            LicenceManager licenceManager = LicenceManager.getInstance();
            long keys[] = {0x34ba283b8daeb659L, -0x53c811f9da86e998L,
                -0x34ba25c3c581521eL, 0xf15df9fc7e45628L, 0x6a4ece44296c0287L,
                0x4ab0cff532902b1cL,};
            licenceManager.addLicence("GuidebeeMap_JavaME", keys);
        } catch (Exception ex) {
        }
 
    }
 
    public void startApp() {
        canvas = new MapCanvas();
        //set the graphics factory
        MapLayer.setAbstractGraphicsFactory(MIDPGraphicsFactory.getInstance());
        mapImage = MapLayer.getAbstractGraphicsFactory()
                .createImage(canvas.getWidth(),
                canvas.getHeight());
        mapGraphics = mapImage.getGraphics();
        //Create the Digital Map objects.
        mapTileDownloadManager = new MapTileDownloadManager(this);
        try {
            map = new RasterMap(1024, 1024, mapTileDownloadManager);
        } catch (Exception ex) {
        }
        map.setScreenSize(canvas.getWidth(),
                canvas.getHeight());
        mapTileDownloadManager.start();
        map.setMapDrawingListener(this);
        GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
        map.setCenter(center, 13, MapType.GOOGLECHINA);
        Display.getDisplay(this).setCurrent(canvas);
    }
 
    public void pauseApp() {
    }
 
    public void destroyApp(boolean unconditional) {
        mapTileDownloadManager.stop();
    }
 
    public void readProgress(int downloaded, int total) {
        System.out.println(downloaded + "/" + total);
    }
 
    public void done() {
        if (canvas != null) {
            canvas.repaint();
        }
    }
 
    /**
     * Map canvas class, a subclass of Canvas.
     */
    protected class MapCanvas extends Canvas {
 
        private void panMap(float x, float y) {
            float dx = x - oldX;
            float dy = y - oldY;
            if (!(dx == 0 && dy == 0)) {
                map.panDirection((int) dx, (int) dy);
            }
 
        }
        boolean isPan = false;
        private float oldX = -1;
        private float oldY = -1;
 
        protected void paint(Graphics g) {
            map.paint(mapGraphics);
            g.drawImage((Image) mapImage.getNativeImage(), 0, 0, 0);
        }
 
        public void pointerDragged(int x, int y) {
            if (isPan) {
                panMap(x, y);
                oldX = x;
                oldY = y;
            }
        }
 
        public void pointerPressed(int x, int y) {
            oldX = x;
            oldY = y;
            isPan = true;
        }
 
        public void pointerReleased(int x, int y) {
            oldX = x;
            oldY = y;
            isPan = false;
        }
    }
}


  1. 首先是设置使用许可(Licence),设置使用许可由二部分组成,一个是将licence文件(guidebee.lic)放在合适的目录下,然后在程序中输入正确的注册码。Ln 51-55
  2. 前文说过,引路蜂地图开发包不直接调用图形相关方法,而是定义了一些接口函数,在使用时,需实现这些平台相关的方法。例如在 Java ME平台,MIDPFont, MIDPGraphics,MIDPGraphicsFactory,MIDPImage 实现了这些接口方法,在调用任务地图相关方法,需要告诉地图如何调用这些方法。MapLayer.setAbstractGraphicsFactory(MIDPGraphicsFactory.getInstance());则是用来设置平台相关GraphicsFactory实现。Ln 64-67
  3. 创建MapTileDownloaderManager 实例,MapTileDownloaderManager是用来管理工作线程以下载地图图片或是从本地地图包中读取地图图片。之后创建RasterMap 地图实例,RasterMap使用MapTileDownloaderManager来获取地图图片。Ln 70-Ln74
  4. MapTileDownloaderManager.Start 启动工作线程。注意在程序结束时,需调用Stop 方法来停止这些工作线程,如(6) Ln 77
  5. 设置地图中心点,这里设置是南京的经纬度坐标。地图类型选择是Google中国地图,地图包中定义了多达20多种不同的地图可供选择。地图缩放级别为13级。1级最小,17级最大。 Ln 79 -80
  6. 程序结束时,需调用Stop 方法来停止工作线程。 Ln 88
  7. panDirection(dx,dy)用来平移地图,将在后面介绍。 Ln 110
  8. 在屏幕上显示地图。在这个应用中 MapCanvas 最终用来在屏幕上显示地图,每个程序都有一个UI界面,地图最终总是要在屏幕上显示的。这两行代码是将地图复制到屏幕上。 Ln 119 -120
  9. 地图下载采取异步工作方式,也就是地图图片的读取是通过工作线程在后台工作,应用可以监视读取图片的进度readProgress,每张地图图片下载完毕时,会使用消息Done通知应用,在Done消息处理中一般用来更新屏幕显示。Ln 91 -99

在后面的示例中,一些共同的代码不再重复,将设计一个基类MapDemoMIDP,创建地图,设置使用许可等代码都放在基类中.

//------------------------------------------------------------------------------
//                         COPYRIGHT 2010 GUIDEBEE
//                           ALL RIGHTS RESERVED.
//                     GUIDEBEE CONFIDENTIAL PROPRIETARY
///////////////////////////////////// REVISIONS ////////////////////////////////
// Date       Name                 Tracking #         Description
// ---------  -------------------  ----------         --------------------------
// 28JAN2011  James Shen                              Initial Creation
////////////////////////////////////////////////////////////////////////////////
//--------------------------------- PACKAGE ------------------------------------
package com.pstreets.gisengine.demo;
 
//--------------------------------- IMPORTS ------------------------------------
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
 
import com.mapdigit.gis.MapLayer;
import com.mapdigit.gis.drawing.IGraphics;
import com.mapdigit.gis.drawing.IImage;
import com.mapdigit.gis.raster.IMapDrawingListener;
import com.mapdigit.gis.raster.IReaderListener;
import com.mapdigit.gis.raster.MapTileDownloadManager;
import com.mapdigit.gis.raster.MapType;
import com.mapdigit.gis.raster.RasterMap;
import com.mapdigit.licence.LicenceManager;
 
import com.pstreets.gisengine.demo.midp.drawing.MIDPGraphicsFactory;
 
//[------------------------------ MAIN CLASS ----------------------------------]
//--------------------------------- REVISIONS ----------------------------------
// Date       Name                 Tracking #         Description
// --------   -------------------  -------------      --------------------------
// 28JAN2011  James Shen                              Initial Creation
////////////////////////////////////////////////////////////////////////////////
/**
 * Base class for all Map Demos.
 * <hr><b>© Copyright 2010 Guidebee, Inc. All Rights Reserved.</b>
 * @version     1.00, 18/09/10
 * @author      Guidebee Pty Ltd.
 */
public abstract class MapDemoMIDP extends MIDlet implements IReaderListener,
        IMapDrawingListener {
 
    protected RasterMap map;
    protected MapTileDownloadManager mapTileDownloadManager;
    protected IImage mapImage;
    protected IGraphics mapGraphics;
    protected MapCanvas canvas;
 
    public MapDemoMIDP() {
        try {
            LicenceManager licenceManager = LicenceManager.getInstance();
            long keys[] = {0x34ba283b8daeb659L, -0x53c811f9da86e998L,
            -0x34ba25c3c581521eL, 0xf15df9fc7e45628L, 0x6a4ece44296c0287L,
            0x4ab0cff532902b1cL,};
            licenceManager.addLicence("GuidebeeMap_JavaME", keys);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
 
    }
 
    /**
     * this only used for the vector map demo.
     */
    public void initCanvas() {
        canvas = new MapCanvas();
    }
 
    public void init() {
        canvas = new MapCanvas();
        //set the graphics factory
        MapLayer.setAbstractGraphicsFactory(MIDPGraphicsFactory.getInstance());
        mapImage = MapLayer.getAbstractGraphicsFactory()
                .createImage(canvas.getWidth(),
                canvas.getHeight());
        mapGraphics = mapImage.getGraphics();
        //Create the Digital Map objects.
        mapTileDownloadManager = new MapTileDownloadManager(this);
        MapType.updateMapTileUrl();
        map = new RasterMap(1024, 1024, mapTileDownloadManager);
        map.setScreenSize(canvas.getWidth(),
                canvas.getHeight());
        mapTileDownloadManager.start();
        map.setMapDrawingListener(this);
 
    }
 
    public void pauseApp() {
    }
 
    public void destroyApp(boolean unconditional) {
        mapTileDownloadManager.stop();
    }
 
    public void readProgress(int arg0, int arg1) {
        System.out.println(arg0 + "/" + arg1);
    }
 
    public void done() {
        if (canvas != null) {
            canvas.repaint();
        }
    }
 
    /**
     * Map canvas class, a subclass of Canvas.
     */
    protected class MapCanvas extends Canvas {
 
        private void panMap(float x, float y) {
            float dx = x - oldX;
            float dy = y - oldY;
            if (!(dx == 0 && dy == 0)) {
                map.panDirection((int) dx, (int) dy);
            }
 
        }
        boolean isPan = false;
        private float oldX = -1;
        private float oldY = -1;
 
        protected void paint(Graphics g) {
            map.paint(mapGraphics);
            g.drawImage((Image) mapImage.getNativeImage(), 0, 0, 0);
        }
 
        public void pointerDragged(int x, int y) {
            if (isPan) {
                panMap(x, y);
                oldX = x;
                oldY = y;
            }
        }
 
        public void pointerPressed(int x, int y) {
            oldX = x;
            oldY = y;
            isPan = true;
        }
 
        public void pointerReleased(int x, int y) {
            oldX = x;
            oldY = y;
            isPan = false;
        }
    }
}


分享到:
评论

相关推荐

    引路蜂地图开发包2.0 (Java ME版)

    引路蜂地图开发包2.0(Java 平台)包含了 开发库 JavaDoc 示例代码 详细请参见 http://blog.csdn.net/guidebee/archive/2010/09/19/5895245.aspx

    引路蜂地图开发包2.0 (Windows Mobile版)

    "引路蜂地图开发包2.0 (Windows Mobile版)"是一个专为Windows Mobile平台设计的电子地图开发工具,旨在帮助开发者快速构建地图应用。这个开发包包含了几个关键组件,以便于开发者集成地图功能到他们的应用程序中。...

    引路蜂地图开发包2.0 (Java SE 版)

    引路蜂地图开发包2.0 包含了 开发库 JavaDoc 示例代码 详细请参见 http://blog.csdn.net/guidebee/archive/2010/09/19/5895245.aspx

    引路蜂地图开发包2.0(Mono GTK 版)

    引路蜂地图开发包2.0 包含了 Mono GTK 可用于Linux/Unix/Mac OS/Windows 应用开发 开发库 帮助 示例代码 试用版带水印。 详细请参见 http://blog.csdn.net/guidebee

    引路蜂地图开发包2.0 (Android 版)

    引路蜂地图开发包2.0 包含了 开发库 JavaDoc 示例代码 详细请参见 http://blog.csdn.net/guidebee/archive/2010/09/19/5895245.aspx

    引路蜂地图开发包2.0 (Blackberry版)

    引路蜂地图开发包2.0 包含了 开发库 JavaDoc 示例代码 详细请参见 http://blog.csdn.net/guidebee/archive/2010/09/19/5895245.aspx

    引路蜂离线地图、可视化地形图

    提供引路蜂离线地图工具,提供离线地图数据的导出,并且针对离线地图、可视化地图如何使用,提供源码可供参考。 同时针对内部包含地形图的图号处理、坐标定位、经纬度转换定位等功能;包含工程文件: MapDigit、...

    引路蜂地图开发包2.0 (.Net Desktop 版)

    引路蜂地图开发包2.0 包含了 开发库 帮助 示例代码 试用版带水印。 详细请参见 http://blog.csdn.net/guidebee/archive/2010/09/19/5895245.aspx

    引路蜂移动软件->OpenGL ES 开发教程

    引路蜂移动软件-&gt;OpenGL ES 开发教程的代码

    毕业论文基于JAVA的无线人员定位管理软件的设计说明.doc

    引路蜂地图开发包是一个地图服务集成工具,用于实现软件的定位功能。它可以接入多种地图服务,如Google Maps、百度地图等,获取实时位置信息。在本软件中,引路蜂地图开发包被用来追踪在押人员的位置,绘制路径,为...

    二年级语文下册 蜜蜂引路3教案 鲁教版 教案.doc

    1. 故事背景:《蜜蜂引路》是鲁教版二年级语文下册的一篇课文,讲述了列宁在莫斯科附近寻找养蜂人的故事。 2. 教学目标: - 学习汉字:学生需要学会8个新字,如“引”、“附”等,并能用它们组成词语。 - 造句...

    蜜蜂引路课件.ppt

    《蜜蜂引路》这篇课文讲述的是列宁利用蜜蜂引路的方式找到养蜂人的故事,从中我们可以学到关于蜜蜂习性及观察推理的知识。 首先,蜜蜂是自然界中的优秀导航者,它们在采集花粉和蜜源后,能够准确无误地返回蜂巢。这...

    《蜜蜂引路》课件.ppt

    很抱歉,根据您提供的信息,“《蜜蜂引路》课件.ppt”似乎是一个与小学语文教育相关的课件,特别是针对二年级下册的教学内容。然而,这个标题和描述并没有提供具体的IT知识要点。标签为空,部分内容提及的是七十四团...

    《蜜蜂引路》教材分析.docx

    《蜜蜂引路》:一篇寓教于乐的语文教材 在众多的语文教材中,《蜜蜂引路》以其独特的故事魅力和深刻的教育意义,成为了培养学生综合素质的精品教材。这篇课文通过讲述列宁观察蜜蜂采蜜规律从而找到养蜂人的故事,...

    六年级语文:蜜蜂引路(教学设计).pdf

    六年级语文:蜜蜂引路(教学设计).pdf

    26、蜜蜂引路.doc

    26、蜜蜂引路.doc

    蜜蜂引路教案.docx

    在语文教学中,通过《蜜蜂引路》这样的教案,不仅能够传授学生知识,还能启迪他们的智慧。该教案以一篇关于列宁利用蜜蜂找到养蜂人的故事为内容,不仅仅教授学生语文知识,还通过故事情节让学生们学习到列宁的观察力...

    《蜜蜂引路》作业设计.pdf

    《蜜蜂引路》这篇课文是小学语文教学中的一篇文章,主要讲述了列宁利用蜜蜂找到养蜂人的故事,寓含了观察、思考和解决问题的智慧。作业设计围绕着课文内容,旨在帮助学生深入理解和掌握相关知识。 一、预习部分: ...

    二年级语文下册 蜜蜂引路第一课时1说课稿 鲁教版 教案.doc

    《蜜蜂引路》是一篇富有教育意义的课文,它通过列宁观察蜜蜂的行为,成功找到养蜂人的故事,向孩子们传达了观察与思考的重要性。该文不仅情节简单明了,而且寓意深刻,符合二年级学生的认知水平和生活经验,非常适合...

    小学二年级下学期语文蜜蜂引路PPT教案.pptx

    这篇PPT教案主要围绕小学二年级下学期语文课文《蜜蜂引路》展开,旨在帮助学生理解和分析课文内容,培养他们的阅读理解与思考能力。课文讲述了列宁如何利用蜜蜂的习性找到养蜂人的故事,展现了列宁的细心观察和聪明...

Global site tag (gtag.js) - Google Analytics