Blackberry引路蜂地图开发示例:叠加自定义图层

在开发应用的过程中,常常需要在地图上需绘制一点自定义的兴趣点或是自定义的几何图形。引路蜂地图包中RasterMap最终提供的基实就是一张图片。

protected void paint(Graphics g) {             
    map.paint(mapGraphics);             
 g.drawImage((Image) mapImage.getNativeImage(), 0, 0, 0);         
 //start drawing your own sharps or images.             
 ... …  
}


所以一个简单的方法是绘制完地图后,你可以使用任何绘图方法在地图绘制任何自定义的图形或是图象。
这里需要注意的是坐标变换,RasterMap采用的是经纬度坐标,而屏幕显示采用的屏幕坐标,RasterMap提供了坐标转换的方法:fromScreenPixelToLatLng 坐屏幕坐标转换成地图经纬度坐标。fromLatLngToScreenPixel 从经纬度坐标转换成屏幕坐标。
下面给出的例子是采用派生MapLayer子类的方法,RasterMap是 MapLayerContainer的子类,可以用来管理多个地图层。这些图层从下到上相当于透明纸一层一层叠加形成最终显示的地图。
例子中显示几个自定义兴趣点,和一个三角形,并中地图中心显示十字标。

//--------------------------------- PACKAGE ------------------------------------ 
package com.pstreets.gisengine.demo.rim; 
  
//--------------------------------- IMPORTS ------------------------------------ 
import com.mapdigit.gis.MapLayer; 
import com.mapdigit.gis.drawing.IGraphics; 
import com.mapdigit.gis.geometry.GeoLatLng; 
import com.mapdigit.gis.geometry.GeoPoint; 
import com.mapdigit.gis.raster.MapType; 
import com.pstreets.gisengine.demo.MapDemoRIM; 
  
//[------------------------------ MAIN CLASS ----------------------------------] 
/** 
 * map overlay demo for Guidebee Map API on RIM platform. 
 * <hr><b>© Copyright 2011 Guidebee, Inc. All Rights Reserved.</b> 
 * @version     1.00, 06/02/11 
 * @author      Guidebee Pty Ltd. 
 */
public class MapOverlayRIM extends MapDemoRIM { 
  
    OverLayMapLayer mapLayer; 
    /** 
     * Entry point for application 
     * @param args Command line arguments (not used) 
     */
    public static void main(String[] args) 
    { 
        // Create a new instance of the application and make the currently 
        // running thread the application's event dispatch thread. 
        MapOverlayRIM theApp = new MapOverlayRIM(); 
        theApp.enterEventDispatcher(); 
    } 
  
    public MapOverlayRIM() { 
        init(); 
        pushScreen(canvas); 
        GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778); 
        map.setCenter(center, 10, MapType.GOOGLECHINA); 
        mapLayer = new OverLayMapLayer(canvas.getWidth(), 
                canvas.getHeight()); 
        map.addMapLayer(mapLayer); 
    } 
  
    class OverLayMapLayer extends MapLayer { 
  
        GeoLatLng pt1 = new GeoLatLng(32.345281, 118.84261); 
        GeoLatLng pt2 = new GeoLatLng(32.05899, 118.62789); 
        GeoLatLng pt3 = new GeoLatLng(32.011811, 118.798656); 
  
        public OverLayMapLayer(int width, int height) { 
            super(width, height); 
        } 
  
        public void paint(IGraphics graphics, int offsetX, int offsetY) { 
            drawCursor(graphics); 
            drawTriangle(graphics); 
            drawPoint(graphics, pt1); 
            drawPoint(graphics, pt2); 
            drawPoint(graphics, pt3); 
  
        } 
  
        public void drawTriangle(IGraphics g) { 
            GeoPoint ptOnScreen1 = map.fromLatLngToScreenPixel(pt1); 
            GeoPoint ptOnScreen2 = map.fromLatLngToScreenPixel(pt2); 
            GeoPoint ptOnScreen3 = map.fromLatLngToScreenPixel(pt3); 
            g.setColor(0x0000FF); 
  
            g.drawLine((int) ptOnScreen1.x, (int) ptOnScreen1.y, 
                    (int) ptOnScreen2.x, (int) ptOnScreen2.y); 
            g.drawLine((int) ptOnScreen2.x, (int) ptOnScreen2.y, 
                    (int) ptOnScreen3.x, (int) ptOnScreen3.y); 
            g.drawLine((int) ptOnScreen1.x, (int) ptOnScreen1.y, 
                    (int) ptOnScreen3.x, (int) ptOnScreen3.y); 
        } 
  
        public void drawPoint(IGraphics g, GeoLatLng pt) { 
            GeoPoint ptOnScreen = map.fromLatLngToScreenPixel(pt); 
            int x = (int) ptOnScreen.x; 
            int y = (int) ptOnScreen.y; 
            g.setColor(0x00FF00); 
            g.fillRect(x - 4, y - 4, 8, 8); 
  
        } 
  
        private void drawCursor(IGraphics g) { 
            int x =getMapWidth()/2; 
            int y =getMapHeight()/2 ; 
            g.setColor(0x205020); 
            g.drawRect(x - 4, y - 4, 8, 8); 
            g.drawLine(x, y - 6, x, y - 2); 
            g.drawLine(x, y + 6, x, y + 2); 
            g.drawLine(x - 6, y, x - 2, y); 
            g.drawLine(x + 6, y, x + 2, y); 
        } 
    } 
  
}


Blackberry引路蜂地图开发包Ver2.1下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值