Ubuntu上SuperMap iDesktop的Python扩展使用

原创
2019/10/29 11:42
阅读数 1K

SuperMap iDesktop的多平台版(支持Linux,包括Ubuntu分发版)可以使用python进行数据的交互操作。可以打开一个控制台交互访问当前环境的工作空间、数据源、地图等,也可以将python片段挂载到工具箱中,基于GUI进行交互操作,以及将python代码放入到处理流程之中,实现一系列的自动化数据处理。

  • 支持anaconda进行python环境的管理,方便多个python环境的切换。
  • 支持安装其它的标准python库,如GDAL、proj等等。
  • 支持本地其它的计算能力调用,如GPU、AI等。
  • 支持iClient python与iServer和Online服务交互。

1、打开python窗口

打开菜单栏,进入“开始”菜单项,选择“python”,即可打开python console窗口。

python窗口分为两个部分,上部为输出区域,下部为输入区域。

  • 输入窗口支持自动完成,按tab键即可弹出提示。

2、创建和切换python运行环境

通过左侧的工具栏,可以打开python文件来运行,或者进行python运行环境的设置。

  • 几个强大的特性:
    • 支持anaconda,可以在多个环境间切换。
    • 支持导入/导出python运行环境,方便再配置和迁移环境,在工作组内的共享。

3、处理流程中的python算子

可以将运行成功的python代码挂载到桌面的工具箱中,从而通过图形界面进行快速调用。

也可以将python代码加入处理流程中,通过构建一个处理流程来实现更复杂的数据处理和分析的自动化调用。

4、交互运行python代码

在python窗口的下半部分,输入并实验:

#导入iobjectspy的python库。
from iobjectspy import *

#获得工作空间对象。
ws=workspace()

#获得数据源集合对象。
ds=ws.datasources

#遍历数据源集合,输出相关信息。
for i in ds:
	print(i)

#遍历数据源集合,输出每个数据集的别名。
>>> for i in ds:
>>>     print(i.alias)
>>>     
SuperMapCloud
ChinaRS

查看工作空间对象ws的帮助信息,输入:

help(ws)

提示信息输出如下:

>>> help(ws)
Help on Workspace in module iobjectspy._jsuperpy.data.ws object:

