// Copyright (C) Stichting Deltares 2020. All rights reserved.
//
// This file is part of the LayerOnSlopeTool
//
// The LayerOnSlopeTool is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using LumenWorks.Framework.IO.Csv;
namespace Deltares.LayerOnSlopeTool.Data.CsvImporters
{
///
/// Holds the importer for the characteristic points from csv files
///
public class CsvImporterCharacteristicPoints
{
private List characteristicPointsRecords = new List();
private List errorMessages = new List();
public class CharPoint
{
public CharacteristicPointType Type { get; set; }
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
}
public class CharacteristicPointsRecord
{
private IList points = new List();
public string SurfaceLineId { get; set; }
public IList Points
{
get { return points; }
set { points = value; }
}
public int Volgnummer { get; set; }
}
private void CheckColumn(int index, string fileName, string fieldName)
{
if (index < 0)
{
var csvHeaderFieldError = "In de header ontbreekt veld:";
throw new ArgumentException(string.Format("{0} : {1} {2}", fileName, csvHeaderFieldError, fieldName));
}
}
public CsvImporterCharacteristicPoints(string fileName)
{
const int minimalNumberOfColumns = 49; // Column 53 "volgnummer" is not mandatory; DTH removed
errorMessages.Clear();
if (fileName == "")
{
throw new ArgumentException("De filenaam voor de CharacteristicPoints csv is leeg.");
}
if (!File.Exists(fileName))
{
throw new ArgumentException(string.Format("De CharacteristicPoints csv file met naam {0} bestaat niet.", fileName));
}
var oldcur = Thread.CurrentThread.CurrentCulture;
try
{
Thread.CurrentThread.CurrentCulture = CsvReaderUtilities.DetermineCultureForFile(fileName);
using (CsvReader csv = new CsvReader(new StreamReader(fileName), true, ';'))
{
string[] headers = CsvImporterHelper.GetFieldHeaders(this, csv);
if (headers.Count() < minimalNumberOfColumns)
{
var csvHeaderColumnCountError = string.Format("Miminum aantal kolommen in csv bestand is {0}", minimalNumberOfColumns);
throw new ArgumentException(string.Format("{0} : {1}", fileName, csvHeaderColumnCountError));
}
int surfaceLineIdCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.LocationId);
if (surfaceLineIdCol < 0)
{
// colIndexSurfaceLineId can be defined with 2 identifiers (surfaceLineId is deprecated, locationId is the new one)
surfaceLineIdCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers.SurfaceLineId);
}
CheckColumn(surfaceLineIdCol, fileName, CharacteristicPointCsvIdentifiers.SurfaceLineId);
int xMaaiveldBinnenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.SurfaceLevelInsideX);
CheckColumn(xMaaiveldBinnenwaartsCol, fileName,
CharacteristicPointCsvIdentifiers.SurfaceLevelInsideX);
int yMaaiveldBinnenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.SurfaceLevelInsideY);
CheckColumn(yMaaiveldBinnenwaartsCol, fileName,
CharacteristicPointCsvIdentifiers.SurfaceLevelInsideY);
int zMaaiveldBinnenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.SurfaceLevelInsideZ);
CheckColumn(zMaaiveldBinnenwaartsCol, fileName,
CharacteristicPointCsvIdentifiers.SurfaceLevelInsideZ);
int xInsteekSlootPolderzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.DitchPolderSideX);
CheckColumn(xInsteekSlootPolderzijdeCol, fileName,
CharacteristicPointCsvIdentifiers.DitchPolderSideX);
int yInsteekSlootPolderzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.DitchPolderSideY);
CheckColumn(yInsteekSlootPolderzijdeCol, fileName,
CharacteristicPointCsvIdentifiers.DitchPolderSideY);
int zInsteekSlootPolderzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.DitchPolderSideZ);
CheckColumn(zInsteekSlootPolderzijdeCol, fileName,
CharacteristicPointCsvIdentifiers.DitchPolderSideZ);
int xSlootbodemPolderzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.BottomDitchPolderSideX);
CheckColumn(xSlootbodemPolderzijdeCol, fileName,
CharacteristicPointCsvIdentifiers.BottomDitchPolderSideX);
int ySlootbodemPolderzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.BottomDitchPolderSideY);
CheckColumn(ySlootbodemPolderzijdeCol, fileName,
CharacteristicPointCsvIdentifiers.BottomDitchPolderSideY);
int zSlootbodemPolderzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.BottomDitchPolderSideZ);
CheckColumn(zSlootbodemPolderzijdeCol, fileName,
CharacteristicPointCsvIdentifiers.BottomDitchPolderSideZ);
int xSlootbodemDijkzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.BottomDitchDikeSideX);
CheckColumn(xSlootbodemDijkzijdeCol, fileName,
CharacteristicPointCsvIdentifiers.BottomDitchDikeSideX);
int ySlootbodemDijkzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.BottomDitchDikeSideY);
CheckColumn(ySlootbodemDijkzijdeCol, fileName,
CharacteristicPointCsvIdentifiers.BottomDitchDikeSideY);
int zSlootbodemDijkzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.BottomDitchDikeSideZ);
CheckColumn(zSlootbodemDijkzijdeCol, fileName,
CharacteristicPointCsvIdentifiers.BottomDitchDikeSideZ);
int xInsteekSlootDijkzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.DitchDikeSideX);
CheckColumn(xInsteekSlootDijkzijdeCol, fileName, CharacteristicPointCsvIdentifiers.DitchDikeSideX);
int yInsteekSlootDijkzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
CharacteristicPointCsvIdentifiers
.DitchDikeSideY);
// The click program by Erik Vastenburg now delivers "Y_Insteek_sloot dijkzijde" instead of the correct above definition
// Erik will change this in his program but for now, this wrong tag should also be recognized.
if (yInsteekSlootDijkzijdeCol < 0)
{
const string fieldYInsteekslootdijkzijde = "Y_Insteek_sloot dijkzijde";
yInsteekSlootDijkzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers,
fieldYInsteekslootdijkzijde);
CheckColumn(yInsteekSlootDijkzijdeCol, fileName, fieldYInsteekslootdijkzijde);
}
else
{
CheckColumn(yInsteekSlootDijkzijdeCol, fileName,
CharacteristicPointCsvIdentifiers.DitchDikeSideY);
}
int zInsteekSlootDijkzijdeCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DitchDikeSideZ);
CheckColumn(zInsteekSlootDijkzijdeCol, fileName, CharacteristicPointCsvIdentifiers.DitchDikeSideZ);
int xTeenDijkBinnenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeToeAtPolderX);
CheckColumn(xTeenDijkBinnenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.DikeToeAtPolderX);
int yTeenDijkBinnenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeToeAtPolderY);
CheckColumn(yTeenDijkBinnenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.DikeToeAtPolderY);
int zTeenDijkBinnenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeToeAtPolderZ);
CheckColumn(zTeenDijkBinnenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.DikeToeAtPolderZ);
int xKruinBinnenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TopShoulderInsideX);
CheckColumn(xKruinBinnenbermCol, fileName, CharacteristicPointCsvIdentifiers.TopShoulderInsideX);
int yKruinBinnenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TopShoulderInsideY);
CheckColumn(yKruinBinnenbermCol, fileName, CharacteristicPointCsvIdentifiers.TopShoulderInsideY);
int zKruinBinnenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TopShoulderInsideZ);
CheckColumn(zKruinBinnenbermCol, fileName, CharacteristicPointCsvIdentifiers.TopShoulderInsideZ);
int xInsteekBinnenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.InsteekShoulderInsideX);
CheckColumn(xInsteekBinnenbermCol, fileName, CharacteristicPointCsvIdentifiers.InsteekShoulderInsideX);
int yInsteekBinnenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.InsteekShoulderInsideY);
CheckColumn(yInsteekBinnenbermCol, fileName, CharacteristicPointCsvIdentifiers.InsteekShoulderInsideY);
int zInsteekBinnenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.InsteekShoulderInsideZ);
CheckColumn(zInsteekBinnenbermCol, fileName, CharacteristicPointCsvIdentifiers.InsteekShoulderInsideZ);
int xKruinBinnentaludCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeTopAtPolderX);
CheckColumn(xKruinBinnentaludCol, fileName, CharacteristicPointCsvIdentifiers.DikeTopAtPolderX);
int yKruinBinnentaludCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeTopAtPolderY);
CheckColumn(yKruinBinnentaludCol, fileName, CharacteristicPointCsvIdentifiers.DikeTopAtPolderY);
int zKruinBinnentaludCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeTopAtPolderZ);
CheckColumn(zKruinBinnentaludCol, fileName, CharacteristicPointCsvIdentifiers.DikeTopAtPolderZ);
int xVerkeersbelastingKantBinnenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TrafficLoadInsideX);
CheckColumn(xVerkeersbelastingKantBinnenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.TrafficLoadInsideX);
int yVerkeersbelastingKantBinnenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TrafficLoadInsideY);
CheckColumn(yVerkeersbelastingKantBinnenwaartsCol, fileName,
CharacteristicPointCsvIdentifiers.TrafficLoadInsideY);
int zVerkeersbelastingKantBinnenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TrafficLoadInsideZ);
CheckColumn(zVerkeersbelastingKantBinnenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.TrafficLoadInsideZ);
int xVerkeersbelastingKantBuitenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TrafficLoadOutsideX);
CheckColumn(xVerkeersbelastingKantBuitenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.TrafficLoadOutsideX);
int yVerkeersbelastingKantBuitenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TrafficLoadOutsideY);
CheckColumn(yVerkeersbelastingKantBuitenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.TrafficLoadOutsideY);
int zVerkeersbelastingKantBuitenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TrafficLoadOutsideZ);
CheckColumn(zVerkeersbelastingKantBuitenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.TrafficLoadOutsideZ);
int xKruinBuitentaludCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeTopAtRiverX);
CheckColumn(xKruinBuitentaludCol, fileName, CharacteristicPointCsvIdentifiers.DikeTopAtRiverX);
int yKruinBuitentaludCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeTopAtRiverY);
CheckColumn(yKruinBuitentaludCol, fileName, CharacteristicPointCsvIdentifiers.DikeTopAtRiverY);
int zKruinBuitentaludCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeTopAtRiverZ);
CheckColumn(zKruinBuitentaludCol, fileName, CharacteristicPointCsvIdentifiers.DikeTopAtRiverZ);
int xInsteekBuitenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.InsteekShoulderOutsideX);
CheckColumn(xInsteekBuitenbermCol, fileName, CharacteristicPointCsvIdentifiers.InsteekShoulderOutsideX);
int yInsteekBuitenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.InsteekShoulderOutsideY);
CheckColumn(yInsteekBuitenbermCol, fileName, CharacteristicPointCsvIdentifiers.InsteekShoulderOutsideY);
int zInsteekBuitenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.InsteekShoulderOutsideZ);
CheckColumn(zInsteekBuitenbermCol, fileName, CharacteristicPointCsvIdentifiers.InsteekShoulderOutsideZ);
int xKruinBuitenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TopShoulderOutsideX);
CheckColumn(xKruinBuitenbermCol, fileName, CharacteristicPointCsvIdentifiers.TopShoulderOutsideX);
int yKruinBuitenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TopShoulderOutsideY);
CheckColumn(yKruinBuitenbermCol, fileName, CharacteristicPointCsvIdentifiers.TopShoulderOutsideY);
int zKruinBuitenbermCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.TopShoulderOutsideZ);
CheckColumn(zKruinBuitenbermCol, fileName, CharacteristicPointCsvIdentifiers.TopShoulderOutsideZ);
int xTeenDijkBuitenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeToeAtRiverX);
CheckColumn(xTeenDijkBuitenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.DikeToeAtRiverX);
int yTeenDijkBuitenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeToeAtRiverY);
CheckColumn(yTeenDijkBuitenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.DikeToeAtRiverY);
int zTeenDijkBuitenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.DikeToeAtRiverZ);
CheckColumn(zTeenDijkBuitenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.DikeToeAtRiverZ);
int xMaaiveldBuitenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.SurfaceLevelOutsideX);
CheckColumn(xMaaiveldBuitenwaartsCol, fileName,
CharacteristicPointCsvIdentifiers.SurfaceLevelOutsideX);
int yMaaiveldBuitenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.SurfaceLevelOutsideY);
CheckColumn(yMaaiveldBuitenwaartsCol, fileName,
CharacteristicPointCsvIdentifiers.SurfaceLevelOutsideY);
int zMaaiveldBuitenwaartsCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.SurfaceLevelOutsideZ);
CheckColumn(zMaaiveldBuitenwaartsCol, fileName, CharacteristicPointCsvIdentifiers.SurfaceLevelOutsideZ);
//optional, do not check
int xInsteekGeulCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.InsertRiverChannelX);
//optional, do not check
int yInsteekGeulCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.InsertRiverChannelY);
//optional, do not check
int zInsteekGeulCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.InsertRiverChannelZ);
//optional, do not check
int xTeenGeulCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.BottomRiverChannelX);
//optional, do not check
int yTeenGeulCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.BottomRiverChannelY);
//optional, do not check
int zTeenGeulCol = CsvReaderUtilities.GetHeaderIndexByString(headers, CharacteristicPointCsvIdentifiers.BottomRiverChannelZ);
// optional so do not check
const string fieldVolgnummer = "Volgnummer";
int volgnummerCol = CsvReaderUtilities.GetHeaderIndexByString(headers, fieldVolgnummer);
while (csv.ReadNextRecord())
{
try
{
CharacteristicPointsRecord characteristicPoints = new CharacteristicPointsRecord();
characteristicPoints.SurfaceLineId = csv[surfaceLineIdCol];
if (volgnummerCol > -1)
{
characteristicPoints.Volgnummer = Convert.ToInt32(csv[volgnummerCol]);
}
CharPoint mbi = new CharPoint();
mbi.Type = CharacteristicPointType.SurfaceLevelInside;
mbi.X = Convert.ToDouble(csv[xMaaiveldBinnenwaartsCol]);
mbi.Y = Convert.ToDouble(csv[yMaaiveldBinnenwaartsCol]);
mbi.Z = Convert.ToDouble(csv[zMaaiveldBinnenwaartsCol]);
characteristicPoints.Points.Add(mbi);
CharPoint isp = new CharPoint();
isp.Type = CharacteristicPointType.DitchPolderSide;
isp.X = Convert.ToDouble(csv[xInsteekSlootPolderzijdeCol]);
isp.Y = Convert.ToDouble(csv[yInsteekSlootPolderzijdeCol]);
isp.Z = Convert.ToDouble(csv[zInsteekSlootPolderzijdeCol]);
characteristicPoints.Points.Add(isp);
CharPoint sbp = new CharPoint();
sbp.Type = CharacteristicPointType.BottomDitchPolderSide;
sbp.X = Convert.ToDouble(csv[xSlootbodemPolderzijdeCol]);
sbp.Y = Convert.ToDouble(csv[ySlootbodemPolderzijdeCol]);
sbp.Z = Convert.ToDouble(csv[zSlootbodemPolderzijdeCol]);
characteristicPoints.Points.Add(sbp);
CharPoint sbd = new CharPoint();
sbd.Type = CharacteristicPointType.BottomDitchDikeSide;
sbd.X = Convert.ToDouble(csv[xSlootbodemDijkzijdeCol]);
sbd.Y = Convert.ToDouble(csv[ySlootbodemDijkzijdeCol]);
sbd.Z = Convert.ToDouble(csv[zSlootbodemDijkzijdeCol]);
characteristicPoints.Points.Add(sbd);
CharPoint isd = new CharPoint();
isd.Type = CharacteristicPointType.DitchDikeSide;
isd.X = Convert.ToDouble(csv[xInsteekSlootDijkzijdeCol]);
isd.Y = Convert.ToDouble(csv[yInsteekSlootDijkzijdeCol]);
isd.Z = Convert.ToDouble(csv[zInsteekSlootDijkzijdeCol]);
characteristicPoints.Points.Add(isd);
CharPoint tdbi = new CharPoint();
tdbi.Type = CharacteristicPointType.DikeToeAtPolder;
tdbi.X = Convert.ToDouble(csv[xTeenDijkBinnenwaartsCol]);
tdbi.Y = Convert.ToDouble(csv[yTeenDijkBinnenwaartsCol]);
tdbi.Z = Convert.ToDouble(csv[zTeenDijkBinnenwaartsCol]);
characteristicPoints.Points.Add(tdbi);
CharPoint kbb = new CharPoint();
kbb.Type = CharacteristicPointType.ShoulderTopInside;
kbb.X = Convert.ToDouble(csv[xKruinBinnenbermCol]);
kbb.Y = Convert.ToDouble(csv[yKruinBinnenbermCol]);
kbb.Z = Convert.ToDouble(csv[zKruinBinnenbermCol]);
characteristicPoints.Points.Add(kbb);
CharPoint ibb = new CharPoint();
ibb.Type = CharacteristicPointType.ShoulderBaseInside;
ibb.X = Convert.ToDouble(csv[xInsteekBinnenbermCol]);
ibb.Y = Convert.ToDouble(csv[yInsteekBinnenbermCol]);
ibb.Z = Convert.ToDouble(csv[zInsteekBinnenbermCol]);
characteristicPoints.Points.Add(ibb);
CharPoint kbt = new CharPoint();
kbt.Type = CharacteristicPointType.DikeTopAtPolder;
kbt.X = Convert.ToDouble(csv[xKruinBinnentaludCol]);
kbt.Y = Convert.ToDouble(csv[yKruinBinnentaludCol]);
kbt.Z = Convert.ToDouble(csv[zKruinBinnentaludCol]);
characteristicPoints.Points.Add(kbt);
CharPoint vbbi = new CharPoint();
vbbi.Type = CharacteristicPointType.TrafficLoadInside;
vbbi.X = Convert.ToDouble(csv[xVerkeersbelastingKantBinnenwaartsCol]);
vbbi.Y = Convert.ToDouble(csv[yVerkeersbelastingKantBinnenwaartsCol]);
vbbi.Z = Convert.ToDouble(csv[zVerkeersbelastingKantBinnenwaartsCol]);
characteristicPoints.Points.Add(vbbi);
CharPoint vbbu = new CharPoint();
vbbu.Type = CharacteristicPointType.TrafficLoadOutside;
vbbu.X = Convert.ToDouble(csv[xVerkeersbelastingKantBuitenwaartsCol]);
vbbu.Y = Convert.ToDouble(csv[yVerkeersbelastingKantBuitenwaartsCol]);
vbbu.Z = Convert.ToDouble(csv[zVerkeersbelastingKantBuitenwaartsCol]);
characteristicPoints.Points.Add(vbbu);
CharPoint kbut = new CharPoint();
kbut.Type = CharacteristicPointType.DikeTopAtRiver;
kbut.X = Convert.ToDouble(csv[xKruinBuitentaludCol]);
kbut.Y = Convert.ToDouble(csv[yKruinBuitentaludCol]);
kbut.Z = Convert.ToDouble(csv[zKruinBuitentaludCol]);
characteristicPoints.Points.Add(kbut);
CharPoint ibub = new CharPoint();
ibub.Type = CharacteristicPointType.ShoulderBaseOutside;
ibub.X = Convert.ToDouble(csv[xInsteekBuitenbermCol]);
ibub.Y = Convert.ToDouble(csv[yInsteekBuitenbermCol]);
ibub.Z = Convert.ToDouble(csv[zInsteekBuitenbermCol]);
characteristicPoints.Points.Add(ibub);
CharPoint kbub = new CharPoint();
kbub.Type = CharacteristicPointType.ShoulderTopOutside;
kbub.X = Convert.ToDouble(csv[xKruinBuitenbermCol]);
kbub.Y = Convert.ToDouble(csv[yKruinBuitenbermCol]);
kbub.Z = Convert.ToDouble(csv[zKruinBuitenbermCol]);
characteristicPoints.Points.Add(kbub);
CharPoint tdbu = new CharPoint();
tdbu.Type = CharacteristicPointType.DikeToeAtRiver;
tdbu.X = Convert.ToDouble(csv[xTeenDijkBuitenwaartsCol]);
tdbu.Y = Convert.ToDouble(csv[yTeenDijkBuitenwaartsCol]);
tdbu.Z = Convert.ToDouble(csv[zTeenDijkBuitenwaartsCol]);
characteristicPoints.Points.Add(tdbu);
CharPoint mbu = new CharPoint();
mbu.Type = CharacteristicPointType.SurfaceLevelOutside;
mbu.X = Convert.ToDouble(csv[xMaaiveldBuitenwaartsCol]);
mbu.Y = Convert.ToDouble(csv[yMaaiveldBuitenwaartsCol]);
mbu.Z = Convert.ToDouble(csv[zMaaiveldBuitenwaartsCol]);
characteristicPoints.Points.Add(mbu);
if (xTeenGeulCol > 0)
{
CharPoint brc = new CharPoint();
brc.Type = CharacteristicPointType.BottomRiverChannel;
brc.X = Convert.ToDouble(csv[xTeenGeulCol]);
brc.Y = Convert.ToDouble(csv[yTeenGeulCol]);
brc.Z = Convert.ToDouble(csv[zTeenGeulCol]);
characteristicPoints.Points.Add(brc);
}
if (xInsteekGeulCol > 0)
{
CharPoint irc = new CharPoint();
irc.Type = CharacteristicPointType.InsertRiverChannel;
irc.X = Convert.ToDouble(csv[xInsteekGeulCol]);
irc.Y = Convert.ToDouble(csv[yInsteekGeulCol]);
irc.Z = Convert.ToDouble(csv[zInsteekGeulCol]);
characteristicPoints.Points.Add(irc);
}
characteristicPointsRecords.Add(characteristicPoints);
}
catch (Exception e)
{
var csvCharacteristicPointError =
"Tijdens het lezen van karakteristieke punten in locatie {0} in kolom {1} uit de csv trad de volgende fout op: ";
errorMessages.Add(csvCharacteristicPointError + e.Message);
}
}
}
}
finally
{
Thread.CurrentThread.CurrentCulture = oldcur;
}
}
///
/// Gets the imported items.
///
///
/// The imported items.
///
public List ImportedItems
{
get { return characteristicPointsRecords; }
}
///
/// Gets the error messages.
///
///
/// The error messages.
///
public List ErrorMessages
{
get { return errorMessages; }
set { errorMessages = value; }
}
}
}