百度地图添加自定义shp图层_【PyQGIS】使用自定义Python表达式函数(QGIS3)

QGIS中的表达式功能强大,并用于许多核心功能:选择,计算字段值,样式,标签等。QGIS还支持用户定义的表达式。借助一些python编程,您可以定义自己的函数,这些函数可以在表达式引擎中使用。

任务概述

我们将定义一个自定义函数,该函数可查找地图要素的UTM区域编号,并使用此函数编写一个表达式,将鼠标悬停在该点上时将UTM区域显示为地图提示。您将学习的内容

  • 悬停在功能上时如何使用该工具显示自定义文本。Map Tips

获取数据

我们将使用自然地球的“人口稠密的地方”数据集。下载简单(较少列)数据集

程序

  1. ne_10m_populated_places_simple.zip在QGIS浏览器中找到文件,然后将其展开。选择ne_10m_populated_places_simple.shp文件并将其拖到画布上。

    9c981205730a07e4852ca10a05509f90.png

  2. 转到编辑‣选择‣按表达式选择要素...或单击属性工具栏上的使用表达式选择要素按钮。

    4c3ca699d6985c80a0915119dd9ffe3c.png

  3. 在“按表达式选择”对话框中,切换到“函数编辑器”选项卡。在这里,您可以编写将由表达式引擎执行的任何PyQGIS代码。

    f9254f4f976946e9f2018755b62a080f.png

  4. 我们将定义一个自定义函数GetUtmZone,该函数将计算每个功能的UTM区域号。由于QGIS中的自定义功能在功能级别起作用。我们将使用要素几何的质心,并根据质心几何的经度和纬度计算UTM区域。我们还将在区域中添加“ N”或“ S”标记,以指示该区域是在北半球还是南半球。按下屏幕左下方的+按钮,然后输入utm_zones.py文件名。您可以单击底部面板中的“帮助”标签以将其关闭并展开代码面板。

    26613a2710824d462bd4b37c983c7ab4.gif

5. UTM区域是从1到60编号的纵向投影区域。每个UTM区域为6度宽。在这里,我们使用简单的数学公式为给定的经度值找到合适的区域。该公式适用于除少数特殊的UTM区域以外的所有区域。在编辑器窗口中键入以下代码。完成后,单击“保存并加载函数”。

import mathfrom qgis.core import *from qgis.gui import *@qgsfunction(args=0, group='Custom', usesgeometry=True)def GetUtmZone(value1, feature, parent):    """Return the UTM Zone of the feature's geometry as a String"""    centroid = feature.geometry()    longitude = centroid.asPoint().x()    latitude = centroid.asPoint().y()    zone_number = math.floor(((longitude + 180) / 6) % 60) + 1    if latitude >= 0:        zone_letter = 'N'    else:        zone_letter = 'S'    return '%d%s' % (int(zone_number), zone_letter)    

01795029fba69219790870722c1c73c9.png

注意

当前无法从GUI删除表达式文件。如果要删除utm_zone.py文件,可以转到设置‣用户配置文件‣打开活动配置文件文件夹,然后从python‣表达式中删除文件。

6. 切换到“按表达式选择”对话框中的“表达式”选项卡。在“功能”部分中找到并展开“自定义”组。您会GetUtmZone在列表中注意到一个新的自定义功能。现在,我们可以像其他任何函数一样在表达式中使用此函数。在编辑器中键入以下表达式。此表达式将选择所有落在UTM区域中的点33N。单击“缩放到要素”,地图将发生变化,如果单击“选择要素”,则应该看到UTM区域33N中的点将颜色更改为黄色。

GetUtmZone()='33N'

7b5c3468101a2258cb3958f05bb4ae02.png

注意

由于存在错误,此功能在QGIS 3的早期版本中不起作用。已从3.4.5版开始修复此功能。

7. 回到QGIS主窗口中,您应该看到一些点以黄色突出显示。这些是我们在表达式中指定的UTM区域中的点。

7d027ce768fc1c3a571d892f47b1f15a.png

8.  您了解了我们如何定义和使用自定义函数通过表达式选择要素。现在,我们将在另一个上下文中使用相同的功能。QGIS中的隐藏宝石之一是“地图提示”工具。悬停在功能上时,此工具会显示用户定义的文本。右键单击ne_10m_populated_places_simple图层,然后选择属性。

d48e15a809cfc4463f660a49d7dbd565.png

9. 切换到显示选项卡。在这里,您可以输入将鼠标悬停在图层要素上时将显示的任何文本。更好的是,您可以使用图层字段值和表达式来定义一条更有用的消息。点击ɛ按钮。

9ee3f95a5da4728c3ffd276ade95d707.png

10. 您将再次看到熟悉的表达式编辑器。我们将使用该 concat函数将字段的值name和自定义函数的结果连接起来GetUtmZone。输入以下表达式,然后单击“确定”。
concat("name",' | UTM Zone: ', GetUtmZone())

87b89155deffd71c001647d3009440a2.png

11. 您将看到输入的表达式作为“显示”文本的值。单击插入将其添加到HTML框中,然后按OK。

465a8b756b50956b2d2b786e2bc3b41e.png12. 在继续之前,让我们取消选择上一步中选择的功能。转到编辑‣选择‣从所有图层中取消选择要素,或单击属性工具栏上的从所有图层中取消选择要素按钮。

04dd12178030b7a783c81033028eb5d6.png

13. 通过转至查看‣地图提示或单击属性工具栏上的显示地图提示按钮来激活该工具。Map Tips

e6fb74f46bc6085724b56c5cd408633d.png

14. 放大地图的任何区域,然后将鼠标光标放在任何要素上。您将看到城市的名称和相应的UTM区域显示为地图提示。

8a96b9a3cbddce6016ef33b52efba073.gif

56e5bdb4a2a46c40572b472cd5590c4c.png

END

a3b45efe95e1ce15801ee89f62d81043.gif

点击下方“阅读原文”查看更多

3988c2cac8c5bd0164957912d9849ef5.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值