MyGCanvas.java
上传用户:hygd004
上传日期:2022-07-01
资源大小:246k
文件大小:3k
源码类别:

J2ME

开发平台:

Java

  1. import javax.microedition.lcdui.Canvas;
  2. import javax.microedition.lcdui.Graphics;
  3. import javax.microedition.lcdui.Image;
  4. //Download by http://www.codefans.net
  5. import java.util.Vector;
  6. /**
  7.  * @author funny
  8.  * 
  9.  * 用以下URL求城市的经纬度,把经纬度放入函数retrieveStaticImage运算
  10.  * http://maps.google.com/maps/geo?q=shanghai&output=csv&key=ABQIAAAAxXXppGwQikP5W03kMkXwTBRwZeWwBJuDeBDs7Xe14alLLfNA1RSipLkOi1Os9IQgWszFCqI6nbQUwA
  11.  * 
  12.  * 用以下URL输出城市地图
  13.  * http://maps.google.com/staticmap?center=31.2243531,121.4759159&format=png32&zoom=8&size=320x240&key=ABQIAAAAxXXppGwQikP5W03kMkXwTBRwZeWwBJuDeBDs7Xe14alLLfNA1RSipLkOi1Os9IQgWszFCqI6nbQUwA
  14.  */
  15. public class MyGCanvas extends Canvas implements Runnable {
  16.  private GoogleMaps gMap=null;
  17.  private String apiKey="ABQIAAAAxXXppGwQikP5W03kMkXwTBRwZeWwBJuDeBDs7Xe14alLLfNA1RSipLkOi1Os9IQgWszFCqI6nbQUwA";
  18.  //常州的经纬度
  19.  private double lon=31.188179526512172;//31.7558405;
  20.  private double lat=121.43672347068786;//119.9392140;
  21.  //放大的倍数
  22.  private int zoom=16;
  23.  //调整位置的经纬度
  24.  double[] cs;
  25.  Image mapImg;
  26.  Vector m_cmd;
  27.  
  28.  
  29.  public MyGCanvas()
  30.  {
  31.   gMap=new GoogleMaps(apiKey);
  32.   cs=new double[]{lon,lat};
  33.   m_cmd = new Vector(1);
  34.   new Thread(this).start();
  35.  }
  36.  protected void paint(Graphics g) {
  37.   g.setColor(0xffffff);
  38.   g.fillRect(0,0,getWidth(),getHeight());
  39.    if(mapImg!=null) 
  40.    g.drawImage(mapImg,(getWidth()-256)/2,(getHeight()-256)/2,20);
  41.    else
  42.    {
  43.    g.setColor(0);
  44.    g.drawString("waiting.....", 40, 60, 20);
  45.    }
  46. g.setColor(0xff0000);
  47. final int cs = 3; // crosshair size
  48. g.drawLine(getWidth()/2 - cs, getHeight()/2, getWidth()/2 + cs, getHeight()/2);
  49. g.drawLine(getWidth()/2, getHeight()/2 - cs, getWidth()/2, getHeight()/2 + cs);
  50.  }
  51.  
  52.  protected synchronized void getURL()
  53.  {
  54. m_cmd.addElement(new Object());
  55. notify();
  56.  }
  57.  
  58.  public void run()
  59.  {
  60. while(true)
  61. {
  62. if(m_cmd.size()==0)
  63. {
  64.         try
  65.         {
  66.                 synchronized(this)
  67.                 {
  68.     wait();
  69.                 }
  70.         }catch (InterruptedException e){}
  71. }
  72. try
  73. {
  74.  mapImg=gMap.retrieveStaticImage(256,256, lon,lat, zoom, "png");
  75.  m_cmd.removeElementAt(0);
  76.  repaint();
  77.  } catch (Exception e) 
  78.  {
  79.  
  80.  }
  81. }
  82.  }
  83.  
  84.  protected void keyPressed(int keycode) {
  85.   /*System.out.println(keycode);
  86.   flag=true;*/
  87.   //switch (this.getGameAction(keycode)) {
  88.   String actionName=this.getKeyName(keycode);
  89.   int action=this.getGameAction(keycode);
  90.   if(action==Canvas.UP){
  91.    lat=MapUtil.adjust(lat, lon, 0, -30, zoom)[0];
  92.    lon=MapUtil.adjust(lat, lon, 0, -30, zoom)[1];
  93.   }
  94.   else if(action==Canvas.DOWN){
  95.    lat=MapUtil.adjust(lat, lon, 0, 30, zoom)[0];
  96.    lon=MapUtil.adjust(lat, lon, 0, 30, zoom)[1];
  97.   }
  98.   else if(action==Canvas.LEFT){
  99.    lat=MapUtil.adjust(lat, lon, -30, 0, zoom)[0];
  100.    lon=MapUtil.adjust(lat, lon, -30, 0, zoom)[1];
  101.   }
  102.   else if(action==Canvas.RIGHT){
  103.    lat=MapUtil.adjust(lat, lon, 30, 0, zoom)[0];
  104.    lon=MapUtil.adjust(lat, lon, 30, 0, zoom)[1];
  105.   }
  106.   else if(actionName.equals("1")||actionName.equals("*")){
  107.    if(zoom<17)
  108.     zoom++;
  109.   }
  110.   else if(actionName.equals("3")||actionName.equals("#")){
  111.    if(zoom>1)
  112.     zoom--;
  113.   }
  114.   //lat=cs[0];
  115.   //lon=cs[1];
  116.   //cs=MapUtil.adjust(lat, lon, 30, 0, zoom--);
  117.   getURL();
  118.  }
  119. }