google maps 应用

Android google map的应用有:

1.我的位置:在地图上显示你的当前位置(通常在1000米范围内)。即使没有GPS,你也可以确定自己的位置。Google手机地图还支持内在GPS,也可以链接到蓝牙GPS传感器,以便更加准确定位用户的位置。“我的位置”的功能通过识别你附近无线发射塔的信息广播而确定你的位置的。

                 

2.地图和卫星视图:Google手机地图可以向你提供所查地区的地图和卫星视图,手机界面的使用感觉与你在台式机上相同。可沿着其中一个方向滚动,以查看地图上更多内容,或可以使用快捷键进行缩放。

             

3.商户列表:借助Google的本地搜索,可以按名称(如“星巴克”)或类型(如“咖啡”)——搜索商家,查看商店的营业时间和评分,然后,只需点击一下即可拨通感兴趣的商家的电话。有了“我的位置”功能,甚至都不用输入当前位置即可方便的找到附近的商家。

            

4.驾车路线:可以很方便的获得驾车路线,其中会很清楚地标识每次转弯。有了“我的位置”功能,甚至都不需要输入出发点。

                

5.公交换乘:查看公交和地铁线路,确定转车路线,制定你在全球80个城市的出行计划。

            

6.路况信息:Google地图上的公路会根据实时的路况数据,以绿色,黄色或红色显示。

                  

7.收藏夹:为你常去的地方加上书签,以便能在地图上非常方便地返回到这些地方。

         

二、在开发Google Map服务时,会使用到Google API中的com.google.android.map包,重要的几个类有:

1.MapActivity:这个类是用于显示Google Map的Activity类,它需要连接底层网络。MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity,并且在其派生类的onCreate()中,都要创建一个MapView实例。

                 

2.MapView:MapView是用于显示地图的View组件。它派生自android.view.ViewGroup。它必须和MapActivity配合使用,而且只能被MapActivity创建,这是因为MapView需要通过后台的线程来连接网络或者文件系统,而这些线程需要有MapActivity来管理。

               

3.MapController:MapController用于控制地图的移动、缩放等。

              

4.OverLay:这是一个可显示于地图之上的可绘制的对象。

                 

5.GeoPoint:这是一个包含经纬度位置的对象。

       

三、实例开发

第一步、创建一个Android项目命令为mymap,注意模拟器请选择"Goolge APIs”,目录结构如下:

第二步、修改main.xml布局文件,修改内容如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <!-- 经度 -->
        <TextView android:text="@string/txtLongitude"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"/>
        <EditText android:id="@+id/etLongitude" 
            android:text="@string/etLongitude"
            android:layout_width="110px" 
            android:layout_height="45px"/>
        <!-- 纬度 -->
        <TextView android:text="@string/txtLatitude"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical" 
            android:paddingLeft="8px"/>
        <EditText android:id="@+id/etLatitude" 
            android:text="@string/etLatitude"
            android:layout_width="110px" 
            android:layout_height="45px"/>
    </LinearLayout>
    <LinearLayout android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <Button android:id="@+id/btnSearch" 
            android:text="@string/btnSearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:layout_weight="4"/>
        <RadioGroup android:id="@+id/rg"
            android:orientation="horizontal" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1">
            <!-- 普通视图 -->
            <RadioButton android:text="@string/normal"
                android:id="@+id/normal" 
                android:checked="true"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
            </RadioButton>
            <!-- 卫星视图 -->
            <RadioButton android:text="@string/satellite"
                android:id="@+id/satellite" 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
            </RadioButton>
        </RadioGroup>
    </LinearLayout>
    <!-- 申请Android Google Map API key,
          如有问题请查看 http://www.cnblogs.com/linjiqin/archive/2011/11/01/2232055.html -->
    <com.google.android.maps.MapView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:enabled="true"
        android:apiKey="0ZUHwocAEeJEiMatLbTddLH_rS92w_CsVyGuNKQ"
        android:id="@+id/mapView"/>

</LinearLayout>

第三步、修改strings.xml配置文件,修改内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, MapActivity!</string>
    <string name="app_name">谷歌地图查询应用</string>
    <string name="txtLongitude">经度:</string>
    <string name="txtLatitude">纬度:</string>
    <string name="btnSearch">查询</string>
    <!-- 福州经纬度 -->
    <string name="etLongitude">119.280</string>
    <string name="etLatitude">26.080</string>
    <string name="satellite">卫星视图</string>
    <string name="normal">普通视图</string>
</resources>

