mirror of https://gitlab.com/pamhyr/pamhyr2
Geometry: Add shapefile import file format.
parent
fd1b2b1041
commit
e528ba5278
|
|
@ -11,3 +11,4 @@ pyinstaller>=5.11.0
|
|||
shapely>=2.0.1
|
||||
lxml>=4.9.3
|
||||
platformdirs>=4.2.0
|
||||
pyshp>=2.3.1
|
||||
|
|
|
|||
|
|
@ -16,7 +16,9 @@
|
|||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import logging
|
||||
import shapefile
|
||||
import numpy as np
|
||||
|
||||
from time import time
|
||||
|
|
@ -533,8 +535,58 @@ class Reach(SQLSubModel):
|
|||
|
||||
# Import/Export
|
||||
|
||||
@timer
|
||||
def import_geometry(self, file_path_name: str):
|
||||
if file_path_name.endswith(".st"):
|
||||
return self.import_geometry_st(file_path_name)
|
||||
elif file_path_name.endswith(".shp"):
|
||||
return self.import_geometry_shp(file_path_name)
|
||||
else:
|
||||
return []
|
||||
|
||||
@timer
|
||||
def import_geometry_shp(self, file_path_name: str):
|
||||
sf = shapefile.Reader(
|
||||
os.path.abspath(file_path_name)
|
||||
)
|
||||
|
||||
if sf.shapeType != shapefile.POLYLINEZ:
|
||||
raise FileFormatError(
|
||||
file_path_name,
|
||||
"Shapefile is not a POLYLINEZ"
|
||||
)
|
||||
|
||||
profiles = []
|
||||
|
||||
for i in range(len(sf)):
|
||||
s_profile = sf.shape(i)
|
||||
z = s_profile.z
|
||||
|
||||
ind = 0
|
||||
points = []
|
||||
for point in s_profile.points:
|
||||
points.append([
|
||||
point[0],
|
||||
point[1],
|
||||
z[ind]
|
||||
])
|
||||
|
||||
ind += 1
|
||||
|
||||
prof = ProfileXYZ(
|
||||
kp=round(points[0][0]),
|
||||
reach=self, status=self._status
|
||||
)
|
||||
prof.import_points(points)
|
||||
|
||||
profiles.append(prof)
|
||||
|
||||
self.profiles = profiles + self.profiles
|
||||
self._update_profile_numbers()
|
||||
|
||||
return profiles
|
||||
|
||||
@timer
|
||||
def import_geometry_st(self, file_path_name: str):
|
||||
"""Import a geometry from file (.ST or .st)
|
||||
|
||||
Args:
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ class GeometryTranslate(MainTranslate):
|
|||
"Geometry", "File mage geometry (*.ST *.st)")
|
||||
self._dict["file_m"] = _translate(
|
||||
"Geometry", "File mage meshed geometry (*.M *.m)")
|
||||
self._dict["file_shp"] = _translate(
|
||||
"Geometry", "Shapefile (*.SHP *.shp)")
|
||||
self._dict["file_all"] = _translate("Geometry", "All file (*)")
|
||||
|
||||
self._dict["cross_section"] = _translate("Geometry", "cross-section")
|
||||
|
|
|
|||
|
|
@ -241,6 +241,7 @@ class GeometryWindow(PamhyrWindow):
|
|||
file_types = [
|
||||
self._trad["file_st"],
|
||||
self._trad["file_m"],
|
||||
self._trad["file_shp"],
|
||||
self._trad["file_all"],
|
||||
]
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue