提交 5b73b97c7f6a3a1dd3e17cc0d1d2074f18b2b226

作者 nheweijun
1 个父辈 6fdf6a52

2022.02.23 合并前

@@ -211,7 +211,6 @@ class Api(ApiTemplate): @@ -211,7 +211,6 @@ class Api(ApiTemplate):
211 pg_ds.Destroy() 211 pg_ds.Destroy()
212 212
213 project_xml = xml.strip() 213 project_xml = xml.strip()
214 - print(project_xml)  
215 return str(base64.b64encode(project_xml.encode('utf-8')), encoding="utf8") 214 return str(base64.b64encode(project_xml.encode('utf-8')), encoding="utf8")
216 215
217 def register_table(self, layer: Layer,para): 216 def register_table(self, layer: Layer,para):
@@ -156,4 +156,6 @@ class ProjectFile: @@ -156,4 +156,6 @@ class ProjectFile:
156 ) 156 )
157 157
158 project_xml = project_xml.strip() 158 project_xml = project_xml.strip()
  159 + # StructurePrint().print(project_xml)
  160 + # StructurePrint().print(str(base64.b64encode(project_xml.encode('utf-8')), encoding="utf8"))
159 return str(base64.b64encode(project_xml.encode('utf-8')), encoding="utf8") 161 return str(base64.b64encode(project_xml.encode('utf-8')), encoding="utf8")
  1 +# coding=utf-8
  2 +#author: 4N
  3 +#createtime: 2022/2/23
  4 +#email: nheweijun@sina.com
  5 +
  6 +from sqlalchemy import create_engine
  7 +from sqlalchemy.orm import sessionmaker,Session
  8 +from osgeo import ogr
  9 +from osgeo.ogr import *
  10 +
  11 +class Migration():
  12 +
  13 + dmap_dms_ds = None
  14 + dmap_server_ds = None
  15 + dmap_manager_ds = None
  16 +
  17 + def __init__(self,dmap_dms_db,dmap_server_db,dmap_manager_db):
  18 +
  19 + self.dmap_dms_ds : DataSource = self.open_pg_data_source(dmap_dms_db)
  20 + self.dmap_server_ds: DataSource = self.open_pg_data_source(dmap_server_db)
  21 + self.dmap_manager_ds: DataSource = self.open_pg_data_source(dmap_manager_db)
  22 +
  23 +
  24 +
  25 + def process(self):
  26 + self.dmap_dms_migration()
  27 + self.dmap_server_migration()
  28 +
  29 +
  30 +
  31 + def dmap_dms_migration(self):
  32 +
  33 + database:Layer = self.dmap_dms_ds.ExecuteSQL('select * from "dmdms_database" ')
  34 +
  35 +
  36 + self.dmap_manager_ds.CopyLayer(database,"dmap_database",["OVERWRITE=YES"])
  37 +
  38 +
  39 +
  40 +
  41 + def dmap_server_migration(self):
  42 +
  43 + pass
  44 +
  45 +
  46 + def end(self):
  47 +
  48 + if self.dmap_dms_ds:
  49 + self.dmap_dms_ds.Destroy()
  50 + if self.dmap_server_ds:
  51 + self.dmap_server_ds.Destroy()
  52 + if self.dmap_manager_ds:
  53 + self.dmap_manager_ds.Destroy()
  54 +
  55 +
  56 + def open_pg_data_source(self,uri):
  57 + """
  58 + # 获取PostGIS数据源
  59 + :return:
  60 + """
  61 + db_conn_tuple = self.get_info_from_sqlachemy_uri(uri)
  62 + fn = "PG: user=%s password=%s host=%s port=%s dbname=%s " % db_conn_tuple
  63 + driver = ogr.GetDriverByName("PostgreSQL")
  64 + if driver is None:
  65 + raise Exception("打开PostgreSQL驱动失败,可能是当前GDAL未支持PostgreSQL驱动!")
  66 + ds = driver.Open(fn, 1)
  67 + if ds is None:
  68 + raise Exception("打开数据源失败!")
  69 + return ds
  70 +
  71 + def get_info_from_sqlachemy_uri(self,uri):
  72 + parts = uri.split(":")
  73 + user = parts[1][2:]
  74 +
  75 + password_list = parts[2].split("@")
  76 + if password_list.__len__() > 2:
  77 + password = "@".join(password_list[:-1])
  78 + else:
  79 + password = parts[2].split("@")[0]
  80 + host = parts[2].split("@")[-1]
  81 + port = parts[3].split("/")[0]
  82 + database = parts[3].split("/")[1]
  83 +
  84 + return user, password, host, port, database
  85 +
  86 +if __name__ == '__main__':
  87 +
  88 + dmap_dms_db = "postgresql://postgres:chinadci@172.26.60.100:5432/dmap_dms"
  89 + dmap_server_db = "postgresql://postgres:chinadci@172.26.60.100:5432/DmapServer"
  90 + dmap_manager_db = "postgresql://postgres:chinadci@172.26.60.100:5432/migration"
  91 +
  92 + migration = Migration(dmap_dms_db,dmap_server_db,dmap_manager_db)
  93 + migration.process()
  94 + migration.end()
@@ -41,6 +41,9 @@ outLayer=None @@ -41,6 +41,9 @@ outLayer=None
41 41
42 for feat in layer: 42 for feat in layer:
43 geo:Geometry=feat.GetGeometryRef() 43 geo:Geometry=feat.GetGeometryRef()
  44 +
  45 +
  46 +
44 extent = geo.GetEnvelope() 47 extent = geo.GetEnvelope()
45 points = [] 48 points = []
46 i=0 49 i=0
  1 +
  2 +from osgeo import ogr
  3 +
  4 +def envelop_2_polygon(env):
  5 + ring = ogr.Geometry(ogr.wkbLinearRing)
  6 + ring.AddPoint(env[0], env[2])
  7 + ring.AddPoint(env[0], env[3])
  8 + ring.AddPoint(env[1], env[3])
  9 + ring.AddPoint(env[1], env[2])
  10 + ring.AddPoint(env[0], env[2])
  11 + # Create polygon
  12 + poly = ogr.Geometry(ogr.wkbPolygon)
  13 + poly.AddGeometry(ring)
  14 + return poly
  15 +
  16 +
  17 +env = [1,3,1,3]
  18 +
  19 +poly = envelop_2_polygon(env)
  20 +line = ogr.Geometry(ogr.wkbLineString)
  21 +line.AddPoint(0, 2)
  22 +line.AddPoint(4, 2)
  23 +line.AddPoint(5, 2)
  24 +
  25 +print(poly)
  26 +print(line)
  27 +print(line.Simplify(1))
注册登录 后发表评论