第四步、修改AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.ljq.activity"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".GoogleMapActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- 添加Google Map相关类库 -->
        <uses-library android:name="com.google.android.maps"/>
    </application>
    <uses-sdk android:minSdkVersion="3"/>

    <uses-permission android:name="android.permission.INTERNET"/>    
</manifest> 

第五步、创建ArrowOverLay类,用来在地图中指定的经纬度位置绘制一个朝下的箭头,标明该位置在地图中的确切位置所在:

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Point;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;

/**
 * 在地图中指定的经纬度位置绘制一个朝下的箭头,标明该位置在地图中的确切位置所在
 * 
 * @author Administrator
 *
 */
public class ArrowOverLay extends Overlay{
    private Bitmap bitmap;
    private GeoPoint geoPoint;
    
    public ArrowOverLay(Bitmap bitmap, GeoPoint geoPoint){
        this.bitmap=bitmap;
        this.geoPoint=geoPoint;
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        if(!shadow){
            //获取Projection对象
            Projection projection=mapView.getProjection();
            Point point=new Point();
            //将真实地理坐标转化为屏幕上的坐标
            projection.toPixels(geoPoint, point);
            //绘制箭头图片
            canvas.drawBitmap(bitmap,
                    point.x-bitmap.getWidth()/2,
                    point.y-bitmap.getHeight(), 
                    null);
        }
    }
}

第六步、创建GoogleMapActivity类,实现地图查询功能:

import java.util.List;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.widget.RadioGroup.OnCheckedChangeListener;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;

public class GoogleMapActivity extends MapActivity {
    private Bitmap bitmap;
    private MapView mapView;
    private MapController mapController;
    // 普通视图
    private RadioButton btnNormal;
    // 卫星视图
    private RadioButton btnSatellite;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.arrow);
        mapView = (MapView) findViewById(R.id.mapView);
        // 设置是否显示放大缩小按钮
        mapView.setBuiltInZoomControls(true);
        mapController = mapView.getController();
        //设置倍数(1-21)
        mapController.setZoom(15);
        Button btnSearch = (Button) findViewById(R.id.btnSearch);
        btnSearch.setOnClickListener(onClickListener);
        btnSearch.performClick();
        RadioGroup rg = (RadioGroup) findViewById(R.id.rg); 
        btnNormal = (RadioButton) findViewById(R.id.normal);
        btnSatellite = (RadioButton) findViewById(R.id.satellite); 
        rg.setOnCheckedChangeListener(onCheckedChangeListener);
    }

    /**
     * 用来表示我们是否显示一些路线的信息,这个通常用在地图的飞行模式时才使用
     */
    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }

    View.OnClickListener onClickListener = new View.OnClickListener() {
        
        public void onClick(View v) {
            EditText etLongitude = (EditText) findViewById(R.id.etLongitude);
            EditText etLatitude = (EditText) findViewById(R.id.etLatitude);
            String longitude = etLongitude.getEditableText().toString().trim();
            String latitude = etLatitude.getEditableText().toString().trim();
            if (longitude.equals("") || latitude.equals("")) { // 判断是否输入空值
                Toast.makeText(GoogleMapActivity.this, "对不起,请输入正确的经纬度坐标!", Toast.LENGTH_LONG).show();
                return;
            }
            // 调用方法更新MapView
            updateMapView(Double.parseDouble(latitude), Double.parseDouble(longitude)); 
        }
        
    };

    OnCheckedChangeListener onCheckedChangeListener = new OnCheckedChangeListener() {
        
        public void onCheckedChanged(RadioGroup group, int id) {
            // 普通视图
            if (id == btnNormal.getId()) {
                // mapView.setTraffic(true); //设置为交通模式 
                // mapView.setSatellite(true); //设置为卫星模式
                // mapView.setStreetView(true); //设置为街景模式
                mapView.setTraffic(true);
                mapView.setSatellite(false);
            //卫星视图
            } else if (id == btnSatellite.getId()) {
                mapView.setTraffic(false);
                mapView.setSatellite(true);
            }
        }
        
    };

    /**
     * 更新MapView的视图
     * 
     * @param longitude
     *            经度
     * @param latitude
     *            纬度
     */
    public void updateMapView(double latitude, double longitude) {
        GeoPoint geoPoint = new GeoPoint((int) (latitude * 1E6), (int) (longitude * 1E6));
        mapView.displayZoomControls(true); // 设置显示放大缩小按钮
        mapController.animateTo(geoPoint); // 将地图移动到指定的地理位置
        List<Overlay> ols = mapView.getOverlays();
        ols.clear();
        ols.add(new ArrowOverLay(bitmap, geoPoint));// 添加一个新的Overlay
    }
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值