Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等

---恢复内容开始---

extends:http://blog.csdn.net/h7870181/article/details/12505883

Google Maps API 网络服务

官网地址 :

https://developers.google.com/maps/documentation/webservices/?hl=zh-cn

其实就是一些接口,供我们调用,如:

1、根据地址获取经纬度

http://maps.google.com/maps/api/geocode/json?address=北京&language=zh-CN&sensor=false

2、计算路线数据

http://maps.googleapis.com/maps/api/directions/json?origin=北京&destination=上海&sensor=false&mode=driving

3、根据经纬度获取详细地址

http://maps.google.com/maps/api/geocode/json?latlng="latlng"&language=zh-CN&sensor=false

等等还有很多,大家可以自己去找找

给大家介绍一下如果利用这些接口

实现网络定位:

首先获取经纬度

/**
 * 获取本地
 * @param context
 * @return
 */
public String getLocation(Context context){
    LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
       // 返回所有已知的位置提供者的名称列表,包括未获准访问或调用活动目前已停用的。
       //List<String> lp = lm.getAllProviders();
       Criteria criteria = new Criteria();
       criteria.setCostAllowed(false);
       //设置位置服务免费
       criteria.setAccuracy(Criteria.ACCURACY_COARSE); //设置水平位置精度
        //getBestProvider 只有允许访问调用活动的位置供应商将被返回
       String  providerName = lm.getBestProvider(criteria, true);  

       if (providerName != null)
       {
           Location location = lm.getLastKnownLocation(providerName);
           if(location!=null){
            //获取维度信息
            double latitude = location.getLatitude();
            //获取经度信息
            double longitude = location.getLongitude();
            return latitude+","+longitude;
           }
       }
       return "";
}  

调用API,我这里写了一个工具类

package com.techrare.utils;  

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;  

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;  

public class MapsApiUtils {
    private static MapsApiUtils mapsApiUtils = new MapsApiUtils();  

    /**
     * 单例模式
     *
     * @return
     */
    synchronized public static MapsApiUtils getInstance() {
        return mapsApiUtils;
    }  

