使用 JavaScript 创建一个简单的地图
学习如何使用 Google 地图 JavaScript API 创建地图。
要使用图像和形状自定义地图,最好通过 JavaScript 编码而非简单地将地图嵌入网页来实现。完成此任务需要使用 Google Maps JavaScript API。该 API 的基础 URL 格式如下:`https://maps.googleapis.com/maps/api/js?key=API_KEY&PARAMETERS`。

Maps JavaScript API URL 参数
Google Maps JavaScript API 支持以下 URL 参数:
| 参数 | 类别 | 描述 |
|---|---|---|
| key | 必需 | 指定所需的 API 密钥。 |
| callback | 必需 | 指定在 Maps JavaScript API 完全加载后调用的全局函数名称。 |
| v | 可选 | 指定使用的 Google Maps JavaScript API 版本。 |
| libraries | 可选 | 指定要使用的额外 Maps JavaScript API 库列表,以逗号分隔。 |
| language | 可选 | 指定地图使用的支持语言代码。 |
| region | 可选 | 指定用于地图的两字母区域代码,根据指定地区修改地图行为。例如,英国的区域代码为 GB。 |
| solution_channel | 可选 | 此查询参数专用于 Google 自身的质量控制,无需提供值。 |
| auth_referrer_policy | 可选 | 此参数允许在 Cloud 控制台中配置 HTTP Referrer 限制,以控制哪些 URL 可使用特定 API 密钥。 |
注意:完整的支持的区域代码和语言代码列表可在 Google Maps 开发者平台找到。
创建一个简单地图
要在网页上显示地图,首先需要预留一个位置。这可以通过在 HTML 文件中创建一个命名的 div 元素来实现。
在我们的代码示例中,div 元素被命名为 map。其写法如下:
1<div id="map"></div>
为了控制和自定义地图,还需要在浏览器的 DOM(文档对象模型)中获取对该元素的引用。
在 JavaScript 文件中,使用 document.getElementById() 方法获取 div 元素的引用。由于该元素的 ID 为 map,因此将 map 作为参数传入 document.getElementById() 方法,如下所示:
1document.getElementById("map")
Map 对象
地图由 google.maps.Map JavaScript 类表示。此类的对象在页面上定义一个单独的地图。要创建该类的新实例,可以使用 JavaScript 的 new 操作符。
> **注意**:可以创建多个此类的实例,每个实例在网页上定义一个独立的地图。
每当创建一个新的地图实例时,HTML 页面中的 div 元素就会被定义为地图容器,并通过 document.getElementById() 方法获取其引用。

