自动放大缩小地图

1、拷贝官网源代码

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>自动放大缩小</title>
<style type="text/css">
*{
    margin:0px;
    padding:0px;
}
body, button, input, select, textarea {
    font: 12px/16px Verdana, Helvetica, Arial, sans-serif;
}
p{
    width:603px;
    padding-top:3px;
    overflow:hidden;
}
.btn{
    width:142px;
}
</style>
<script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp"></script>
<script>

//
var init = function() {
    var map = new qq.maps.Map(document.getElementById("container"),{
        center: new qq.maps.LatLng(39.916527,116.397128),
        zoom: 4
    });
    setInterval(function() {
        map.zoomTo((map.getZoom() + 1) % 17);
    }, 2000);
}
</script>
</head>
<body οnlοad="init()">
<div style="width:603px;height:300px" id="container"></div>
<p>每隔2秒钟地图缩放级别增大一级别,到最大级时重设为最小级别。</p>
</body>
</html>

这里

onload 事件会在页面或图像加载完成后立即发生(html)。

setInterval是html DOM方法

setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

创建地图与创建街景不同,创建街景为new qq.maps.Panorama,而创建地图使用API为

new qq.maps.Map

<div> 是一个块级元素。这意味着它的内容自动地开始一个新行。实际上,换行是 <div> 固有的唯一格式表现。可以通过 <div> 的 class 或 id 应用额外的样式。
不必为每一个 <div> 都加上类或 id,虽然这样做也有一定的好处。
可以对同一个 <div> 元素同时应用 class 和 id 属性,但是更常见的情况是只应用其中一种。这两者的主要差异是,class 用于元素组(类似的元素,或者可以理解为某一类元素),而 id 用于标识单独的唯一的元素。
说明一个文档只能有一个container( 如何切换地图和街景呢?

地图的构造函数需要传递地图的中心点纬经度:center,new qq.maps.LatLng,初始缩放级别为4

然后设置一个时钟:每隔两秒地图放大一个级别,最大到17级再重置(腾讯地图API的地图缩放级别为 4-17)(问题是这里getZoom()返回值为0-16,与4-17并不完全一致,个人测试,这里地图级别小于1时重置为1,此时为世界地图,2为亚洲,3为中国全图(个人猜测)4显示各省份,最大可以放大到18级,大于18级不再变化。

通过 getZoom( )方法可以得到当前地图的缩放级别,通过 zoomTo( )方法可以修改地图的缩放级别。示例中定时每隔 2 秒钟将地图的缩放级别加 1,腾讯地图API的地图缩放级别为 4-17。

通过 panTo 方法来设置地图的中心点. map.panTo(newqq.maps.LatLng(39.914850, 116.403765));


纬度和经度

用来表示地图位置的方法。在 腾讯 Maps API qq.maps.LatLng 对象提供了此类机制,来实现一个地理坐标位置。您可以构建一个 LatLng 对象,以 {纬度, 经度} 的顺序传递其参数:

1
2
var myLatitude = 39.916527,myLongitude = 116.397128;
var myLatLng = new qq.maps.LatLng(myLatitude, myLongitude);

如果不知道一个地点(如“天安门”)的地理坐标,可以通过地址解析来得到。请注意:将“地址”转变为地理坐标的过程叫做“地址解析”。有关详细信息,请参见服务部分中的地址解析。也可以通过 《参考手册》 来具体了解这个接口如何去使用。

地图配置

使用腾讯地图 API 默认初始化的地图实例,用户可以对其进行鼠标拖拉、鼠标滚轮进行放大缩小以及鼠标双击放大等操作。我们通过修改地图的配置信息来决定是否希望用户能够通过鼠标操作修改地图状态。腾讯地图API提供了修改地图配置的接口:

1
2
3
4
5
6
7
8
9
10
map = new qq.maps.Map(
document.getElementById( "container" ),
{
center: new qq.maps.LatLng(39.914850, 116.403765),
zoom: 13,
draggable: false ,
scrollwheel: false ,
disableDoubleClickZoom: false
}
);


  1. setDraggable  用来设置地图是否能够鼠标拖拽,默认值为“可以”;
  2. setScrollWheel  用来配置地图是否能够通过鼠标滚轮操作进行放大,默认值为“可以”;
  3. setZoomInByDblClick  用来配置地图是否可以通过鼠标双击进行放大,默认值为“可以”。

地图 DOM 元素

源代码示例

1
<div id= "container" style= "width:500px; height:300px" ></div>

要使地图在网页上显示,必须为其在网页中留出一个位置。通常,我们通过创建名为 div 的元素并在浏览器的文档对象模型 (DOM) 中获取此元素的引用执行此操作。在上述示例中,我们定义名为 "container" 的 div,并使用样式属性设置其尺寸。地图会自动使用容器尺寸调整自身的尺寸。

通过 Map 构造函数创建地图之后,还需要执行一个操作,即将其初始化。初始化通过地图的 panTo() 方法完成。panTo() 方法需要LatLng 经纬度坐标,并且调用此方法必须在对地图执行任何其它操作(包括设置地图本身的任何其它属性)之前。
### 如何使用 Python 和 uiautomator2 实现地图的缩放操作 要通过 Python 使用 `uiautomator2` 来实现地图应用上的放大缩小功能,可以模拟多指手势来完成这一目标。以下是一个详细的说明: #### 1. 安装依赖库 首先需要安装必要的库,包括 `uiautomator2`。 ```bash pip install uiautomator2 ``` #### 2. 初始化设备连接 在脚本中初始化与 Android 设备的连接,并确保设备已启用 USB 调试模式或者 ADB 连接正常。 ```python import uiautomator2 as u2 d = u2.connect() # 自动连接到当前唯一设备 print(d.info) # 打印设备基本信息以确认连接成功 ``` [^3] #### 3. 编写手势函数 为了实现地图的缩放效果,可以通过调用 `swipe` 方法并指定多个手指触控点的位置变化来模拟双指捏合/拉伸动作。 ##### 放大(Zoom In) 定义一个用于执行放大操作的方法如下所示: ```python def zoom_in(device, center_x, center_y, distance=200, steps=50): start_1 = (center_x - distance / 2, center_y - distance / 2) end_1 = (center_x, center_y) start_2 = (center_x + distance / 2, center_y + distance / 2) end_2 = (center_x, center_y) device.swipe(start_1[0], start_1[1], end_1[0], end_1[1], fingers=[{'start': start_1, 'end': end_1}, {'start': start_2, 'end': end_2}], duration=steps * 0.01) ``` 此处参数解释: - `device`: 已经建立好的设备对象。 - `center_x`, `center_y`: 屏幕上中心位置坐标,作为手势起始点计算依据。 - `distance`: 初始两指点间距离,默认设置为屏幕宽度的一半适合大多数情况。 - `steps`: 动作持续时间分解成多少步数,数值越大越平滑但耗时也更久。 [^4] ##### 缩小(Zoom Out) 同样地,创建另一个方法来进行反向的手势处理即缩小视图: ```python def zoom_out(device, center_x, center_y, distance=200, steps=50): start_1 = (center_x, center_y) end_1 = (center_x - distance / 2, center_y - distance / 2) start_2 = (center_x, center_y) end_2 = (center_x + distance / 2, center_y + distance / 2) device.swipe(start_1[0], start_1[1], end_1[0], end_1[1], fingers=[{'start': start_1, 'end': end_1}, {'start': start_2, 'end': end_2}], duration=steps * 0.01) ``` 此段逻辑正好相反于上述放大过程,从集中一点向外扩展至一定范围形成散开趋势从而达到缩小目的。 [^5] #### 4. 应用场景测试 最后,在实际项目里可以根据需求多次调用这些自定义的功能模块去控制不同区域的地图显示状态调整大小比例等等。 例如在一个循环结构里面不断改变输入变量值让程序自动连续做出相应反应直到满足条件为止;也可以绑定按键事件让用户手动触发特定行为等灵活运用方式均可考虑采用。 ```python if __name__ == "__main__": screen_width = d.window_size()[0] screen_height = d.window_size()[1] mid_point_x = int(screen_width / 2) mid_point_y = int(screen_height / 2) zoom_in(d, mid_point_x, mid_point_y) import time;time.sleep(2)#等待动画结束再继续下一步骤 zoom_out(d,mid_point_x ,mid_point_y ) ``` 以上代码片段展示了基本的操作流程演示如何交替进行一次性的放大后再恢复原状的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值