    /**
     * 根据API地址和参数获取响应对象HttpResponse
     *
     * @param params
     * @param url
     * @return
     */
    private HttpResponse post(Map<String, Object> params, String url) {  

        HttpClient client = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.addHeader("charset", HTTP.UTF_8);
        httpPost.setHeader("Content-Type",
                "application/x-www-form-urlencoded; charset=utf-8");
        HttpResponse response = null;
        if (params != null && params.size() > 0) {
            List<NameValuePair> nameValuepairs = new ArrayList<NameValuePair>();
            for (String key : params.keySet()) {
                nameValuepairs.add(new BasicNameValuePair(key, (String) params
                        .get(key)));
            }
            try {
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuepairs,
                        HTTP.UTF_8));
                response = client.execute(httpPost);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (RuntimeException e) {
                e.printStackTrace();
            }
        } else {
            try {
                response = client.execute(httpPost);
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return response;
    }  

    /**
     * 得到JSON值
     *
     * @param params
     * @param url
     * @return
     */
    private Object getValues(Map<String, Object> params, String url) {
        String token = "";
        HttpResponse response = post(params, url);
        if (response != null) {
            try {
                token = EntityUtils.toString(response.getEntity());
                response.removeHeaders("operator");
            } catch (ParseException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return token;
    }  

    /**
     * 根据google API 获取两地的路线
     * @param origin 起点
     * @param destination 终点
     * @param mode 出行方式 driving驾车,  walking步行, bicycling自行车, transit公交车
     * @param sensor 是否来自装有位置传感器的设备  true Or false
     * @return
     */
    public Object getRoutes(String origin, String destination) {
        String url = "http://maps.googleapis.com/maps/api/directions/json?origin="+ origin +"&" +
                "destination="+ destination +"&sensor=false&mode=driving&region=zh";
        return getValues(null, url);
    }  

    /**
     * 根据经纬度 获取地理位置
     * LatLng 经纬度以逗号隔开  纬度,经度
     * @return
     */
    public Object getAddress(String latlng) {
        String url = "http://maps.google.com/maps/api/geocode/json?latlng="+
                latlng+"&language=zh-CN&sensor=false";
        return getValues(null, url);
    }  

    /**
     * 根据地址获取经纬度
     * @return
     */
    public Object getLatlng(String str) {
        String url = "http://maps.google.com/maps/api/geocode/json?address="+
                str+"&language=zh-CN&sensor=false";
        return getValues(null, url);
    }
}  

调用getAddress()方法 传递经纬度来获取详细地址 返回的是JSON字符串,大家解析一下就可以

MapsApiUtils.getInstance().getAddress(getLocation(context));  

計算路线数据 

可以得到起点到终点的时间和路程

调用getRoutes() 方法,传起点和终点

MapsApiUtils.getInstance().getLatLng("39.90403,116.407526");  

根据地址获取经纬度

MapsApiUtils.getInstance().getRoutes("北京","上海");  
时间: 2024-12-26 12:29:52

Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等的相关文章

Google Maps API V3 之 路线服务

概述 您可以使用 DirectionsService 对象计算路线(使用各种交通方式).此对象与 Google Maps API 路线服务进行通信,该服务会接收路线请求并返回计算的结果.您可以自行处理这些路线结果,也可以使用 DirectionsRenderer 对象呈现这些结果. 您可以通过文本字符串(例如,“伊利诺斯州芝加哥市”或“澳大利亚新南威尔士州达尔文市”)或 LatLng 值的形式来指定路线的起点和终点.路线服务可以使用一系列路标返回多段路线.路线可以显示为一条在地图上绘制路线的折线

Google Maps API Web Services

原文:Google Maps API Web Services 摘自:https://developers.google.com/maps/documentation/webservices/ Google Maps API Web Services 本文将探讨 Google Maps API Web Services,这是一个为您的地图应用程序提供地理数据的 Google 服务的 HTTP 接口集合.本指南仅旨在介绍通用于所有不同服务的 Web 服务和托管信息.每个服务的单个文档位于以下位置:

【转】Android Google Map API使用的八个步骤

Android Google Map API使用的八个步骤 本系列教程将分为两部分,第一部分是指导用户使用Mapview控件进行编程,其中包括了如何获得Google Map API,如何使用该API进行简单的开发,如何获得用户当前所在的位置.第二部分则包括如何在地图上,用第三方的组件库,实现气球式显示若干指定位置的功能. 步骤1 创建新的Android 工程 首先打开eclipse新建立一个Android 工程,其中相关参数设置如下: Project name:MallFinder Build 

Google Maps API V3 之 图层

图层概述 图层是地图上的对象,包含一个或多个单独项,但可作为一个整体进行操作.图层通常反映了您添加到地图上用于指定公共关联的对象集合.Maps API 会通过以下方法管理图层内对象的显示形式:将图层的组成项呈现在一个对象(通常为一个图块叠加层)中并根据地图视口的变化情况进行显示.图层还可以改变地图自身的展示图层,以符合图层样式的方式稍稍改变基本图块.请注意,系统将大部分图层设计为禁止通过其单个对象进行访问,而仅可将其作为一个整体来操作. 要在地图上添加图层,只需调用 setMap() 并向其传递

Google Maps API V3 之绘图库 信息窗口

绘图库 本文档中的概念仅适用于 google.maps.drawing 库中提供的地图项.默认情况下,系统在加载 Maps JavaScript API 时不会加载该库,您必须使用 libraries 引导程序参数进行明确指定. http://maps.googleapis.com/maps/api/js?sensor=false&libraries=drawing DrawingManager 类提供了一个图形界面,以供用户在地图上绘制多边形.矩形.折线.圆形和标记.DrawingManage

Google maps api demo

demo: <!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <title>KML Layers</title> <style> html, body, #ma

Google Maps API显示地图的小示例

来源:http://www.ido321.com/1089.html 效果(新版Firefox中测试): 代码: <!DOCTYPE> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>Google Map</title> <script type="te

Google maps API

http://stackoverflow.com/questions/10736664/load-kml-file-into-google-maps-api http://wenku.baidu.com/link?url=r42agq4KFMc3kPfNrdT4mH0NLxquwtztujARlKhphNR35nKLGorOx2dYqliLQeGKefFr_X_cGi3kKiu2asrVmTBBsdqbvPvI0JeWi5fct2a http://www.cnblogs.com/fhmsha/a

Android网络服务发现(NSD)协议的使用

Android的网络服务发现协议(NSD)可以用于在小范围的网络中发现邻近设备上的某个应用.这对于一些社交网络.多人游戏类的应用会非常有帮助. Android的NSD的使用方法大致上分为四种操作: 1. 注册网络服务 2. 发现网络服务 3. 连接网络服务 4. 注销网络服务 使用NSD时一定要注意: 记得在Manifest中加入android.permission.INTERNET 权限,不然程序会崩溃. 一. 注册网络服务 注册网络服务需要两样东西: 网络服务的信息(NsdServiceIn