`
zou_12345
  • 浏览: 8836 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

J2ME google map实现

    博客分类:
  • j2me
阅读更多






代码如下:





package com.j2me.google;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/**
* @author funny
*
* 用以下URL求城市的经纬度,把经纬度放入函数retrieveStaticImage运算
* http://maps.google.com/maps/geo?q=shanghai&output=csv&key=ABQIAAAAxXXppGwQikP5W03kMkXwTBRwZeWwBJuDeBDs7Xe14alLLfNA1RSipLkOi1Os9IQgWszFCqI6nbQUwA
*
* 用以下URL输出城市地图
* http://maps.google.com/staticmap?center=31.2243531,121.4759159&format=png32&zoom=8&size=320x240&key=ABQIAAAAxXXppGwQikP5W03kMkXwTBRwZeWwBJuDeBDs7Xe14alLLfNA1RSipLkOi1Os9IQgWszFCqI6nbQUwA
*/
public class MyGCanvas extends Canvas{
private GoogleMaps gMap=null;
private String apiKey="ABQIAAAAxXXppGwQikP5W03kMkXwTBRwZeWwBJuDeBDs7Xe14alLLfNA1RSipLkOi1Os9IQgWszFCqI6nbQUwA";
//常州的经纬度
private double lng=31.7558405;
private double lat=119.9392140;
//放大的倍数
private int zoom=12;
//调整位置的经纬度
double[] cs;
public MyGCanvas()
{
  gMap=new GoogleMaps(apiKey);
  cs=new double[]{lng,lat};
}
protected void paint(Graphics g) {
  try {
   Image image=gMap.retrieveStaticImage(this.getWidth(),this.getHeight(), lng,lat, zoom, "jpg");
   g.drawImage(image,0,0,g.TOP|g.LEFT);
  } catch (Exception e) {
   //e.printStackTrace();
  }
}
protected void keyPressed(int keycode) {
  /*System.out.println(keycode);
  flag=true;*/
  //switch (this.getGameAction(keycode)) {
  String actionName=this.getKeyName(keycode);
  int action=this.getGameAction(keycode);
  if(action==Canvas.UP){
   lat=MapUtil.adjust(lat, lng, 0, -30, zoom)[0];
   lng=MapUtil.adjust(lat, lng, 0, -30, zoom)[1];
  }
  else if(action==Canvas.DOWN){
   lat=MapUtil.adjust(lat, lng, 0, 30, zoom)[0];
   lng=MapUtil.adjust(lat, lng, 0, 30, zoom)[1];
  }
  else if(action==Canvas.LEFT){
   lat=MapUtil.adjust(lat, lng, -30, 0, zoom)[0];
   lng=MapUtil.adjust(lat, lng, -30, 0, zoom)[1];
  }
  else if(action==Canvas.RIGHT){
   lat=MapUtil.adjust(lat, lng, 30, 0, zoom)[0];
   lng=MapUtil.adjust(lat, lng, 30, 0, zoom)[1];
  }
  else if(actionName.equals("1")){
   if(zoom<17)
    zoom++;
  }
  else if(actionName.equals("3")){
   if(zoom>1)
    zoom--;
  }
  //lat=cs[0];
  //lng=cs[1];
  //cs=MapUtil.adjust(lat, lng, 30, 0, zoom--);
  repaint();
}
}






package com.j2me.google;

import net.dclausen.microfloat.MicroDouble;

public class MapUtil {
private static int offset = 268435456;
private static double radius = offset / Math.PI;
/**
  * Utility method for map scrolling
  * If you need to scroll your map, you'll need to calculate a new center for your static image. The following adjust() method will return the new map center latitude and longitude, accepting the following arguments:
  * the current center latitute and longitude coordinates the deltaX and deltaY, in pixels, of new map center
  * the map zoom level
  * @param lat
  * @param lng
  * @param deltaX
  * @param deltaY
  * @param z  zoom level
  * @return
  */
public static double[] adjust(double lat, double lng, int deltaX, int deltaY, int z)
{
  return new double[]{
   XToL(LToX(lat) + (deltaX<<(21-z))),
   YToL(LToY(lng) + (deltaY<<(21-z)))
  };
}
private static double LToX(double x)
{
  return round(offset + radius * x * Math.PI / 180);
}
 
private static double LToY(double y)
{
  return round(
   offset - radius *
   Double.longBitsToDouble(MicroDouble.log(
    Double.doubleToLongBits(
    (1 + Math.sin(y * Math.PI / 180))
    /
    (1 - Math.sin(y * Math.PI / 180))
    )
   )) / 2);
}
 
private static double XToL(double x)
{
  return ((round(x) - offset) / radius) * 180 / Math.PI;
}
 
private static double YToL(double y)
{
  return (Math.PI / 2 - 2 * Double.longBitsToDouble(
     MicroDouble.atan(
      MicroDouble.exp(Double.doubleToLongBits((round(y)-offset)/radius))
     )
    )) * 180 / Math.PI;
}
private static double round(double num)
{
  double floor = Math.floor(num);
 
  if(num - floor >= 0.5)
   return Math.ceil(num);
  else
   return floor;
}
}




本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mxz55/archive/2009/01/10/3747704.aspx
分享到:
评论

相关推荐

    j2me手机端Google map最简单实现

    **J2ME手机端Google Map最简单实现** Java 2 Micro Edition (J2ME) 是一种专门用于小型设备,如手机和平板电脑的Java平台。它允许开发者创建可以在各种不同设备上运行的应用程序。在本教程中,我们将探讨如何在J2ME...

    j2me手机高级编程

    开发者可以结合地图服务提供商(如Google Maps或OpenStreetMap)的API,为手机用户提供导航和位置服务。 4. **播放器**:J2ME的Media API(JSR-135)允许开发音频和视频播放器。开发者可以控制媒体播放、暂停、停止...

    J2ME景点查询源代码

    公交信息查询可能涉及到地图API的集成,如OpenStreetMap或Google Maps的JSR-135(Java Location Technology API)。通过调用API,程序能够查询公交线路,计算换乘方案,并在屏幕上呈现路径。 7. **性能优化** ...

    J2ME城市地理查询系统毕业设计

    3. **地图渲染**:系统可能通过解析地理信息数据,使用自定义的图形库在移动设备上绘制地图,或者集成第三方地图API,如Google Maps API,实现地图展示和缩放功能。 4. **查询算法**:为了快速响应用户的查询请求,...

    开发中j2me与android的比较.pdf

    - **J2ME**:使用 `drawRegion()` 或 `drawImage()` 方法来实现旋转效果。 - **Android**:可以使用 `Matrix` 类配合 `Canvas` 的 `setTransform(Matrix matrix)` 方法来实现图像的旋转。 综上所述,虽然J2ME和...

    Google Maps V2.3.2 for Java (google map手机版含证书)中文版

    2. **maps_m2.jar**:这是Java应用程序的主代码文件,包含了谷歌地图V2.3.2的全部功能实现,通过jad文件进行调用和执行。 3. **2.jpg & 1.jpg**:可能为应用的截图或者图标,用于展示应用的界面或视觉标识。 4. **...

    《Android应用开发揭秘》源码.rar

     ·在android中如何使用语音服务和 google map api?android如何访问摄像头、传感器等硬件的api?  ·如何进行widget开发?如何用各种android组件来打造漂亮的ui界面?  ·android如何解析xml数据?又如何提高...

    Google Android SDK开发范例大全(完整版)

    9.6 移动版GoogleMap——Geocoder反查Address对象 9.7 规划导航路径——DirectionsRoute 9.8 移动设备上的Picasa相册——GooglePicasaAPI 9.9 随身翻译机——GoogleTranslateAPI 第10章 创意Android程序设计 10.1 ...

    Android应用开发揭秘(pdf )

    Android平台上的语音服务和Google Map API的使用也非常重要,它们增强了应用的功能性。同时,Android提供了丰富的API来访问摄像头、传感器等硬件,使得开发者能够充分利用设备的硬件功能。 Widget的开发是Android的...

    软件专业毕业设计选题大全 (2).docx

    43. **库存管理系统、电子商务产品管理子系统、基于 GoogleMap 的个性化体验**:关注库存控制、商品管理和服务个性化。 44. **银行信贷风险控制系统、DSS 软件项目文件管理系统、学生学籍管理系统**:涉及金融风险...

    OsmdroidDemo.zip

    2. **地图源多样性**:支持多种在线地图服务,如OpenStreetMap、Bing Maps、Google Maps(需额外许可)等,同时也支持离线地图包。 3. **丰富的API**:osmdroid提供了一套丰富的Java API,使得开发者可以方便地添加...

    java中ZXing 生成、解析二维码图片的小示例

    ZXing不仅限于Java平台,还提供J2ME、J2SE和Android等多个平台的客户端实现,方便在各种环境下使用。 在Java项目中集成ZXing,如果你使用Maven,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;...

Global site tag (gtag.js) - Google Analytics