postgistogeoserver.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. """
  2. ***************************************************************************
  3. ogr2ogrtopostgislist.py
  4. ---------------------
  5. Date : November 2012
  6. Copyright : (C) 2012 by Victor Olaya
  7. Email : volayaf at gmail dot com
  8. ***************************************************************************
  9. * *
  10. * This program is free software; you can redistribute it and/or modify *
  11. * it under the terms of the GNU General Public License as published by *
  12. * the Free Software Foundation; either version 2 of the License, or *
  13. * (at your option) any later version. *
  14. * *
  15. ***************************************************************************
  16. """
  17. __author__ = 'wanger'
  18. __date__ = 'November 2024'
  19. __copyright__ = '(C) 2024, wanger'
  20. import os
  21. from PyQt5.QtGui import QIcon
  22. from PyQt5.QtWidgets import QApplication
  23. from future.moves import sys
  24. from qgis.PyQt import QtWidgets
  25. from qgis.core import (QgsProcessing,
  26. QgsProcessingParameterFeatureSource,
  27. QgsProcessingParameterString,
  28. QgsProcessingParameterRasterLayer,
  29. QgsProcessingParameterFile,
  30. QgsProcessingParameterDateTime,
  31. QgsProcessingParameterEnum,
  32. QgsProcessingParameterCrs,
  33. QgsProcessingParameterField,
  34. QgsProcessingParameterExtent,
  35. QgsProcessingParameterBoolean,
  36. QgsProcessingParameterProviderConnection,
  37. QgsProcessingParameterDatabaseSchema,
  38. QgsProcessingParameterDatabaseTable,
  39. QgsProviderRegistry,
  40. QgsProcessingException,
  41. QgsProcessingParameterDefinition,
  42. QgsProviderConnectionException,
  43. QgsDataSourceUri)
  44. from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
  45. from processing.algs.gdal.GdalUtils import GdalUtils
  46. from processing.tools.PrintUtils import printStr
  47. from processing.tools.StringUtils import getConnectionStr
  48. from processing.tools.GeoServer.Geoserver import Geoserver
  49. from processing.tools.system import isWindows
  50. import siwei_config
  51. pluginPath = os.path.normpath(os.path.join(
  52. os.path.split(os.path.dirname(__file__))[0], os.pardir))
  53. class Postgistogeoserver(GdalAlgorithm):
  54. DATABASE = 'DATABASE'
  55. INPUTFILE = 'INPUTFILE'
  56. INPUTRASTER = 'INPUTRASTER'
  57. SCHEMA = 'SCHEMA'
  58. TABLE = 'TABLE'
  59. HOST = 'HOST'
  60. DBNAME = 'DBNAME'
  61. PORT = 'PORT'
  62. USER = 'USER'
  63. PASSWORD = 'PASSWORD'
  64. WHERE = 'WHERE'
  65. # TODO GeoServer追加属性
  66. Publish_Service = 'Publish_Service'
  67. GeoServer_URI = 'GeoServer_URI'
  68. Server_NAME = 'Server_NAME'
  69. GeoServer_WORKSPACE = 'GeoServer_WORKSPACE'
  70. GeoServer_USERNAME = 'GeoServer_USERNAME'
  71. GeoServer_PASSWORD = 'GeoServer_PASSWORD'
  72. GeoServer_Caching = 'GeoServer_Caching'
  73. GeoServer_Caching_Start = 'GeoServer_Caching_Start'
  74. GeoServer_Caching_Stop = 'GeoServer_Caching_Stop'
  75. LAYER_GROUP_JOIN = 'LAYER_GROUP_JOIN'
  76. LAYER_GROUP_ADD = 'LAYER_GROUP_ADD'
  77. # 关联平台资源目录标识码
  78. ZYMLBSM = "ZYMLBSM"
  79. selectedValue = "selectedValue"
  80. # 全局参数修改
  81. geoserver_config = siwei_config.CONFIG['geoserver']
  82. GeoServerConfig = {
  83. "url": geoserver_config["url"],
  84. "username": geoserver_config["username"],
  85. "password": geoserver_config["password"],
  86. "defaultworkspace": geoserver_config["default_workspace"],
  87. }
  88. def __init__(self):
  89. super().__init__()
  90. def initAlgorithm(self, config=None):
  91. # self.addParameter(QgsProcessingParameterFile(self.INPUTRASTER,
  92. # self.tr('栅格数据'),
  93. # extension='tif', optional=True))
  94. self.addParameter(QgsProcessingParameterRasterLayer(self.INPUTRASTER,
  95. self.tr('栅格数据'),
  96. [QgsProcessing.TypeRaster], optional=True))
  97. self.addParameter(QgsProcessingParameterFile(self.INPUTFILE,
  98. self.tr('数据工程文件'),
  99. extension='qgs', optional=True))
  100. # db_param = QgsProcessingParameterProviderConnection(
  101. # self.DATABASE,
  102. # self.tr('数据库'), 'postgres', optional=True)
  103. # self.addParameter(db_param)
  104. # schema_param = QgsProcessingParameterDatabaseSchema(
  105. # self.SCHEMA,
  106. # self.tr('模式'), defaultValue='public', connectionParameterName=self.DATABASE,
  107. # optional=True)
  108. # self.addParameter(schema_param)
  109. # table_param = QgsProcessingParameterDatabaseTable(
  110. # self.TABLE,
  111. # self.tr('表'), defaultValue='', connectionParameterName=self.DATABASE,
  112. # schemaParameterName=self.SCHEMA,
  113. # optional=True)
  114. # self.addParameter(table_param)
  115. # self.addParameter(QgsProcessingParameterString(self.WHERE,
  116. # self.tr('where语句'), "",
  117. # optional=True))
  118. # widget = QtWidgets.QTableView()
  119. # self.createCustomParametersWidget(widget)
  120. # GeoServer配置
  121. self.addParameter(QgsProcessingParameterString(self.Server_NAME,
  122. self.tr('服务名称'), "",
  123. optional=False))
  124. self.addParameter(QgsProcessingParameterString(self.GeoServer_URI,
  125. self.tr('服务器地址'), self.geoservercoon["url"],
  126. optional=False))
  127. self.addParameter(QgsProcessingParameterString(self.GeoServer_USERNAME,
  128. self.tr('服务器用户名'), self.geoservercoon["username"],
  129. optional=False))
  130. self.addParameter(QgsProcessingParameterString(self.GeoServer_PASSWORD,
  131. self.tr('服务器密码'), self.geoservercoon["password"],
  132. optional=False))
  133. self.addParameter(QgsProcessingParameterString(self.GeoServer_WORKSPACE,
  134. self.tr('服务器工作空间'),
  135. self.geoservercoon["defaultworkspace"],
  136. optional=False))
  137. # 图层组配置
  138. geo = Geoserver(service_url=self.geoservercoon["url"], username=self.geoservercoon["username"],
  139. password=self.geoservercoon["password"])
  140. self.groups = []
  141. requestgroups = geo.get_layergroups(self.geoservercoon["defaultworkspace"])
  142. if requestgroups["layerGroups"] != "":
  143. groups = requestgroups["layerGroups"]["layerGroup"]
  144. for group in groups:
  145. self.groups.append(str(group["name"]))
  146. self.addParameter(QgsProcessingParameterEnum(name=self.LAYER_GROUP_JOIN,
  147. description=self.tr('加入图层组'), options=self.groups,
  148. optional=True))
  149. self.addParameter(QgsProcessingParameterString(self.LAYER_GROUP_ADD,
  150. self.tr('创建图层组'),
  151. "",
  152. optional=True))
  153. self.addParameter(QgsProcessingParameterBoolean(self.GeoServer_Caching,
  154. self.tr('数据切片'), defaultValue=False))
  155. self.addParameter(QgsProcessingParameterString(self.GeoServer_Caching_Start,
  156. self.tr('开始级别'), self.geoservercoon["cachestart"],
  157. optional=True))
  158. self.addParameter(QgsProcessingParameterString(self.GeoServer_Caching_Stop,
  159. self.tr('终止级别'), self.geoservercoon["cacheend"],
  160. optional=True))
  161. server_parameter = QgsProcessingParameterBoolean(self.Publish_Service,
  162. self.tr('服务发布'), defaultValue=True)
  163. self.addParameter(server_parameter)
  164. # 平台资源目录
  165. # self.zymlParams = QgsProcessingParameterString(self.ZYMLBSM,
  166. # self.tr('关联平台资源目录'), "",
  167. # optional=True)
  168. # self.addParameter(self.zymlParams)
  169. def name(self):
  170. return 'postgistogeoserver'
  171. def icon(self):
  172. return QIcon(os.path.join(pluginPath, 'images', 'dbms', 'publishserver.png'))
  173. def displayName(self):
  174. return self.tr('服务发布')
  175. def shortDescription(self):
  176. return self.tr('发布地图矢量数据,栅格数据与数据工程文件二选一。')
  177. def tags(self):
  178. t = self.tr('import,into,postgis,database,vector').split(',')
  179. t.extend(super().tags())
  180. return t
  181. def group(self):
  182. return self.tr('发布工具')
  183. def groupId(self):
  184. return 'publishserver'
  185. def setSelectedValue(self, v):
  186. printStr(v)
  187. self.selectedValue = v
  188. def getSelectedValue(self):
  189. return self.selectedValue
  190. def getConsoleCommands(self, parameters, context, feedback, executing=True):
  191. # print("selectedValue===" + self.selectedValue)
  192. # self.setOutputValue(self.ZYMLBSM, parameters.get(self.ZYMLBSM))
  193. # print(self.zymlParams)
  194. # self.zymlParams.setDefaultValue('New Default Value')
  195. # global_selected_value = self.selectedValue
  196. # print("global_selected_value=====" + global_selected_value)
  197. print(parameters)
  198. if parameters.get(self.DATABASE) is not None:
  199. connection_name = self.parameterAsConnectionName(parameters, self.DATABASE, context)
  200. if not connection_name:
  201. raise QgsProcessingException(
  202. self.tr('No connection specified'))
  203. try:
  204. md = QgsProviderRegistry.instance().providerMetadata('postgres')
  205. conn = md.createConnection(connection_name)
  206. except QgsProviderConnectionException:
  207. raise QgsProcessingException(
  208. self.tr('Could not retrieve connection details for {}').format(connection_name))
  209. uri = conn.uri()
  210. # 通过uri获取数据库连接信息
  211. connection_parts = QgsDataSourceUri(uri).connectionInfo(executing).split(' ')
  212. # print(connection_parts)
  213. # self.DBNAME = self.getConnectionStr(connection_parts, 0)
  214. # self.HOST = self.getConnectionStr(connection_parts, 1)
  215. # self.PORT = self.getConnectionStr(connection_parts, 2)
  216. # self.USER = self.getConnectionStr(connection_parts, 3)
  217. # self.PASSWORD = self.getConnectionStr(connection_parts, 4)
  218. arguments = [
  219. getConnectionStr(connection_parts, 1),
  220. getConnectionStr(connection_parts, 2),
  221. getConnectionStr(connection_parts, 0),
  222. getConnectionStr(connection_parts, 3),
  223. getConnectionStr(connection_parts, 4)
  224. ]
  225. return arguments
  226. else:
  227. return []
  228. def commandName(self):
  229. return "ogr2ogr"