MapInfo Pro和Python基础知识

MapInfo Pro用户长期以来一直使用MapBasic脚本语言来自动化任务、构建自定义应用程序、创建Pro的特定领域自定义、将Pro与其他工具集成等。

MapBasic主要是一种编译语言,这对非程序员来说有点障碍。

我们确实有MapBasic窗口,它允许MapBasic语句和代码直接执行(“解释”),这非常有用。然而,与编译的MapBasic相比,它确实有许多限制,例如不支持控制语句,并且不可调试。最近,我们一直在改进解释MapBasic,甚至通过新的SQL窗口扩展它的使用。我们将继续这样做。


MapBasic一直是Pro在我们的用户中取得成功的关键之一。

那么,为什么是Python?

这篇文章将解释2019.1的理由、方向和内容。接下来的文章将展示如何使用Python以及如何入门。

这是怎么一回事?

Python也是一种解释性脚本和编程语言,在所有领域都有广泛的支持和使用。

学习起来又快又容易。

从Python.org网站:https://www.python.org/

任何其他语言的经验丰富的程序员都可以很快学会Python,初学者发现干净的语法和缩进结构很容易学习。

Python是一种功能齐全的语言,用于从编写Pro等应用程序到创建网站,再到数据科学分析和可视化的所有方面。因此,有许多可用的库和资源可以帮助您。Python.org是开始学习更多知识的好地方。

大多数大学毕业后从事任何计算机课程工作,甚至GIS的学生都已经接触过Python。

有一种更强大、更广为人知、更常用的Pro脚本语言可以调试,这将帮助许多现有用户,并有望吸引更多用户。这是对MapBasic向前移动的补充。

从Pro 17.03版本开始,我们启用了在Pro中使用Python创建插件或应用程序的功能。虽然这是一个很好的第一步,我们确实收到了一些兴趣,但除了经验丰富的python开发人员之外,这实际上太难设置了。

我们为MapInfo Pro 2019.1做了什么?

从Pro 2019.1开始,我们正在努力使Python成为Pro中的一流脚本语言。我们还使通过Python创建外接程序变得更加容易。

首先,Python 3.7现在已与Pro一起安装。它是一个可选组件,因此如果您不需要它,可以通过自定义安装将其关闭。(如果是这样的话,现在就停止阅读…)

Pro默认安装几个众所周知的Python库,如numpy、scipy、seaborn、panda、matplotlib、osgeo/gdal、ptvsd、mi_py_debugger。可以根据需要添加和删除其他模块。

在Pro中运行python代码

现在,您可以通过“运行程序”对话框打开并运行python文件(*.py)。这使用了mapbasic语句“run application”file.py。它也可以从mapbasic窗口或编译的mbx中调用。

在未编译MapBasic的情况下创建外接程序

现在,您可以仅使用Python创建外接程序。外接程序与脚本的不同之处在于,它保持加载状态,并且可以添加ui项,如功能区、上下文菜单和停靠窗口。请注意,stock.mbx是在后台自动生成的。

注册基于Python的外接程序

现在,您可以注册并自动加载.py文件加载项。

调试脚本和加载项

python脚本和加载项都可以调试。我们建议并解释如何使用免费的Visual Studio代码应用程序进行此操作。

Python控制台

您可以使用任何Python IDE来开发代码,但我们通过MapInfo Marketplace提供了一个小型Python控制台,以帮助交互式编辑和运行小型Python脚本。它支持语法高亮显示和智能感知。

访问Pro的对象模型

除了MapBasic语句之外,MapInfo Pro还有一个向MapBasic和公开的对象模型。NET开发人员可以轻松地自定义功能区、添加上下文菜单、创建停靠窗口、映射小工具栏等。它还有许多事件,当用户或Pro执行诸如打开工作区或表、进行选择、运行命令等操作时,您可以得到通知。

通过使用Python.NET实现中,我们能够非常容易地将整个对象模型公开给Python代码,甚至支持intellisense。ExtensibilityReference是一个记录对象模型的帮助文件,现在与Pro一起安装(除了与MapBasic一起安装)。发行说明中的Python信息已集成到ExtensionReference中。

