Geometry: Add shapefile import file format.

setup.py
Pierre-Antoine Rouby 2024-04-23 11:50:35 +02:00
parent fd1b2b1041
commit e528ba5278
4 changed files with 57 additions and 1 deletions

View File

@ -11,3 +11,4 @@ pyinstaller>=5.11.0
shapely>=2.0.1
lxml>=4.9.3
platformdirs>=4.2.0
pyshp>=2.3.1

View File

@ -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:

View File

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

View File

@ -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"],
]