Google地图应用开发.doc_第1页
Google地图应用开发.doc_第2页
Google地图应用开发.doc_第3页
Google地图应用开发.doc_第4页
Google地图应用开发.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Google地图应用开发从2012年12月开始,Google map API v1已停止开放密钥申请,同期Google推出v2版本的android map API,与v1不同的是,v2版本的地图应用开发不再需要单独的Google API SDK 支持,可以使用普通的SDK直接开发,但需要引用Google play services的库来支持,所以在没有安装Google Play Service的手机中,程序无法正常运行,需要按要求安装该服务。因为Google map API v1已关闭密钥申请,所以接下来我们基于v2版本进行教学。同v1一样,使用v2的第一步便是申请Google API 的密钥。1、 申请地图密钥1) 在申请地图密钥之前,请先申请好自己的Google帐号,也就是Gmail邮箱;2) 得到Gmail邮箱之后前往Google API控制台,链接地址:/apis/console/,并在左侧菜单中选择API Access。3) 点击Create New Android Key,并在弹出窗口中输入SHA-1 fingerprint及应用包名,格式如下:C6:DB:D4:30:E9:95:A8:05:18:09:4D:59:7B:BC:F1:B2:E4:19:B3:8F;com.magic.googleuniversity注意:SHA-1 fingerprint可以在Eclipse中Window-Preference-Android-Build中找到4) 点击Create 之后即可获得API Key,如笔者API Key为:AIzaSyCqeTfwjOBZ47cQopVTEcevq3y13002UwY5) 在API管理页面中默认已经存在了一个API,那个是不要删除,在之后对Google地图数据调用时需要提供,如笔者API Key为:AIzaSyBYHW-0vQ5RHPCrh8Zc7uBks8KSTibntcs2、 使用Google地图2.1 建立一个新的工程,由于可以是使用android-support-v4.jar,所以目标SDK无需一定要在4.0以上。2.2 导入Google Play Services的library项目,在Eclipse里面选择:File Import Android Existing Android Code Into Workspace然后点击Next.之后Browse., 找到路径下的/extras/google/google_play_services/libproject/google-play-services_lib, 然后选择Finish。(如果没有这个库请在Android SDK Manager更新,在底端的Extras里面更新Google Play services)。导入完成后,在Map工程属性的Android标签内,引用该library。2.3添加AndroidManifest.xml中相应属性及内容。2.3.1在元素中加入子标签其中your_api_key置换成自己申请的API Key。2.3.2添加专属权限其中com.magic.googleuniversity换成自己的包名。2.3.3 添加其他权限2.3.4 添加OpenGL ES V2特性支持 2.4修改布局文件activity_main.xml 2.5修改MainActivity.javaimport android.os.Bundle;import android.support.v4.app.FragmentActivity;public class MainActivity extends FragmentActivity Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);至此,你便可以打开你的APK,欣赏Google map的魅力了。3、 GoogleMap的部分方法3.1 显示“我的位置按钮”mMap.setMyLocationEnabled(true);3.2 设置地图类型,一共有一下四种类型mMap.setMapType(MAP_TYPE_NORMAL);mMap.setMapType(MAP_TYPE_HYBRID);mMap.setMapType(MAP_TYPE_SATELLITE); mMap.setMapType(MAP_TYPE_TERRAIN);3.3 设置MarkermMap.addMarker(new MarkerOptions().position(new LatLng(0, 0).title(Marker).snippet(Maker);4、监听、并实时显示我的当前位置4.1 设置我的位置按钮mMap.setMyLocationEnabled(true);4.2 LocationClient对象,用于监听位置信息变化4.3 添加ConnectionCallbacks, OnConnectionFailedListener监听import mon.ConnectionResult;import mon.GooglePlayServicesClient.ConnectionCallbacks;import mon.GooglePlayServicesClient.OnConnectionFailedListener;import com.google.android.gms.location.LocationClient;import com.google.android.gms.location.LocationListener;import com.google.android.gms.location.LocationRequest;import com.google.android.gms.maps.CameraUpdateFactory;import com.google.android.gms.maps.GoogleMap;import com.google.android.gms.maps.SupportMapFragment;import com.google.android.gms.maps.model.CameraPosition;import com.google.android.gms.maps.model.LatLng;import android.location.Location;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.view.View;import android.widget.Toast;public class MainActivity extends FragmentActivity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListenerprivate static GoogleMap mMap;private LocationClient mLocationClient;private static final LocationRequest REQUEST = LocationRequest.create().setInterval(2000) / 2 seconds.setFastestInterval(16) / 16ms = 60fps.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setUpMapIfNeeded();protected void onResume() super.onResume();if (mLocationClient = null) mLocationClient = new LocationClient(this, this, this);mLocationClient.connect();private void setUpMapIfNeeded() if (mMap = null) mMap = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map).getMap(); mMap.setMyLocationEnabled(true); public static void setMapCenter(LatLng latLng) CameraPosition cameraPosition = new CameraPosition.Builder().target(latLng).zoom(17).build();mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition);Overridepublic void onLocationChanged(Location location) setMapCenter(new LatLng(location.getLatitude(), location.getLongitude();Overridepublic void onConnected(Bundle arg0) mLocationClient.requestLocationUpdates(REQUEST, this);Overridepublic void onDisconnected() / TODO Auto-generated method stubOverridepublic void onConnectionFailed(ConnectionResult arg0) / TODO Auto-generated method stub5、 搜索周边信息5.1 搜索周边信息的方法在此,笔者提供一个公共类,以供周边信息搜索,原理是利用当前位置信息,在Google Place API上搜索信息,所以需要在开发者控制台申请Place API的接入5.2 在公共类的方法中需要提供一个apikey的参数,这里并不是用之前已申请的key,在帐号申请之处,API Access页面中已有一个key,用它就可以了。5.3 GoogleUtil公共类注意:此公共类为其他网友所写,为保证著作权,所以使用时请标注上作者名GoogleUtil.javaimport java.io.InputStream;import .URL;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Scanner;import org.json.JSONArray;import org.json.JSONObject;import android.util.Log;import com.google.android.gms.maps.model.LatLng;/* * Google Map的搜索工具 * * author macro * */public class GoogleUtil private static String URL_API = /maps/api/place/search/json?;/* * 根据传入的条件信息查询附近信息 * * param key API 密钥 * param location 即要在其周围检索地方信息的纬度/经度。必须指定为纬度、经度。 * param radius 范围 * param sensor 请求的设备是否会使用 GPS 等位置传感器 * param keyword 方建立索引的全部内容相匹配的字词(可选) * param language 语言代码(可选) * param name 地方信息的名称进行匹配的字词(可选) * param types 指定类型相匹配的地方信息,类型应使用竖线符号 (type1|type2|etc) 进行分隔(可选) * return ListMap */public static ListMap queryByCondition(String apikey, LatLng latLng, int radius, String keyword, String language, String name, String types) throws Exception ListMap listMaps = new LinkedListMap();/ *组装请求路径信息*/ 例子:/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=AddYourOwnKeyHereURL_API += location= + latLng.latitude + , + latLng.longitude+ &radius= + radius + ;if (null != keyword & keyword.length() 0) / 关键词URL_API += &keyword= + keyword;if (null != language & language.length() 0) / 语言URL_API += &language= + language;if (null != name & name.length() 0) / 匹配名称URL_API += &name= + name;if (null != types & types.length() 0) / 类型URL_API += &types= + types;URL_API += &sensor=false;URL_API += &key= + apikey + ;System.out.println(请求的URL= + URL_API);/ *获取查询得到的返回值*/StringBuffer buf = new StringBuffer();InputStream input = null;try URL url = new URL(URL_API);input = url.openStream();Scanner scan = new Scanner(input);while (scan.hasNext() buf.append(scan.next(); / 所有的数据都保存在字符串里面 catch (Exception e) e.printStackTrace();throw e; finally if (input != null) input.close();System.out.println(查询得到的数据= + buf.toString();JSONObject allData = new JSONObject(buf.toString();/ 获取连接状态String status = allData.getString(status);if (OK.equals(status) JSONArray jsonArr = allData.getJSONArray(results);for (int i = 0; i jsonArr.length(); i+) Map map = new HashMap();JSONObject jsonObj = jsonArr.getJSONObject(i);map.put(vicinity, jsonObj.getString(vicinity);map.put(icon, jsonObj.getString(icon);map.put(name, jsonObj.getString(name);JSONObject locationJsonObj = jsonObj.getJSONObject(geometry).getJSONObject(location);map.put(latitude, locationJsonObj.getString(lat);map.put(longitude, locationJsonObj.getString(lng);listMaps.add(map);Log.v(location, latitude=+locationJsonObj.getString(lat)+,longitude=+locationJsonObj.getString(lng);return listMaps;5.4 使用公共类中queryByCondition方法MainActivity.javaimport java.util.List;import java.util.Map;import mon.ConnectionResult;import mon.GooglePlayServicesClient.ConnectionCallbacks;import mon.GooglePlayServicesClient.OnConnectionFailedListener;import com.google.android.gms.location.LocationClient;import com.google.android.gms.location.LocationListener;import com.google.android.gms.location.LocationRequest;import com.google.android.gms.maps.CameraUpdateFactory;import com.google.android.gms.maps.GoogleMap;import com.google.android.gms.maps.SupportMapFragment;import com.google.android.gms.maps.model.CameraPosition;import com.google.android.gms.maps.model.LatLng;import com.google.android.gms.maps.model.MarkerOptions;import android.app.ProgressDialog;import android.location.Location;import android.os.AsyncTask;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.view.View;import android.widget.Toast;public class MainActivity extends FragmentActivity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListenerpublic static final int STATUS_FAILED = 0;public static final int STATUS_SUCCESS = 1;public static final int STATUS_NETERROR = 2;private static final String API_KEY = AIzaSyBYHW-0vQ5RHPCrh8Zc7uBks8KSTibntcs;private static final String language = zh-CN;private static final String types = food|restaurant;private static final int radius = 200;private String name = ;private String keywords = ;private ListMap listMaps = null;private LatLng latLng = null;private LocationClient mLocationClient;private ProgressDialog progressDialog = null;private static GoogleMap mMap;private static final LocationRequest REQUEST = LocationRequest.create().setInterval(2000) / 2 seconds.setFastestInterval(16) / 16ms = 60fps.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setUpMapIfNeeded();protected void onResume() super.onResume();if (mLocationClient = null) mLocationClient = new LocationClient(this, this, this);mLocationClient.connect(); private void setUpMapIfNeeded() if (mMap = null) mMap = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map) .getMap(); mMap.setMyLocationEnabled(true); public void displayNearby(View v)new SearchAsyncTask().execute(); public static void setMapCenter(LatLng latLng) CameraPosition cameraPosition = new CameraPosition.Builder().target(latLng).zoom(17).build();mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition);Overridepublic void onLocationChanged(Location location) latLng = new LatLng(location.getLatitude(), location.getLongitude(); setMapCenter(latLng);Overridepublic void onConnected(Bundle arg0) mLocationClient.requestLocationUpdates(REQUEST, this);Overridepublic void onDisconnected() / TODO Auto-generated method stubOverridepublic void onConnectionFailed(ConnectionResult arg0) / TODO Auto-generated method stubprivate class SearchAsyncTask extends AsyncTask public SearchAsyncTask()progressDialog = ProgressDialog.show(MainActivity.this, null, 正在获取附近餐馆数据,请稍后., true);progress

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论