随着我们继续扩展对象模型,它将有助于MapBasic。NET和Python脚本/开发人员。

通过Python打开Native和NativeX表

Python安装中包括Osgeo,它包含GDAL——一个众所周知的用于读取和写入地理空间数据的开源库。我们包含了一个名为EFAL的新gdal驱动程序,它是公开的,可以读写Native和NativeX表,这使得与其他python或第三方工具的交互更加容易。

Startup.py

如果发现startup.py文件在全局作用域设置中执行。类似于startup.wor的查找方式。

Python入门

MapInfo Marketplace还提供了一款名为“PythonQuickStart”的应用程序,其中包含一些示例代码和一些关于在Pro中开始使用Python的参考信息。现在它是可用的,但没有我们想要的样品数量。我们将在不久的将来对其进行改进和更新。

Python脚本的快速示例



这是迄今为止我们在MapInfoPro中使用Python的原因和内容的总结。

下面是一个自动化脚本示例:

这是我们正在讨论的那种自动化的一个很好的例子。

如果您需要帮助,请私信给我。

花了大约一个小时使用MapInfo Marketplace中PythonQuickStart插件附带的一些示例数据创建了这个。

它在一组列上创建一个范围主题,并根据列名将其导出为jpg文件。

我使用MapBasic窗口将主题语句和保存窗口作为语句进行回显,然后将它们添加到我的Python脚本中。

Here is the script:

### Description: Shows how to automate the export of multiple themes to jpg

### Category: Mapping

import os

import time

try:

 # open workspace with our map

 modulePath = get_current_module_path()

 table = os.path.abspath(os.path.dirname(modulePath) + r"\..\Data\Demographic_exampleX.TAB")

 do('open table "{}" as demographic'.format(table))

 # create list of columns to them on

 themeColumns = [

 'Age_0_4_P',

 'Age_5_9_P',

 'Age_10_14_P',

 'Age_15_19_P',

 'Age_20_24_P',

 'Age_25_29_P',

 'Age_30_34_P',

 'Age_35_39_P',

 'Age_40_44_P',

 'Age_45_49_P',

 'Age_50_54_P',

 'Age_55_59_P',

 'Age_60_64_P',

 'Age_65_69_P',

 'Age_70_74_P',

 'Age_75_79_P',

 'Age_80_84_P',

 'Age_85_89_P'

 'Age_90_94_P',

 'Age_95_99_P',

 'Age_100_yr_over_P',

 'Age_Total'

 ]

 for col in themeColumns:

 # open map window and zoom

 do('map from demographic width 4 units "in" height 4 units "in" floating')

 do('set map window frontwindow() zoom entire')

 # create the thematic

 do('shade window frontwindow() 1 with {} ranges apply all use color Brush (2,16777168,16777215) 0: 10 Brush (2,16777168,16777215) Pen (1,2,0) ,10: 16 Brush (2,11591824,16777215) Pen (1,2,0) ,16: 21 Brush (2,5296240,16777215) Pen (1,2,0) ,21: 30 Brush (2,2146448,16777215) Pen (1,2,0) ,30: 80 Brush (2,27552,16777215) Pen (1,2,0) default Brush (2,16777215,16777215) Pen (1,2,0) # use 1 round 0.1 inflect off Brush (2,16744640,16777215) at 3 by 1 color 1 # '.format(col))

 # export map to jpg using column name

 dir = os.path.join(os.path.dirname(modulePath),'Output')

 if not os.path.exists(dir):

 os.mkdir(dir)

 file = r'{}\{}.jpg'.format(dir,col)

 do('Save Window frontwindow() As "{}" Type "JPEG" Width 4 Units "in" Height 4 Units "in" Resolution 120'.format(file))

 # close the map window

 do('close window frontwindow()')

 # clean up

 do('close table demographic')

except Exception as e:

 print("Error: {}".format(e.__cause__))



