Android Google Map

Android Google Map

Android在我们的应用程序中提供了集成Google地图的功能。Google地图显示当前位置、导航位置方向、搜索位置等等。我们还可以根据需求自定义Google地图。

Google地图的类型

有四种不同类型的Google地图,还可以选择不显示地图。它们在地图上提供不同的视图。这些地图如下:

  1. 正常地图: 此类型的地图显示一般道路地图、河流等自然特征以及人造特征。
  2. 混合地图: 此类型的地图将卫星照片数据与一般道路地图结合显示。它还显示道路和特征标签。
  3. 卫星地图: 卫星类型显示卫星照片数据,但不显示道路和特征标签。
  4. 地形地图: 这种类型显示照片数据。包括颜色、等高线和标签以及透视阴影。
  5. 无地图: 此类型显示一个空的网格,没有加载任何瓷砖。

不同类型地图的语法

googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);

谷歌地图的方法

谷歌地图API提供了几种方法,可以帮助定制谷歌地图。这些方法如下:

方法 描述
addCircle(CircleOptions options) 此方法向地图上添加圆形。
addPolygon(PolygonOptions options) 此方法向地图上添加多边形。
addTileOverlay(TileOverlayOptions options) 此方法向地图上添加瓦片覆盖图层。
animateCamera(CameraUpdate update) 此方法根据更新内容以动画方式移动地图。
clear() 此方法从地图上移除所有内容。
getMyLocation() 此方法返回当前显示的用户位置。
moveCamera(CameraUpdate update) 此方法根据更新内容重新定位地图相机。
setTrafficEnabled(boolean enabled) 此方法打开或关闭交通图层。
snapshot(GoogleMap.SnapshotReadyCallback callback) 此方法对地图进行快照。
stopAnimation() 此方法停止地图相机动画(如果有进行中的动画)。

谷歌地图示例

让我们创建一个集成到我们的应用程序中的谷歌地图的示例。为此,我们选择谷歌地图活动。

Android Google Map

将来自google_map_api.xml文件的URL复制以生成Google地图密钥。

Android Google Map

将复制的URL粘贴到浏览器中。它将打开以下页面。

Android Google Map

点击“Create API key”来生成API密钥。

Android Google Map

点击Create API key后,将生成我们的API密钥,显示以下屏幕。

Android Google Map

复制此生成的 API 密钥到我们的 google_map_api.xml 文件中

Android Google Map

activity_maps.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="example.com.mapexample.MapsActivity" />

MapsActivity.java

在MapsActivity.java类中获取GoogleMap对象,我们需要实现OnMapReadyCallback接口并重写onMapReady()回调方法。

package example.com.mapexample;

import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback{

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

    }
}

所需权限

在AndroidManifest.xml文件中添加以下用户权限。

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

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="example.com.mapexample">
    <!--
         The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
         Google Maps Android API v2, but you must specify either coarse or fine
         location permissions for the 'MyLocation' functionality. 
    -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />

        <activity
            android:name=".MapsActivity"
            android:label="@string/title_activity_maps">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

build.gradel

将以下依赖项添加到 build.gradel 文件中。

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.google.android.gms:play-services-maps:11.8.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

输出

Android Google Map

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程