直接上代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<iframe
width="1400"
height="800"
style="border:0"
loading="lazy"
allowfullscreen
referrerpolicy="no-referrer-when-downgrade"
src="https://www.google.com/maps/embed/v1/directions?key=(你的谷歌地图API)
&origin=30.532061728155647, 114.35913349402081
&destination=30.52901144940713, 114.35757996556374">
</iframe>
<title>Document</title>
</head>
<body>
</body>
</html>
我来详细解释一下参数:
参数 | 类型 | 说明 | 已接受的值 |
---|---|---|---|
origin | 必需 | 定义要显示路线的起点。 | 经过网址转义的地点名称、地址、Plus 代码、纬度/经度坐标或地点 ID。 在对空格进行转义时,Maps Embed API 支持 + 和 %20 。例如,将“City Hall, New York, NY”转换为 City+Hall,New+York,NY ,或将 Plus 代码“849VCWC8+R9”转换为 849VCWC8%2BR9 。 |
destination | 必需 | 定义路线的终点。 | 经过网址转义的地点名称、地址、Plus 代码、纬度/经度坐标或地点 ID。 在对空格进行转义时,Maps Embed API 支持 + 和 %20 。例如,将“City Hall, New York, NY”转换为 City+Hall,New+York,NY ,或将 Plus 代码“849VCWC8+R9”转换为 849VCWC8%2BR9 。 |
waypoints | 选填 | 指定一个或多个中转地点,以便在出发地和目的地之间规划路线。 | 地点名称、地址或地点 ID。 可以使用竖线字符 (|) 分隔地点(例如 Berlin,Germany|Paris,France ),从而指定多个航点。您最多可以指定 20 个航点。 |
mode | 选填 | 定义出行方式。如果未指定模式,Maps Embed API 会显示与指定路线最相关的一种或多种模式。 | driving 、walking (首选步道和人行道,如有)、bicycling (采用自行车道和首选街道(如有)、transit 或 flying 。 |
avoid | 选填 | 指定要在路线中避开的地图项。请注意,这不会排除包含受限地图项的路线,而是会对结果设置偏向,以获得更有利的路线。 | tolls 、ferries 和/或 highways 。 请使用竖线字符分隔多个值(例如 avoid=tolls|highways )。 |
units | 选填 | 指定结果中显示距离时的测量方法、公制或英制。如果未指定 units ,则查询中的 origin 国家/地区决定要使用的单位。 | metric 或 imperial |
center | 选填 | 定义地图视图的中心。 | 接受以英文逗号分隔的纬度和经度值;例如:37.4218,-122.0840 。 |
zoom | 选填 | 设置地图的初始缩放级别。 | 值的范围为 0 (全世界)到 21 (个别建筑物)。上限可能因所选位置的可用地图数据而异。 |
maptype | 选填 | 定义要加载的地图图块类型。 | roadmap (默认)或 satellite |
language | 选填 | 定义界面元素以及在地图图块上显示标签时所用的语言。默认情况下,访问者看到的地图将以自己的语言显示。只有部分国家/地区图块支持此参数;如果图块集不支持请求的特定语言,则将使用该图块集的默认语言。 | |
region | 选填 | 根据地缘政治敏感性定义要显示的相应边界和标签。 | 接受以双字符(非数字)Unicode 区域子标记的形式指定的区域代码,映射到熟悉的 ccTLD(“顶级域名”)双字符值。如需了解支持的地区,请参阅 Google Maps Platform 覆盖范围详细信息。 |
当然,在给定的代码中,我计算的是从武汉大学信息学部16舍到武汉大学39栋的路线。
使用Alt+B打开网页,显示内容如下:
还有一个小细节,我们在我们手机应用指南针上可以看到我们当前的经纬度,但是谷歌要求的经纬度表示是小数点格式的,这时候就需要我们进行转化,转化的代码如下:
#include <iostream>
double convertToDecimal(int degrees, int minutes, int seconds) {
double decimal = degrees + (minutes / 60.0) + (seconds / 3600.0);
return decimal;
}
int main() {
int latitudeDegrees, latitudeMinutes, latitudeSeconds;
int longitudeDegrees, longitudeMinutes, longitudeSeconds;
std::cout << "请输入纬度的度、分、秒:" << std::endl;
std::cout << "度:";
std::cin >> latitudeDegrees;
std::cout << "分:";
std::cin >> latitudeMinutes;
std::cout << "秒:";
std::cin >> latitudeSeconds;
std::cout << "请输入经度的度、分、秒:" << std::endl;
std::cout << "度:";
std::cin >> longitudeDegrees;
std::cout << "分:";
std::cin >> longitudeMinutes;
std::cout << "秒:";
std::cin >> longitudeSeconds;
double latitudeDecimal = convertToDecimal(latitudeDegrees, latitudeMinutes, latitudeSeconds);
double longitudeDecimal = convertToDecimal(longitudeDegrees, longitudeMinutes, longitudeSeconds);
std::cout << "纬度(十进制):" << latitudeDecimal << std::endl;
std::cout << "经度(十进制):" << longitudeDecimal << std::endl;
return 0;
}
由于谷歌地图有偏差,所以我们将转化之后的数据带入进去我们的模型,会不太准确,所谓是否准确,主要是看我们对精度的要求,运行结果可知,大概会偏移几个操场的距离。
不过对于我们来说,我们理论上可以通过添加偏置来使我们得到的坐标和谷歌地图要求的坐标相拟合。