这是我的测试中 baidu地图和Google地图 的显示情况, 显然 百度的更详细一些,google地图在电脑上的表现还是很好的,所以做手机地图测试我开始也是用google的,没想到 实现过程 超麻烦,首先是申请API key , google apikey现在的申请地址也换了,让我找了好半天,现是下面这个链接
https://developers.google.com/maps/documentation/android/v1/maps-api-signup?hl=zh-CN
打开后就是悲催的 无法显示
千辛万苦,跋山涉水,翻山越岭 (此处省略一万字)终于注册到了。。。。。。。
public class GooglemapActivity extends MapActivity { private MapController mMapController01; private MapView mMapView01; private Button mButton01, mButton02, mButton03; private EditText mEditText01; private EditText mEditText02; private int intZoomLevel = 0; /* Map启动时的预设坐标: */ // private double dLat=34.818881; // private double dLng=113.68235; private double dLat; private double dLng; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); /* 定位到自己当前位置 */ myself(); /* 建立MapView对象 */ mMapView01 = (MapView) findViewById(R.id.myMapView1); // 取得MapController对象(控制MapView) mMapController01 = mMapView01.getController(); mMapView01.setEnabled(true); mMapView01.setClickable(true); /* 设定MapView的显示选项(卫星、街道) */ // mMapView01.setSatellite(false); //卫星图 mMapView01.setStreetView(true);// 街道图 /* 预设放己的层级 */ intZoomLevel = 15; mMapController01.setZoom(intZoomLevel); mMapView01.setBuiltInZoomControls(true);// 显示缩放控件 mMapView01.displayZoomControls(true);// mMapView01.setTraffic(true);// 交通图 /* 设定Map的中点为预设经纬度 */ refreshMapView(); Drawable marker = getResources().getDrawable(R.drawable.da_marker_red); marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());// Intrinsic固有 mMapView01.getOverlays().add(new MyItemizedOverlay(marker, this)); mEditText01 = (EditText) findViewById(R.id.myEdit1); mEditText02 = (EditText) findViewById(R.id.myEdit2); /* 送出查询的Button */ mButton01 = (Button) findViewById(R.id.myButton1); mButton01.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { /* 经纬度空白检查 */ if (mEditText01.getText().toString().equals("") || mEditText02.getText().toString().equals("")) { showDialog("经度或纬度填写不正确!"); } else { /* 取得输入的经纬度 */ dLng = Double.parseDouble(mEditText01.getText().toString()); dLat = Double.parseDouble(mEditText02.getText().toString()); /* 依输入的经纬度重整Map */ refreshMapView(); } } }); /* 放大Map的Button */ mButton02 = (Button) findViewById(R.id.myButton2); mButton02.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { intZoomLevel++; if (intZoomLevel > mMapView01.getMaxZoomLevel()) { intZoomLevel = mMapView01.getMaxZoomLevel(); } mMapController01.setZoom(intZoomLevel); } }); /* 缩小Map的Button */ mButton03 = (Button) findViewById(R.id.myButton3); mButton03.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { intZoomLevel--; if (intZoomLevel < 1) { intZoomLevel = 1; } mMapController01.setZoom(intZoomLevel); } }); } // 同一类型覆盖物的绘制 class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> { // 属性 private Drawable marker; private Context mContext; private List<OverlayItem> geoList = new ArrayList<OverlayItem>(); // 经纬度的属性 private double mLat1 = 34.818881; private double mLon1 = 113.68235; private double mLat2 = 39.607723; private double mLon2 = 116.397741; private double mLat3 = 39.917723; private double mLon3 = 116.6552; // 构造方法 public MyItemizedOverlay(Drawable marker, Context context) { super(boundCenterBottom(marker)); this.marker = marker; this.mContext = context; // 构造地理坐标 GeoPoint p1 = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6)); GeoPoint p2 = new GeoPoint((int) (mLat2 * 1E6), (int) (mLon2 * 1E6)); GeoPoint p3 = new GeoPoint((int) (mLat3 * 1E6), (int) (mLon3 * 1E6)); geoList.add(new OverlayItem(p1, "P1", "这是我的当前位置")); geoList.add(new OverlayItem(p2, "P2", "point2")); geoList.add(new OverlayItem(p3, "P3", "point3")); populate();// 执行填充方法 } // 绘制方法 public void draw(Canvas canvas, MapView mapView, boolean shadow) { // 投影,用于屏幕像素点坐标系统与地球经纬度点坐标系统的转换 Projection projection = mapView.getProjection(); for (int index = size() - 1; index >= 0; index--) { OverlayItem overlayItem = this.getItem(index); String title = overlayItem.getTitle(); Point point = projection.toPixels(overlayItem.getPoint(), null); Paint painttext = new Paint(); painttext.setColor(Color.BLACK); painttext.setTextSize(15); canvas.drawText(title, point.x - 30, point.y - 25, painttext); } super.draw(canvas, mapView, shadow); boundCenterBottom(marker); } // 添加成员方法 @Override protected OverlayItem createItem(int i) { return geoList.get(i); } @Override public int size() { return geoList.size(); } // 添加点击事件 public boolean onTap(int i) { setFocus(geoList.get(i)); Toast.makeText(this.mContext, geoList.get(i).getSnippet(), Toast.LENGTH_LONG).show();// snippet片段 return true; } public boolean onTap(GeoPoint point, MapView mapView) { return super.onTap(point, mapView); } } /* 重整Map的method */ public void refreshMapView() { GeoPoint p = new GeoPoint((int) (dLat * 1E6), (int) (dLng * 1E6)); mMapView01.displayZoomControls(true); /* 将Map的中点移出GeoPoint */ mMapController01.animateTo(p); mMapController01.setZoom(intZoomLevel); } @Override protected boolean isRouteDisplayed() { return false; } public void myself() { LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE); Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (l == null) { Toast.makeText(GooglemapActivity.this, "无法获取自己的位置", Toast.LENGTH_SHORT).show(); /* 默认 的位置 */ dLat = 34.818881; dLng = 113.68235; } else { // GeoPoint gp = new GeoPoint((int)(l.getLatitude() * 1E6), // (int)(l.getLongitude() * 1E6)); // mMapController01.animateTo(gp); // // mMapController01.setZoom(17); dLat = (int) (l.getLatitude() * 1E6); dLng = (int) (l.getLongitude() * 1E6); } } /* 显示Dialog的method */ private void showDialog(String mess) { new AlertDialog.Builder(GooglemapActivity.this).setTitle("Message") .setMessage(mess) .setNegativeButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).show(); } }
百度地图API for android 首页
http://developer.baidu.com/map/sdk-android.htm
点击左侧导航 的 获取密钥 --> 填写信息 --> 然后就申请成功了, 很轻松吧
中文好有爱啊,说明文档啥的 下下来一看就懂了,而且还有demo,代码的实现过程跟google差不多