这是文件资源管理器中输出的图片:



只要付出一点额外的努力,我们就可以将地图放入带有标题、图例、比例尺等的布局中,并将其导出为图像或.pdf。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323449.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB 启动时:服务名无效

1.问题场景 电脑睡眠后,再连接服务发现无法连接,启动服务报:服务名无效。 2.打开服务管理: 发现服务中没有MongoDB的服务 3.解决 (1)先找打MongoDB安装路径,把data文件夹下所有文件删除 &a…

数据分析求职-简历准备

简历在整个求职过程中的重要性不言而喻,今天咱们来聊求职过程中简历准备的那些事儿~ 1. 简历究竟有啥用 求职的流程简单说就是:网申->笔试->面试->offer 其中网申环节,简历100%决定了你的通过与否,这个点大家都知道。…

Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found

IDEA创建spring boot项目的时候,pom.xml 文件中spring-boot-maven-plugin报红。 解决方法: 给spring-boot-maven-plugin指定版本 原因: idea自动找的插件版本是其他版本的,和自己设置的不同,导致idea在本地maven仓库…

十、基本对话框大集合(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 Qt提供了很多标准的对话框。例如标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框 (QFontDialog)、标准输入对话框 (QInputDialog) 及消息对话框 (QMessageBox)。本文展示各…

[每周一更]-(第50期):Go的垃圾回收GC

参考文章: https://juejin.cn/post/7111515970669117447https://draveness.me/golang/docs/part3-runtime/ch07-memory/golang-garbage-collector/https://colobu.com/2022/07/16/A-Guide-to-the-Go-Garbage-Collector/https://liangyaopei.github.io/2021/01/02/g…

详细解读QLC SSD无效编程问题-1

此前小编关于QLC SSD有过多篇文章,具体参考如下: 为什么QLC NAND才是ZNS SSD最大的赢家? HDD与QLC SSD深度对比:功耗与存储密度的终极较量 QLC SSD在数据中心的发展前景如何? 多维度深入剖析QLC SSD硬件延迟的来源 …

肠道炎症与年龄和阿尔茨海默病病理学相关:一项人类队列研究

谷禾健康 ​阿尔茨海默 研究表明,慢性低水平的炎症(“炎症衰老”)可能是年龄相关疾病的一个介导因素,而肠道微生物通过破坏肠道屏障可能会促进炎症。 虽然老化和阿尔茨海默病(AD)与肠道微生物群组成的改变有…

Pytest fixture 及 conftest详解!

前言 fixture是在测试函数运行前后,由pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等等。fixture是pytest的精髓所在,类似u…

力扣题:高精度运算-1.3

力扣题-1.3 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:43. 字符串相乘 解题思想:类似计算时采用的竖式乘法。首先取得num2的低位,并补齐对应的0,然后与num1进行相乘,然后进行字符串的相加操作。…

D6208双向直流马达驱动芯片 用于IPC产品,可兼容BA6208,噪声低 ,工作电源电压范围宽。

D6208 是一块单片双向马达驱动电路,它使用TTL电平的逻辑信号就能控制卡式录音机和其它电子设备中的双向马达。该电路由一个逻辑部分和一个功率输出部分组成。逻辑部分控制马达正、反转向及制动,功率输出部分根据逻辑控制能提供100mA(典型值&a…

Agilent安捷伦E4990A阻抗分析仪20Hz

Agilent安捷伦E4990A阻抗分析仪性能卓越,适用于元器件、半导体和材料测量。它具有宽广的频率范围,从20Hz到120MHz,能够适应各种不同的阻抗测量需求。在宽阻抗范围内,该仪器能够提供出色的0.045%(典型值)基本…

cesium粒子爆炸效果

效果: //添加爆炸模型window.swpecesium.addEntity.addModel({id: "model",position: {lon: 116.34516786934411,lat: 39.99753297677145,},config: {url: "./model/baozha/scene.gltf",minSize: 200,maxSize: 300,},});var scene viewer.scen…