#region import libraries
from System import DateTime, Double
from System.Globalization import DateTimeFormatInfo
from System.Collections.Generic import List, Dictionary
from SharpMap import Map
from SharpMap.Extensions.Layers import BingLayer
from DelftTools.Utils.Csv.Importer import CsvSettings, CsvRequiredField, CsvColumnInfo, CsvMappingData
from DelftTools.Functions import TimeSeries, ITimeSeries
from DelftTools.Functions.Generic import Variable
from DeltaShell.Plugins.CommonTools.Functions import TimeSeriesCsvFileImporter
from DeltaShell.Plugins.ImportExport.Sobek import SobekHydroModelImporter
#endregion
#region generic functions
def GetItemByName(list, name):
for item in list:
if item.Name == name:
return item
def substractLists(listA, listB, startIndex=0):
if len(listA)!=len(listB):
print "Error! Lists have different length and cannot be substracted"
return
if startIndex>len(listA):
print "Error! startIndex is larger than length of lists"
return
i=startIndex
diffList = []
for i in range(startIndex,len(listA)):
diff = listA[i]-listB[i]
diffList.append(diff)
i+=1
return diffList
#endregion
#region import functions
def GetHisFileTimeSeriesForLocation(filePath, locationName) :
# create his file importer
from DeltaShell.Sobek.Readers.Readers import *
importer = HisFileReader(filePath)
# show number of locations,components and TimeSteps
header = importer.GetHisFileHeader
print "Number of locations : " + str(header.Locations.Count)
print "Number of components : " + str(header.Components.Count)
print "Number of timesteps : " + str(header.TimeSteps.Count)
# choose a component
component = header.Components[0]
print "Location : " + locationName + " -> component : " + component
# read the data from the his file
hisRowList = importer.ReadLocation(locationName, component)
# create a new timeseries with double data
series2 = TimeSeries()
outputVariable = Variable[float](component)
outputVariable.Name = "His file time series"
series2.Components.Add(outputVariable)
# add all data to the series
for row in hisRowList :
series2[row.TimeStep] = row.Value
# release the his file
importer.Close()
return series2
def ImportCsvTimeSeries(path, timeColumnName, valueColumnName, dateTimePattern):
csvSettings = CsvSettings()
csvSettings.Delimiter = ","
csvSettings.FirstRowIsHeader = True
csvSettings.SkipEmptyLines = True
datetimeFormat = DateTimeFormatInfo()
datetimeFormat.DateSeparator = "-"
datetimeFormat.TimeSeparator = ":"
datetimeFormat.FullDateTimePattern = dateTimePattern
mapping = Dictionary[CsvRequiredField, CsvColumnInfo]()
mapping.Add(CsvRequiredField(timeColumnName, DateTime().GetType()), CsvColumnInfo(0, datetimeFormat))
mapping.Add(CsvRequiredField(valueColumnName, Double().GetType()), CsvColumnInfo(1, None))
mappingData = CsvMappingData()
mappingData.Settings = csvSettings
mappingData.FieldToColumnMapping = mapping
importer = TimeSeriesCsvFileImporter()
importer.ImportIntoSingleFunction = True
importer.CsvMappingData = mappingData
return List[ITimeSeries](importer.ImportTimeSeries(path))[0]
def ImportSobek2Model(Path,useRR=True, useFLOW=True, useRTC=True, useWAQ=True):
# function to import Sobek 2.x model for path, selecting different modules
importer = SobekHydroModelImporter()
importer.PathSobek = Path
# override standard settings for importing models (import all)
importer.useRR = useRR
importer.useFlow = useFLOW
importer.useRTC = useRTC
importer.useWaq = useWAQ
# show the models that will be imported
print "Import waterflow model : " + str(importer.useFlow)
print "Import rainfall runoff model : " + str(importer.useRR)
print "Import RTC model : " + str(importer.useRTC)
print "Import waterquality model : " + str(importer.useWaq)
importer.Import()
return importer.TargetObject
#endregion
#region view functions
def OpenModelMapViewWithBackground(model):
Gui.DocumentViewsResolver.OpenViewForData(model)
view = Gui.DocumentViews[Gui.DocumentViews.Count-1]
map = view.MapView.Map
map.CoordinateSystem = Map.CoordinateSystemFactory.CreateFromEPSG(3857) # webmercator
# Add background (Satellite image) map
layer = BingLayer()
layer.Name = "Satellite Hybrid (Bing Maps)"
map.Layers.Add(layer)
map.ZoomToExtents()
#endregion |