Google地图(Map)API在J2ME中使用方法

esp32s3 spi camera gc6133调试 gc6133 spi只有master模式,同时需要esp32提供主时钟,需要有主时钟然后才能通过i2c进行初始化.测试了几种方式,记录如下。 阅读详情
最近在Android的学习中,感觉到Android中使用Google Map Api很强大,于是乎想在J2me上来使用Google Map Api,搜索了一下,果然已经有很多人实现过了。
当然,要使用Google Map Api首先就得申请“Google Maps API Key”。这里就不多说了,不会的点击这里。
同样,早有人实现了,大家也可以查看效果:Java ME Google Maps API sample MIDlet。

截图如下:


下面是J2me中的GoogleMaps类:

import java.io.ByteArrayOutputStream;     
import java.io.DataOutputStream;     
import java.io.IOException;     
import java.io.InputStream;     
import java.util.Vector;     
import javax.microedition.io.Connector;     
import javax.microedition.io.HttpConnection;     
import javax.microedition.lcdui.Image;     
    
public class GoogleMaps     
{     
    private static final String URL_UNRESERVED = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789-_.~";     
    private static final char[] HEX = "0123456789ABCDEF".toCharArray();     
    
    public static final int offset = 268435456;     
    public static final double radius = offset / Math.PI;     
    
    private String apiKey = null;     
    
    
    public GoogleMaps(String key)     
    {     
        apiKey = key;     
    }     
    
    
    public double[] geocodeAddress(String address) throws Exception     
    {     
        byte[] res = loadHttpFile(getGeocodeUrl(address));     
        String[] data = split(new String(res, 0, res.length), ',');     
    
        if (data[0].compareTo("200") != 0)     
        {     
            int errorCode = Integer.parseInt(data[0]);     
            throw new Exception("Google Maps Exception: "    
                    + getGeocodeError(errorCode));     
        }     
    
        return new double[] { Double.parseDouble(data[2]),     
                Double.parseDouble(data[3]) };     
    }     
    
    
    public Image retrieveStaticImage(int width, int height, double lat,     
        double lng, int zoom, String format) throws IOException     
    {     
        byte[] imageData = loadHttpFile(getMapUrl(width, height, lng, lat,zoom, format));     
    
        return Image.createImage(imageData, 0, imageData.length);     
    }     
    
    
    private static String getGeocodeError(int errorCode)     
    {     
        switch (errorCode)     
        {     
            case 400:     
                return "Bad request";     
            case 500:     
                return "Server error";     
            case 601:     
                return "Missing query";     
            case 602:     
                return "Unknown address";     
            case 603:     
                return "Unavailable address";     
            case 604:     
                return "Unknown directions";     
            case 610:     
                return "Bad API key";     
            case 620:     
                return "Too many queries";     
            default:     
                return "Generic error";     
        }     
    }     
    
    
    private String getGeocodeUrl(String address)     
    {     
        return "http://maps.google.com/maps/geo?q=" + urlEncode(address)     
                + "&output=csv&key=" + apiKey;     
    }     
    
    
    private String getMapUrl(int width, int height, double lng, double lat,     
        int zoom, String format)     
    {     
        return "http://maps.google.com/staticmap?center=" + lat + "," + lng     
                + "&format=" + format + "&zoom=" + zoom + "&size=" + width     
                + "x" + height + "&key=" + apiKey;     
    }     
    
    
    private static String urlEncode(String str)     
    {     
        StringBuffer buf = new StringBuffer();     
        byte[] bytes = null;     
        try    
        {     
            ByteArrayOutputStream bos = new ByteArrayOutputStream();     
            DataOutputStream dos = new DataOutputStream(bos);     
            dos.writeUTF(str);     
            bytes = bos.toByteArray();     
        }     
        catch (IOException e)     
        {     
        }     
        for (int i = 2; i < bytes.length; i++)     
        {     
            byte b = bytes[i];     
            if (URL_UNRESERVED.indexOf(b) >= 0)     
            {     
                buf.append((char) b);     
            }     
            else    
            {     
                buf.append('%').append(HEX[(b >> 4) & 0x0f]).append(     
                    HEX[b & 0x0f]);     
            }     
        }     
        return buf.toString();     
    }     
    
    
    private static byte[] loadHttpFile(String url) throws IOException     
    {     
        byte[] byteBuffer;     
    
        HttpConnection hc = (HttpConnection) Connector.open(url);     
        System.out.println("loadHttpFile:" + url);     
        try    
        {     
            hc.setRequestMethod(HttpConnection.GET);     
            InputStream is = hc.openInputStream();     
            try    
            {     
                int len = (int) hc.getLength();     
                if (len > 0)     
                {     
                    byteBuffer = new byte[len];     
                    int done = 0;     
                    while (done < len)     
                    {     
                        done += is.read(byteBuffer, done, len - done);     
                    }     
                }     
                else    
                {     
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();     
                    byte[] buffer = new byte[512];     
                    int count;     
                    while ((count = is.read(buffer)) >= 0)     
                    {     
                        bos.write(buffer, 0, count);     
                    }     
                    byteBuffer = bos.toByteArray();     
                }     
            }     
            finally    
            {     
                is.close();     
            }     
        }     
        finally    
        {     
            hc.close();     
        }     
    
        return byteBuffer;     
    }     
    
    
    private static String[] split(String s, int chr)     
    {     
        Vector res = new Vector();     
    
        int curr;     
        int prev = 0;     
    
        while ((curr = s.indexOf(chr, prev)) >= 0)     
        {     
            res.addElement(s.substring(prev, curr));     
            prev = curr + 1;     
        }     
        res.addElement(s.substring(prev));     
    
        String[] splitted = new String[res.size()];     
        res.copyInto(splitted);     
    
        return splitted;     
    }     
}
注意:在使用时,可能需要对一些数据进行转换,可以参考:MicroFloat website。
通过这个类,大家都应该明白如何使用了吧。
首先实例化对象:

