代码如下:
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最简单实现** Java 2 Micro Edition (J2ME) 是一种专门用于小型设备,如手机和平板电脑的Java平台。它允许开发者创建可以在各种不同设备上运行的应用程序。在本教程中,我们将探讨如何在J2ME...
开发者可以结合地图服务提供商(如Google Maps或OpenStreetMap)的API,为手机用户提供导航和位置服务。 4. **播放器**:J2ME的Media API(JSR-135)允许开发音频和视频播放器。开发者可以控制媒体播放、暂停、停止...
公交信息查询可能涉及到地图API的集成,如OpenStreetMap或Google Maps的JSR-135(Java Location Technology API)。通过调用API,程序能够查询公交线路,计算换乘方案,并在屏幕上呈现路径。 7. **性能优化** ...
3. **地图渲染**:系统可能通过解析地理信息数据,使用自定义的图形库在移动设备上绘制地图,或者集成第三方地图API,如Google Maps API,实现地图展示和缩放功能。 4. **查询算法**:为了快速响应用户的查询请求,...
- **J2ME**:使用 `drawRegion()` 或 `drawImage()` 方法来实现旋转效果。 - **Android**:可以使用 `Matrix` 类配合 `Canvas` 的 `setTransform(Matrix matrix)` 方法来实现图像的旋转。 综上所述,虽然J2ME和...
2. **maps_m2.jar**:这是Java应用程序的主代码文件,包含了谷歌地图V2.3.2的全部功能实现,通过jad文件进行调用和执行。 3. **2.jpg & 1.jpg**:可能为应用的截图或者图标,用于展示应用的界面或视觉标识。 4. **...
·在android中如何使用语音服务和 google map api?android如何访问摄像头、传感器等硬件的api? ·如何进行widget开发?如何用各种android组件来打造漂亮的ui界面? ·android如何解析xml数据?又如何提高...
9.6 移动版GoogleMap——Geocoder反查Address对象 9.7 规划导航路径——DirectionsRoute 9.8 移动设备上的Picasa相册——GooglePicasaAPI 9.9 随身翻译机——GoogleTranslateAPI 第10章 创意Android程序设计 10.1 ...
Android平台上的语音服务和Google Map API的使用也非常重要,它们增强了应用的功能性。同时,Android提供了丰富的API来访问摄像头、传感器等硬件,使得开发者能够充分利用设备的硬件功能。 Widget的开发是Android的...
43. **库存管理系统、电子商务产品管理子系统、基于 GoogleMap 的个性化体验**:关注库存控制、商品管理和服务个性化。 44. **银行信贷风险控制系统、DSS 软件项目文件管理系统、学生学籍管理系统**:涉及金融风险...
2. **地图源多样性**:支持多种在线地图服务,如OpenStreetMap、Bing Maps、Google Maps(需额外许可)等,同时也支持离线地图包。 3. **丰富的API**:osmdroid提供了一套丰富的Java API,使得开发者可以方便地添加...
ZXing不仅限于Java平台,还提供J2ME、J2SE和Android等多个平台的客户端实现,方便在各种环境下使用。 在Java项目中集成ZXing,如果你使用Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>...