当前位置:  编程技术>移动开发
本页文章导读:
    ▪LWUIT引路蜂map开发示例:叠加自定义图层        LWUIT引路蜂地图开发示例:叠加自定义图层在开发应用的过程中,常常需要在地图上需绘制一点自定义的兴趣点或是自定义的几何图形。引路蜂地图包中RasterMap最终提供的基实就是一张图片 pr.........
    ▪ LWUIT引路蜂map开发示例:选择map服务        LWUIT引路蜂地图开发示例:选择地图服务引路蜂地图服务缺省使用Google地图服务,但你也可以选择其它地图服务,比方说当Google服务离线时,您可以选择MapAbc的地图服务,另外要注意的是中国.........
    ▪ LWUIT引路蜂map开发示例:地址反编码       LWUIT引路蜂地图开发示例:地址反编码地址反编码是通过经纬度查询对应的地名,下面示例是查询经纬度为118.777802, 32.061699对应的地名,结果为”中国江苏省南京市鼓楼区渊声巷41号”。 pack.........

[1]LWUIT引路蜂map开发示例:叠加自定义图层
    来源: 互联网  发布时间: 2014-02-18
LWUIT引路蜂地图开发示例:叠加自定义图层

在开发应用的过程中,常常需要在地图上需绘制一点自定义的兴趣点或是自定义的几何图形。引路蜂地图包中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 com.pstreets.gisengine.demo.lwuit;
 
//--------------------------------- 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.MapDemoLWUIT;
 
public class MapOverlayLWUIT extends MapDemoLWUIT {
 
    OverLayMapLayer mapLayer;
    
    public void startApp() {
        init();
        canvas.setTitle("Map Overlay");
       
        GeoLatLng center = new  GeoLatLng(32.0616667, 118.7777778);
        map.setCenter(center, 9, MapType.MICROSOFTCHINA);
        mapLayer = new OverLayMapLayer(canvas.getWidth(),
                canvas.getHeight());
        map.addMapLayer(mapLayer);
        canvas.show();
    }
 
    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) {
            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);
 
        }
 
       
    }
}

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


 


 

 


    
[2] LWUIT引路蜂map开发示例:选择map服务
    来源: 互联网  发布时间: 2014-02-18
LWUIT引路蜂地图开发示例:选择地图服务

引路蜂地图服务缺省使用Google地图服务,但你也可以选择其它地图服务,比方说当Google服务离线时,您可以选择MapAbc的地图服务,另外要注意的是中国地图是有偏移的。如果想使用无偏移的中国地图,一是采用地图偏移校正算法,另外一个是使用CloudMade地图服务。
所前所述,引路蜂地图开发包在设计时将地图图片显示和地图服务两部分设计成相对独立的两部分,Google中国地图图片,Bing中国地图图片,MapAbc中国地图图片是有偏移的地图图片,CloudMade(OpenStreet)中国地图图片是无偏移的。而Google中国地图服务,MapAbc中国地图服务是有偏移,CloudMade地图服务是无偏移的。所以在选择地图类型和地图服务类型时,要么都选择有偏移,要么都选择无偏移。否则地图在显示路径时或地址时就不匹配。

下面列表是合法的组合:

地图类型 (MapType) 地图服务类型 (DigitalMapService) GOOGLECHINA GOOGLE_MAP_SERVICE MICROSOFTCHINA GOOGLE_MAP_SERVICE MAPABCCHINA GOOGLE_MAP_SERVICE OPENSTREETMAP CLOUDMADE_MAP_SERVICE GOOGLECHINA MAPABC_MAP_SERVICE MICROSOFTCHINA MAPABC_MAP_SERVICE MAPABCCHINA MAPABC_MAP_SERVICE

下述示列地图类型使用MICROSOFTCHINA,而使用不同的地图服务时路径查询的情况。(南京到天津的路径)

//--------------------------------- PACKAGE ------------------------------------
package com.pstreets.gisengine.demo.lwuit;
 
//--------------------------------- IMPORTS ------------------------------------
 