GoogleMaps gMap = new GoogleMaps("API_KEY");  

通过地址查找坐标:

double[] lanLng = gMap.geocodeAddress("chengdu");  
取得指定大小的图片:
Image map = gMap.retrieveStaticImage(240, 320, 51.510605, -0.130728, 8, "png32");
最后将取得的图片绘制出来即可:
g.drawImage(map,(getWidth()-240)/2,(getHeight()-320)/2,0); 
就写到这里了,ok!谢谢大家支持!
安装 miniconda linux 阅读详情

相关推荐

手把手教你用ZEMAX复现贝塞尔光束:从Thorlabs锥透镜到Edmund透镜的完整光路搭建

本文详细介绍了如何在ZEMAX光学设计软件中复现贝塞尔光束,从Thorlabs锥透镜到Edmund透镜的完整光路搭建过程。通过逐步指导,帮助研究人员和工程师掌握光学设计技巧,实现无衍射特性的贝塞尔光束生成,适用于激光加工和生物成像等领域。

weixin_33737774的博客 179

J2ME地图编辑器

在“J2ME实践之地图篇”中,笔者提到了采用脚本与TileLayer相结合的方法管理地图。 然而,如果用手工编写脚本就显得太过愚笨,于是笔者编写了一个能够根据地图元来自动产生脚本的可视化程序。功能:1、通过地图元文件(.bmp)可视化创建地图;2、通过鼠标选取相应的地图元素(分割窗口的上半部分)后,在地图(分割窗口的下半部分)上点击即可;3、一个“保存”按钮将地图轻松转换为脚本;4、通

Heath's Blog 4157

深入浅出DNS系列(一)- DNS杂谈

黄丝玛:班达山,你好,我记性不好,你告诉我搜狐、新浪的网站IP地址好吗? 班达山:你问问DNS先生吧,他专门干这买卖的

jiangsd198的博客 4129

用j2me开发GIS程序-地图绘制2

