爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 24587|回复: 0

[源代码] [已收纳]Python之PyQt5与高德地图交互通信案例

[复制链接]

新浪微博达人勋

发表于 2021-5-21 11:06:34 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
PyQt5与高德地图.png





源代码:


# -*- coding: utf-8 -*-
'''
PyQt中高德地图交互与通信
'''
from PyQt5.QtWidgets  import QApplication , QWidget , QVBoxLayout , QPushButton
from PyQt5.QtWebEngineWidgets import QWebEngineView
import sys
# 创建一个 application实例
app = QApplication(sys.argv)  
win = QWidget()
win.setWindowTitle('PyQt高德地图点标记互动通信')
# 创建一个垂直布局器
layout = QVBoxLayout()
win.setLayout(layout)
# 创建一个 QWebEngineView 对象
view = QWebEngineView()
view.setHtml('''
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>点标记鼠标操作</title>
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/>
    <style>
        html, body, #container {
            height: 100%;
            width: 100%;
        }
    </style>
</head>
<body>
<div id="container"></div>
<!-- <div id="tip" class="info">点标记上右击鼠标,弹出右键菜单</div> -->
<script type="text/javascript"
        src="https://webapi.amap.com/maps?v=1.4.15&key=&key=您申请的key值&plugin=AMap.MouseTool"></script>
<script type="text/javascript">
//新建地图:
var map = new AMap.Map("container", {
    center: [116.397, 39.918],
    zoom: 14,
    resizeEnable: true
});
//点击操作对应的响应函数/槽函数:
var clickHandler = function(e) {
var marker = new AMap.Marker({
position: new AMap.LngLat(e.lnglat.getLng(),e.lnglat.getLat()),
draggable:true
});
map.add(marker);//把点标记在地图上
//点的右键快捷键:
var contextMenu = new AMap.ContextMenu();//创建右键菜单
contextMenu.addItem("删除点", function () {map.remove(marker);}, 0);
contextMenu.addItem("显示坐标", function () {alert(marker.getPosition());}, 1);
//绑定鼠标右击事件——弹出右键菜单
marker.on('rightclick', function (e) {
    contextMenu.open(map, e.lnglat);
});
};
//绑定地图单击事件:
map.on('click', clickHandler);
//获得地图上所有marker的函数:
var getAllMarkerPosition = function() {
var markers = map.getAllOverlays('marker');
var n=markers.length;
var book=[];
for (var i=0;i<n;i++){
book=book.concat(markers.getPosition());
}
return book;//作为返回值给Qt
}
//留给PyQt调用的alert提示:
var print=function(x){
alert(x);
}
</script>
</body>
</html>
''')
# 创建一个按钮去调用 JavaScript代码
button = QPushButton('获得所有点标记')
def js_callback(result):
    n=len(result)
    print('Qt收到',n,'个点\n坐标分别是:')
    view.page().runJavaScript("print('Qt收到"+str(n)+"个点');")
    for i in result:
        print(i['lng'],',',i['lat'])
def complete_name():   
    view.page().runJavaScript('getAllMarkerPosition();',js_callback)
# 按钮连接 'complete_name'槽,当点击按钮是会触发信号
button.clicked.connect(complete_name)
# 把QWebView和button加载到layout布局中
layout.addWidget(view)
layout.addWidget(button)
# 显示窗口和运行app
win.show()
sys.exit(app.exec_())




终端输出:


Qt收到 3 个点坐标分别是:116.393567 , 39.920436116.397858 , 39.918987116.396571 , 39.915893

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表