import com.mapdigit.gis.MapDirection;
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.raster.MapType;
import com.mapdigit.gis.service.DigitalMapService;
import com.mapdigit.gis.service.IRoutingListener;
import com.pstreets.gisengine.demo.MapDemoLWUIT;
import com.sun.lwuit.Command;
import com.sun.lwuit.events.ActionEvent;
 
public class MapServiceTypeLWUIT extends MapDemoLWUIT
        implements IRoutingListener{
 
    private Command mapGetDirectionCommand;
 
    public void startApp() {
        init();
        canvas.setTitle("Map Service Type");
        
        map.setCurrentMapService(DigitalMapService.GOOGLE_MAP_SERVICE);
        //map.setCurrentMapService(DigitalMapService.MAPABC_MAP_SERVICE);
        //map.setCurrentMapService(DigitalMapService.CLOUDMADE_MAP_SERVICE);
        mapGetDirectionCommand=new Command("Get Direction"){
            public void actionPerformed(ActionEvent evt) {
               GeoLatLng latLng1=new GeoLatLng(32.0418381,118.7788905);
               GeoLatLng latLng2=new GeoLatLng(39.11643,117.180908);
               map.getDirections(new GeoLatLng[]{latLng1,latLng2});
 
            }
        };
        canvas.addCommand(mapGetDirectionCommand);
        GeoLatLng center =  new GeoLatLng(32.0616667, 118.7777778);
        map.setCenter(center, 13, MapType.MICROSOFTCHINA);
        map.setRoutingListener(this);
        canvas.show();
    }
 
    public void done(String query, MapDirection result) {
        if(result!=null){
            map.setMapDirection(result);
            map.resize(result.getBound());
            map.setZoom(3);
        }
    }
}


上图分别为三种地图服务返回的路径,Google 地图服务和MapAbc地图服务返回的结果基本相同,实际上Google 地图服务在中国的地图是来自于MapAbc。而CloudMade地图返回的结果似乎偏移了道路。这是因为Bing 中国地图是被偏移过的,而CloudMade返回的无偏移的结果。Google 地图服务和MapAbc地图服务返回的结果也是偏移过的,所以和偏移过的地图很“匹配”。

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


 


    
[3] LWUIT引路蜂map开发示例:地址反编码
    来源: 互联网  发布时间: 2014-02-18
LWUIT引路蜂地图开发示例:地址反编码

地址反编码是通过经纬度查询对应的地名,下面示例是查询经纬度为118.777802, 32.061699对应的地名,结果为”中国江苏省南京市鼓楼区渊声巷41号”。

package com.pstreets.gisengine.demo.lwuit;
 
//--------------------------------- IMPORTS ------------------------------------
 
import com.mapdigit.gis.MapPoint;
 
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.raster.MapType;
import com.mapdigit.gis.service.IReverseGeocodingListener;
import com.pstreets.gisengine.demo.MapDemoLWUIT;
import com.sun.lwuit.Command;
import com.sun.lwuit.events.ActionEvent;
 
public class MapReverseGeocodingLWUIT extends MapDemoLWUIT
        implements IReverseGeocodingListener{
 
    private Command mapFindAddressCommand;
 
    public void startApp() {
        init();
        canvas.setTitle("Map Reverse Geocoding");
 
        mapFindAddressCommand=new Command("Find Address"){
            public void actionPerformed(ActionEvent evt) {
                 map.getReverseLocations("32.061699,118.777802");
 
            }
        };
        canvas.addCommand(mapFindAddressCommand);
        GeoLatLng center =  new GeoLatLng(32.0616667, 118.7777778);
        map.setCenter(center, 13, MapType.MICROSOFTCHINA);
         map.setReverseGeocodingListener(this);
 
        canvas.show();
    }
 
    public void done(String arg0, MapPoint[] result) {
        if (result != null) {
            map.panTo(result[0].getPoint());
        }
    }
}


注意使用字符串经纬度格式时,纬度在前,经度在后,如果反了,则返回的地名或能为空或都跑到外国去了。结果也是一个数组,一般到第一个结果,后面结果是更大的区域或是距离相对较远的地名。

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


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3