地图渲染类MapCanvas,该类完成地图绘制和操作响应public class MapCanvas extends Canvas {    private MIDlet mapMidlet;    private int lines[][] = { { -10, -10, -10, 0, 20, 20, 20, 30 },            { 50, 50, 70, 90, 60, 80

iwillsw的专栏 1640

Uniapp+Vue3+Monorepo:如何优化你的前端开发流程(附完整配置代码)

本文详细介绍了如何利用Uniapp+Vue3+Monorepo技术栈优化前端开发流程,提升代码可维护性和团队协作效率。通过Monorepo架构实现依赖管理智能化、代码复用最大化和构建流程统一化,结合完整配置代码和实战指南,帮助开发者快速构建高性能跨端应用。

weixin_29011993的博客 453

Tushare使用教程

@Tushare简易教程 Python财经数据接口Tushare 最近在看量化分析有关的东西,然后第一步先了解的就是如何获取股票交易数据。发现大部分教程都是关于Tushare的,于是在这里简单的介绍一下Tushare的用法吧。目前tushare有免费版本和升级的需要付费的Pro版本。大多数教程写的都是免费版本,但是pro版本提供的数据更多,但是由于本人入坑还不深,暂时还是用的免费版本,但是每次使用都收到提示,“本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/documen

kuangzhi9124的博客 2万+

J2ME平台A-RPG游戏地图数据处理

在我所做的这个A-RPG游戏中,地图总共有8张最小的为25*25个title,最大的为40*40个title所以说地图数据量相对于手机平台来说算是比较大的那么这么大的数据该如何处理才能最优化呢?以下是我的做法:当然,不一定是最好的,喜欢大家能积极交流,想出更好的办法。在我的地图上总共有4种数据:地板title、障碍物、遮盖物、怪物等。那么这就存在一个层次的问题,也就是先

大道至简 1727

【行业解决方案篇十五】【DeepSeek物流优化:车辆路径规划算法】

写完这篇技术解析,突然想起那位多绕150公里的王师傅——现在他的车载平板会实时显示"路径健康度",当偏离最优路线超过5%就自动报警。从节约算法到深度强化学习,从三维装载到时序预测,这些技术最终化作每辆货车少烧的1升柴油,每个快递小哥早回家的1小时。最后说个浪漫的事:系统曾为某偏远山区规划出一条穿越枫叶林的配送路线,不仅节省23公里,还成了网红打卡路线。原来物流优化的尽头,不仅是冰冷的数学,还有人间烟火气的温度。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 292

开发一套基于j2me的地图api

最近从事j2me的手机地图开发,由于受到网站(www.51ditu.com)端的启发和几个网友的询问,就产生了发布一个基于j2me的地图api的想法。     提供的功能主要包括地图的展示,地图的移动,缩放,支持触摸,支持在地图上展示点集信息和公交线路信息。基于这个api就可以把地图作为一个部件加入到手机应用中来。     从技术层面考虑,这些实现起来都不是问题,但是主要是市场,法律,产品化流程方...

lang 196

YOLOv11改进 | 添加注意力篇 | 结合2024最新Mamba注意力机制MLLA助力yolov11有效涨点含二次创新C2PSA(全网独家首发改进)

本文给大家带来的改进机制是结合号称超越Transformer架构的Mamba架构的最新注意力机制MLLA,本文将其和我们YOLOv11进行结合,的原理是通过将Mamba模型的一些核心设计融入线性注意力机制,从而提升模型的性能。具体来说,MLLA主要整合了Mamba中的“忘记门”(forget gate)和模块设计(block design)这两个关键因素,同时MLLA通过使用位置编码(RoPE)来替代忘记门,从而在保持并行计算和快速推理速度的同时,提供必要的位置信息。

Snu77的博客 3870

FPGA实现DDR接口

verilog// DDR2控制器状态机// 初始化序列// 发出初始化命令endendendend// 自动预充电end// 其他状态...endcaseendend。

whm128的博客 998

J2ME google map实现

代码如下: package com.j2me.google; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; /** * @auth...

zou_12345的博客 182

Coze 上 OpenClaw 完整使用攻略(零代码 + 24 小时在线 + 飞书 / 微信接入)

Coze(扣子)是目前国内零门槛部署 OpenClaw 最友好的平台,无需服务器、不用命令行,5 分钟即可拥有可执行本地 / 云端任务的 AI 助手,还能一键发布到飞书、微信、钉钉等 IM。

hy行者勇哥的博客 2921

J2ME Google 地圖 API

<br />這裡有一個簡單的函式庫來查詢Google地圖,它有下面的功能: <br /><br />地理編碼定址到其地理座標 <br />擷取給定尺寸、格式及畫面遠近的靜態圖片 <br />這個API有一個實例,你可以在這裡檢查:Java ME Google Maps API sample MIDlet <br /><br />Contents [hide] <br />1 取得你自己的Google地圖API Key <br />2 使用代理伺服器來存取Google地圖服務 <br />3 原始碼:Goog

Gabriel的专栏 1004

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

J2ME与Google Map

   在网络上看到关于Google Map的文章,感觉很有意思,就找了一些资料自己研究,首先我找到的事一篇NOKIA的文章,英语原文在这里http://wiki.forum.nokia.com/index.php/J2ME_Google_Maps_API.这里面的步骤很详细,而且也不是很难,我想我在这里就不翻译了。      我想这里说的是里面的一段代码:  byte[] loadHt

lysanderK的专栏 1553

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Google Maps Java ME library

英文文章来源http://www.jappit.com/blog/midmaps-google-maps-java-me-library/ 中文文章来源http://yarin.iteye.com/blog/519754 谷歌地图api连接http://www.jappit.com/j2me/midmaps/javadocs/     MidMaps: Google Maps...

王挺帅的博客 274

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Google地图调用代码

以下是本人从网上找的一个Google地图调用代码,特此收藏。(看看这里)Google地图JavaScript API示例 - 分享JavaScript-sharejs.com 标签中加上: * * * @author haogang */ /** * 创建地图控件,并添加一些基本的控件 */ function load() { if

独行者的专栏 2946

Mobile GMaps - Google Map移动版

又看到一个Google Map的应用,Mobile GMaps - Google Map移动版。这个商机应该比较大。软件基于J2ME,使用Google的地图数据,提供基本的地图功能,可切换Map视图和遥感影像视图,有标注功能。http://www.mgmaps.com 转载于:https://www.cnblogs.com/maweifeng/archive/2005/07/05/186584....

weixin_30297281的博客 91

[J2ME]如何替换Google Map静态地图自带的Marker

要替换Google Map静态图片中缺省的Marker为您自己的图标,需要使用 javax.microedition.lcdui.Graphics.drawImage(Image img, int x, int y, int anchor) 其中anchor为图像在屏幕上的停靠点。 int 常量 相当(x,y) 0或20 ...

hulunberbus 72

如何在您的应用程序(JS,Express,Node.js)中实现Google Places API

In the good old days when I knew absolutely nothing about coding but was working with a PropTech startup that automates the entire rental process for institutional landlords, one of the hottest demand...

weixin_26738395的博客 282

关于google api的支持

在论坛泡了好几天,终于摸清了moto中国把xt702行货版的rom里的核心框架framework.jar修改并删除了某些google api的支持,也就是说市面上所有汉化的milestone rom在调用google map服务的时候只能看到黑屏的结果,但是官方的google map完全不受影响,要想看到程序结果只能刷原版rom。         这还只是小问题,大问题是我试了无数网上介绍的...

xiechengfa的技术笔记 146

places365_如何在您的应用程序js中实现Google Places api Express节点js

places365In the good old days when I knew absolutely nothing about coding but was working with a PropTech startup that automates the entire rental process for institutional landlords, one of the hotte...

weixin_26723981的博客 208
上一篇: Android教程之如何使用自定义字体
下一篇: Android2.0之后读取联系人——ContactsContract
yarin
博客等级 码龄17年 35粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值