MapInfo Pro和Python基础知识

2024-01-07 22:18:58

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。

文章来源:https://blog.csdn.net/BJ_bafangonline/article/details/135409616
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。