class Workspace(iobjectspy._jsuperpy.data._jvm.JVMBase)
 |  工作空间是用户的工作环境,主要完成数据的组织和管理,包括打开、关闭、创建、保存工作空间文件。工作空间(Workspace)是 SuperMap 中的一个重要的
 |  概念,工作空间存储了一个工程项目(同一个事务过程)中所有的数据源,地图的组织关系。通过工作空间对象可以管理数据源和地图。工作空间中只存储数据源的
 |  连接信息和位置等,实际的数据源都是存储在数据库或者 UDB 中。工作空间只存储地图的一些配置信息,如地图包含图层的个数,图层引用的数据集,地图范围,
 |  背景风格等。在当前版本中,一个程序只能存在一个工作空间对象,如果用户没有打开特定的工作空间,程序将默认创建一个工作空间对象。用户如果需要打开新的
 |  工作空间对象,需要先将当前工作空间保存和关闭,否则,存储在工作空间中的一些信息可能会丢失。
 |  
 |  例如,创建数据源对象::
 |  
 |      >>> ws = Workspace()
 |      >>> ws.create_datasource(':memory:')
 |      >>> print(len(ws.datasources))
 |      1
 |      >>> ws_a = Workspace()
 |      >>> ws_a.create_datasource(':memory:')
 |      >>> ws == ws_a
 |      True
 |      >>> print(len(ws_a.datasources))
 |      2
 |      >>> ws.close()
 |  
 |  Method resolution order:
 |      Workspace
 |      iobjectspy._jsuperpy.data._jvm.JVMBase
 |      builtins.object
 |  
 |  Methods defined here:
 |  
 |  __init__(self)
 |      Initialize self.  See help(type(self)) for accurate signature.
 |  
 |  add_map(self, map_name, map_or_xml)
 |      添加 Map 到当前工作空间中
 |      
 |      :param str map_name: 地图名称
 |      :param map_or_xml: 地图对象或地图的 XML 描述
 |      :type map_or_xml: Map or str
 |      :return: 新添加的地图在此地图集合对象中的序号。
 |      :rtype: int
 |  
 |  clear_maps(self)
 |      删除此地图集合对象中的所有地图,即工作空间保存的所有地图。
 |      
 |      :return: Workspace 对象自身
 |      :rtype: Workspace
 |  
 |  close_all_datasources(self)
 |      关闭所有的数据源
 |  
 |  close_datasource(self, item)
 |      关闭指定的数据源。
 |      
 |      :param item: 数据源的别名或序号
 |      :type item: str or int
 |      :return: 关闭成功返回 True,否则返回 False
 |      :rtype: bool
 |  
 |  create_datasource(self, conn_info)
 |      根据指定的数据源连接信息,创建新的数据源。
 |      
 |      :param conn_info: udb文件路径或数据源连接信息:
 |                        - 数据源连接信息。具体可以参考 :py:meth:`DatasourceConnectionInfo.make`
 |                        - 如果 conn_info 为 str 时,可以为 ':memory:', udb 文件路径,udd 文件路径,dcf 文件路径,数据源连接信息的 xml 字符串
 |                        - 如果 conn_info 为 dict,为  :py:meth:`DatasourceConnectionInfo.to_dict` 的返回结果。
 |      :type conn_info: str or dict or DatasourceConnectionInfo
 |      :return: 数据源对象
 |      :rtype: Datasource
 |  
 |  get_datasource(self, item)
 |      获取指定的数据源对象。
 |      
 |      :param item: 数据源的别名或序号
 |      :type item:  str or int
 |      :return: 数据源对象
 |      :rtype: Datasource
 |  
 |  get_map(self, index_or_name)
 |      获取指定名称或序号的地图对象
 |      
 |      :param name_or_index: 指定的地图名称或序号
 |      :type name_or_index: int or str
 |      :return: 地图对象
 |      :rtype: Map
 |  
 |  get_map_xml(self, index_or_name)
 |      返回指定名称或序号的地图的 XML 描述
 |      
 |      :param index_or_name: 指定的地图名称或序号
 |      :type index_or_name: int or str
 |      :return: 地图的 XML 描述
 |      :rtype: str
 |  
 |  get_maps(self)
 |      返回所有的Map
 |      
 |      :return: 当前工作空间中的所有 Map
 |      :rtype: list[Map]
 |  
 |  index_of_datasource(self, alias)
 |      查找指定的数据源别名所在序号。不存在将抛出异常。
 |      
 |      :param str alias: 数据源别名
 |      :return: 数据源所在的序号
 |      :rtype: int
 |      :raise ValueError: 不存在指定的数据源别名时抛出异常。
 |  
 |  insert_map(self, index, map_name, map_or_xml)
 |      在指定序号的位置处添加一个地图,地图的内容由 XML 字符串来确定。
 |      
 |      :param int index: 指定的序号。
 |      :param str map_name: 指定的地图名称。该名称不区分大小写。
 |      :param map_or_xml: 用来表示待插入地图或地图的 XML 字符串。
 |      :type map_or_xml: Map or str
 |      :return: 如果插入地图成功,返回 true;否则返回 false。
 |      :rtype: bool
 |  
 |  is_contains_datasource(self, item)
 |      是否存在指定序号或者数据源别名的数据源
 |      
 |      :param item: 数据源的别名或序号
 |      :type item:  str or int
 |      :return:  存在返回 True,否则返回 False
 |      :rtype: bool
 |  
 |  is_modified(self)
 |      返回工作空间的内容是否有改动,如果对工作空间的内容进行了一些修改,则返回 True,否则返回 False。工作空间负责管理数据源、地图,其中任何
 |      一项内容发生变动,此属性都会返回 True,在关闭整个应用程序时,先用此属性判断工作空间是否已有改动,可用于提示用户是否需要存盘。
 |      
 |      :return: 对工作空间的内容进行了一些修改,则返回 True,否则返回 False
 |      :rtype: bool
 |  
 |  modify_datasource_alias(self, old_alias, new_alias)
 |      修改数据源的别名。数据源别名不区分大小写
 |      
 |      :param str old_alias: 待修改的数据源别名
 |      :param str new_alias: 数据源的新别名
 |      :return: 如果对数据源修改别名成功,则返回 True,否则返回 False
 |      :rtype: bool
 |  
 |  open_datasource(self, conn_info, is_get_existed=True)
 |      根据数据源连接信息打开数据源。如果设置的连接信息是UDB类型数据源,或者 is_get_existed 为 True,如果工作空间中已经存在对应的数据源,则
 |      会直接返回。不支持直接打开内存数据源,要使用内存数据源,需要使用 :py:meth:`create_datasource` 创建内存数据源。
 |      
 |      :param conn_info: udb文件路径或数据源连接信息:
 |                        - 数据源连接信息。具体可以参考 :py:meth:`DatasourceConnectionInfo.make`
 |                        - 如果 conn_info 为 str 时,可以为 ':memory:', udb 文件路径,udd 文件路径,dcf 文件路径,数据源连接信息的 xml 字符串
 |                        - 如果 conn_info 为 dict,为  :py:meth:`DatasourceConnectionInfo.to_dict` 的返回结果。
 |      :type conn_info: str or dict or DatasourceConnectionInfo
 |      :param bool is_get_existed: is_get_existed 为 True,如果工作空间中已经存在对应的数据源,则会直接返回。为 false 时,则会打开新的数据源。对于 UDB 类型数据源,无论 is_get_existed 为 True 还是 False,都会优先返回工作空间中的数据源。判断 DatasourceConnectionInfo 是否与工作空间中的数据源是同一个数据源,可以查看 :py:meth:`DatasourceConnectionInfo.is_same`
 |      :return: 数据源对象
 |      :rtype: Datasource
 |      
 |      
 |      >>> ws = Workspace()
 |      >>> ds = ws.open_datasource('E:/data.udb')
 |      >>> print(ds.type)
 |      EngineType.UDB
 |  
 |  remove_map(self, index_or_name)
 |      删除此地图集合对象中指定序号或名称的地图
 |      
 |      :param index_or_name: 待删除地图的序号或名称
 |      :type index_or_name: str or int
 |      :return: 删除成功,返回 true;否则返回 false。
 |      :rtype: bool
 |  
 |  rename_map(self, old_name, new_name)
 |      修改地图对象的名称
 |      
 |      :param str old_name: 地图对象当前的名称
 |      :param str new_name: 指定的新的地图名称
 |      :return: 修改成功返回 True,否则返回  False
 |      :rtype: bool
 |  
 |  set_caption(self, caption)
 |      设置工作空间显示名称。
 |      
 |      :param str caption: 工作空间显示名称
 |  
 |  set_description(self, description)
 |      设置用户加入的对当前工作空间的描述或说明性信息
 |      
 |      :param str description: 用户加入的对当前工作空间的描述或说明性信息
 |  
 |  set_map(self, index_or_name, map_or_xml)
 |      将指定地图或地图的 XML 字符串表示的地图替换地图集合对象中指定序号的地图。
 |      
 |      :param index_or_name: 指定的序号或地图名称
 |      :type index_or_name: int or str
 |      :param map_or_xml: 用来替换指定地图的新地图的 XML 字符串表示。
 |      :type map_or_xml: Map or str
 |      :return: 如果操作成功,返回 true;否则返回 false。
 |      :rtype: bool
 |  
 |  ----------------------------------------------------------------------
 |  Class methods defined here:
 |  
 |  close() from builtins.type
 |      关闭工作空间,关闭工作空间将会销毁当前工作空间的实例对象。工作空间的关闭之前确保使用的该工作空间的地图等内容关闭或断开链接。
 |      如果工作空间是在 Java 端注册的,将不会实际关闭工作空间对象,只会解除对 Java 工作空间对象的绑定关系,后续将不能继续操作 Java
 |      的工作空间对象,除非使用 Workspace() 构造新的实例。
 |  
 |  create(conn_info, save_existed=True, saved_connection_info=None) from builtins.type
 |      创建一个新的工作空间对象。在创建新的工作空间前,用户可以通过设定 save_existed 为 True 先保存当前工作空间对象,也可以设定
 |      saved_connection_info 将当前工作空间另存为指定的位置。
 |      
 |      :param WorkspaceConnectionInfo conn_info: 工作空间的连接信息
 |      :param bool save_existed:  是否保存当前的工作空间工作。如果设置为 True,则会先将当前工作空间保存然后再关闭当前工作空间,否则会直接关闭当前工作空间,然后再打开新的工作空间对象。save_existed 只适合用于当前工作空间不在内存中的情形。默认为 True。
 |      :param WorkspaceConnectionInfo saved_connection_info: 选择将当前工作另存到 saved_connection_info 指定的工作空间中。 默认为 None。
 |      :return:  新的工作空间对象
 |      :rtype: Workspace
 |  
 |  open(conn_info, save_existed=True, saved_connection_info=None) from builtins.type
 |      打开一个新的工作空间对象。在打开新的工作空间前,用户可以通过设定 save_existed 为 True 先保存当前工作空间对象,也可以设定
 |      saved_connection_info 将当前工作空间另存为指定的位置。
 |      
 |      :param WorkspaceConnectionInfo conn_info: 工作空间的连接信息
 |      :param bool save_existed:  是否保存当前的工作空间工作。如果设置为 True,则会先将当前工作空间保存然后再关闭当前工作空间,否则会直接关闭当前工作空间,然后再打开新的工作空间对象。save_existed 只适合用于当前工作空间不在内存中的情形。默认为 True。
 |      :param WorkspaceConnectionInfo saved_connection_info: 选择将当前工作另存到 saved_connection_info 指定的工作空间中。 默认为 None。
 |      :return:  新的工作空间对象
 |      :rtype: Workspace
 |  
 |  save() from builtins.type
 |      用于将现存的工作空间存盘,不改变原有的名称
 |      
 |      :return:  保存成功返回 True,否则返回 False
 |      :rtype: bool
 |  
 |  save_as(conn_info) from builtins.type
 |      用指定的工作空间连接信息对象来保存工作空间文件。
 |      
 |      :param WorkspaceConnectionInfo conn_info: 工作空间连接信息对象
 |      :return: 另存成功返回 True,否则返回 False
 |      :rtype: bool
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  __new__(cls)
 |      Create and return a new object.  See help(type) for accurate signature.
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  caption
 |      str: 工作空间显示名称,便于用户做一些标识。
 |  
 |  connection_info
 |      WorkspaceConnectionInfo: 工作空间的连接信息
 |  
 |  datasources
 |      list[Datasource]: 当前工作空间下的所有数据源对象。
 |  
 |  description
 |      str: 用户加入的对当前工作空间的描述或说明性信息
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from iobjectspy._jsuperpy.data._jvm.JVMBase:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)

获得其它对象的帮助可以照上面输入即可。

5、更多参考

还可以使用iClient Python和GDAL等其它的python库,只需要在对应的python环境中安装即可。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部