以下是创建新地图对象并获取命名 div 元素引用的方法:
1map = new google.maps.Map(document.getElementById('map'), {...});
MapOptions 参数
Map 构造函数接收 MapOptions 参数,用于定义地图的中心位置以及用于更改地图视觉特征的样式集。
所有 MapOptions 参数均为可选,没有必需参数。以下是可传递给 Map 构造函数的一些可选参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| center | LatLng | LatLngLiteral |
| zoom | number | 指定地图的初始缩放级别。 |
| disableDefaultUI | boolean | 启用或禁用地图上的默认 UI 控件。 |
| fullscreenControl | boolean | 启用或禁用全屏控件状态。 |
| fullscreenControlOptions | FullscreenControlOptions | 指定全屏控件的选项。 |
| gestureHandling | string | 指定 API 如何处理地图上的手势操作。可能的取值包括:cooperative:在此模式下,滚动事件和单指触摸手势会滚动页面,但无法缩放或平移地图;greedy:在此模式下,触摸手势和滚动事件可用于平移或缩放地图;none:在此模式下,用户无法通过手势操作平移或缩放地图;auto:默认模式,gestureHandling 为 cooperative 或 greedy。 |
| keyboardShortcuts | boolean | 指定用户是否可以使用键盘控制。此参数的默认值为 true。 |
| mapId | string | 指定地图的 Map ID,一旦地图对象构建完成便无法修改。 |
| mapTypeControl | boolean | 启用或禁用地图类型控件状态。 |
| mapTypeControlOptions | MapTypeControlOptions | 指定地图类型控件的选项。 |
| mapTypeId | MapTypeId | string |
| maxZoom | number | 指定地图可显示的最大缩放级别。 |
| minZoom | number | 指定地图可显示的最小缩放级别。 |
| restriction | MapRestriction | 指定限制用户可访问地图区域的边界范围。 |
| rotateControl | boolean | 启用或禁用旋转控件状态。 |
| rotateControlOptions | RotateControlOptions | 指定旋转控件的选项。 |
| scaleControl | boolean | 启用或禁用比例尺控件状态。 |
| scaleControlOptions | ScaleControlOptions | 指定比例尺控件的选项。 |
| scrollwheel | boolean | 指定用户是否可以使用鼠标滚轮进行地图缩放。 |
| streetView | StreetViewPanorama | 指定当在地图上放置街景小人(Pegman)时要显示的街景全景图。 |
| streetViewControl | boolean | 启用或禁用街景控件状态。 |
| streetViewControlOptions | StreetViewControlOptions | 指定街景控件的选项。 |
| styles | Array<MapTypeStyle> | 指定应用于每个默认地图类型的样式。请注意,这些样式仅对卫星、混合和地形模式下的标签和几何图形生效。 |
| tilt | number | 卫星图和混合图还支持 45° 倾斜视角。此功能仅在缩放级别大于 12 时可用。高分辨率影像提供朝向四个基本方向的倾斜视角。 |
| zoomControl | boolean | 启用或禁用缩放控件状态。 |
| zoomControlOptions | ZoomControlOptions | 指定缩放控件的选项。 |
我们可以不带任何参数构造 Map 对象,因为所有参数都是可选的。然而,要显示地图对象,zoom 和 center 参数是必需的。
这些参数可以在创建地图时提供,也可以在创建后使用 setValues() 方法设置。
以下是一个使用 center 和 zoom 参数构造 Map 对象的示例:
1map = new google.maps.Map(document.getElementById('map'), { 2 center: { lat: 47.6059, lng: -122.3345 }, // 西雅图坐标 3 zoom: 8 4});
加载 Maps JavaScript API
使用 script 标签加载 API。该标签可以内联添加到 HTML 文件中,也可以通过 JavaScript 动态添加。在本课程的示例中,采用内联方式,通过添加 script 标签实现,如下所示:
1<script async 2 src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"> 3</script>
在 script 标签中设置了几个推荐的属性,用于通过此 API 嵌入地图。各属性说明如下:
src属性指定 Maps JS API 的加载地址。此示例中的 URL 包含两个参数:key参数是必须提供的 API 密钥。callback是在 Maps JavaScript API 完全加载后调用的全局函数名称。
async属性指示浏览器异步下载并执行脚本。当脚本执行完毕后,将调用callback参数指定的函数。
代码示例
让我们看一个简单的示例,开始学习 Maps JS API。以下地图示例展示了一个以华盛顿州西雅图为中心的地图。
No configuration found for ID: 827f71e073daa9cf39f6aa3efd6769ecbe33024a8c05b96b20eedaad07ae009a
以下是上述代码组件中 HTML 和 JavaScript 文件的简要说明:
在 HTML 文件中,我们执行了以下操作:
- 第 1 行:使用
<!DOCTYPE html>声明应用为 HTML5。 - 第 9 行:创建一个 ID 为
map的div元素,用于在网页上承载地图。 - 第 11–17 行:使用
script标签加载 Maps JS API。
在 JavaScript 文件中,我们执行了以下操作:
- 第 3 行:定义一个名为
initMap的函数,用于创建地图。 - 第 4 行:使用
document.getElementById("map")获取div元素的 DOM 引用。 - 第 5–6 行:设置西雅图的坐标作为地图中心,并将缩放级别设为
8。