Ubuntu上SuperMap iDesktop的Python擴展使用

SuperMap iDesktop的多平臺版(支持Linux,包括Ubuntu分發版)可使用python進行數據的交互操做。能夠打開一個控制檯交互訪問當前環境的工做空間、數據源、地圖等,也能夠將python片斷掛載到工具箱中,基於GUI進行交互操做,以及將python代碼放入處處理流程之中,實現一系列的自動化數據處理。python

  • 支持anaconda進行python環境的管理,方便多個python環境的切換。
  • 支持安裝其它的標準python庫,如GDAL、proj等等。
  • 支持本地其它的計算能力調用,如GPU、AI等。
  • 支持iClient python與iServer和Online服務交互。

一、打開python窗口

打開菜單欄,進入「開始」菜單項,選擇「python」,便可打開python console窗口。數據庫

python窗口分爲兩個部分,上部爲輸出區域,下部爲輸入區域。jvm

  • 輸入窗口支持自動完成,按tab鍵便可彈出提示。

二、建立和切換python運行環境

經過左側的工具欄,能夠打開python文件來運行,或者進行python運行環境的設置。工具

  • 幾個強大的特性:
    • 支持anaconda,能夠在多個環境間切換。
    • 支持導入/導出python運行環境,方便再配置和遷移環境,在工做組內的共享。

三、處理流程中的python算子

能夠將運行成功的python代碼掛載到桌面的工具箱中,從而經過圖形界面進行快速調用。ui

也能夠將python代碼加入處理流程中,經過構建一個處理流程來實現更復雜的數據處理和分析的自動化調用。spa

四、交互運行python代碼

在python窗口的下半部分,輸入並實驗:.net

#導入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的幫助信息,輸入:code

help(ws)

提示信息輸出以下:xml

>>> 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)

得到其它對象的幫助能夠照上面輸入便可。對象

五、更多參考

還可使用iClient Python和GDAL等其它的python庫,只須要在對應的python環境中安裝便可。

相關文章
相關標籤/搜索