AIS work in progress

This commit is contained in:
Daniel Schick 2022-12-26 09:09:21 +01:00
parent 5cd5632ca7
commit ad37e2da50
4 changed files with 87 additions and 43 deletions

View File

@ -32,7 +32,6 @@
this.label1 = new System.Windows.Forms.Label();
this.comboBoxGroup = new System.Windows.Forms.ComboBox();
this.buttonNewGroup = new System.Windows.Forms.Button();
this.buttonEditGroup = new System.Windows.Forms.Button();
this.buttonDeleteGroup = new System.Windows.Forms.Button();
this.groupBoxZones = new System.Windows.Forms.GroupBox();
this.checkBoxZoneActive = new System.Windows.Forms.CheckBox();
@ -72,24 +71,13 @@
// buttonNewGroup
//
this.buttonNewGroup.Image = global::AISAdmin.Properties.Resources.document_plain_new;
this.buttonNewGroup.Location = new System.Drawing.Point(206, 6);
this.buttonNewGroup.Location = new System.Drawing.Point(249, 6);
this.buttonNewGroup.Name = "buttonNewGroup";
this.buttonNewGroup.Size = new System.Drawing.Size(37, 31);
this.buttonNewGroup.TabIndex = 2;
this.buttonNewGroup.UseVisualStyleBackColor = true;
this.buttonNewGroup.Click += new System.EventHandler(this.buttonNewGroup_Click);
//
// buttonEditGroup
//
this.buttonEditGroup.Enabled = false;
this.buttonEditGroup.Image = global::AISAdmin.Properties.Resources.pencil;
this.buttonEditGroup.Location = new System.Drawing.Point(249, 6);
this.buttonEditGroup.Name = "buttonEditGroup";
this.buttonEditGroup.Size = new System.Drawing.Size(37, 31);
this.buttonEditGroup.TabIndex = 3;
this.buttonEditGroup.UseVisualStyleBackColor = true;
this.buttonEditGroup.Click += new System.EventHandler(this.buttonEditGroup_Click);
//
// buttonDeleteGroup
//
this.buttonDeleteGroup.Enabled = false;
@ -250,7 +238,6 @@
this.Controls.Add(this.groupBoxAssignments);
this.Controls.Add(this.groupBoxZones);
this.Controls.Add(this.buttonDeleteGroup);
this.Controls.Add(this.buttonEditGroup);
this.Controls.Add(this.buttonNewGroup);
this.Controls.Add(this.comboBoxGroup);
this.Controls.Add(this.label1);
@ -270,8 +257,7 @@
private Label label1;
private ComboBox comboBoxGroup;
private Button buttonNewGroup;
private Button buttonEditGroup;
private Button buttonNewGroup;
private Button buttonDeleteGroup;
private GroupBox groupBoxZones;
private GroupBox groupBoxAssignments;

View File

@ -1,4 +1,5 @@
using bsmd.AIS2Service;
using System.ComponentModel;
namespace AISAdmin
{
@ -6,12 +7,14 @@ namespace AISAdmin
public partial class Main : Form
{
private AIS_SQLiteStorage? _storage;
private List<MonitorGroup>? _monitorGroups;
private List<MonitorZone>? _monitorZones;
private BindingList<MonitorGroup>? _monitorGroups = new BindingList<MonitorGroup>();
private BindingList<MonitorZone>? _monitorZones;
private MonitorGroup? _currentGroup;
public Main()
{
InitializeComponent();
_currentGroup = null;
}
private void buttonZoneUp_Click(object sender, EventArgs e)
@ -26,7 +29,30 @@ namespace AISAdmin
private void buttonImportZone_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Filter = "Google Earth KML files (*.kml)|*.kml|All files (*.*)|*.*";
ofd.RestoreDirectory = true;
ofd.Multiselect = true;
if (ofd.ShowDialog() == DialogResult.OK)
{
for (int i = 0, seq = this._monitorGroups.Count; i < ofd.FileNames.Length; i++, seq++)
{
MonitorZone mz = MonitorZone.ImportFromKML(ofd.FileNames[i]);
if(mz != null)
{
mz.MonitorGroupId = this._currentGroup.Id;
mz.Sequence = seq;
_storage.Save(mz);
foreach(GeoPoint gp in mz.Vertices)
{
gp.MonitorZoneId = mz.Id;
_storage.Save(gp);
}
}
}
}
}
}
private void buttonEditZone_Click(object sender, EventArgs e)
@ -48,12 +74,9 @@ namespace AISAdmin
{
this.textBoxGroup.ReadOnly = false;
this.buttonSaveGroup.Enabled = true;
}
private void buttonEditGroup_Click(object sender, EventArgs e)
{
}
_currentGroup = new MonitorGroup(-1, "");
this.textBoxGroup.ResetText();
}
private void buttonDeleteGroup_Click(object sender, EventArgs e)
{
@ -67,37 +90,39 @@ namespace AISAdmin
string groupName = this.textBoxGroup.Text.Trim();
if(groupName.Length > 0)
{
MonitorGroup mg = new MonitorGroup(-1, groupName);
if(_storage.Save(mg))
_currentGroup.Name = groupName;
if(_storage.Save(_currentGroup))
{
this._monitorGroups?.Add(mg);
this.comboBoxGroup.SelectedItem = mg;
if ((bool)!(_monitorGroups?.Contains(_currentGroup)))
this._monitorGroups.Add(_currentGroup);
this.comboBoxGroup.SelectedItem = _currentGroup;
}
}
}
this.buttonSaveGroup.Enabled = false;
this.textBoxGroup.ReadOnly = true;
}
}
private void Main_Load(object sender, EventArgs e)
{
_storage = new AIS_SQLiteStorage(null);
_monitorGroups = _storage.LoadGroups();
_monitorZones = _storage.LoadMonitorZones();
_monitorGroups = new BindingList<MonitorGroup>(_storage.LoadGroups());
_monitorZones = new BindingList<MonitorZone>(_storage.LoadMonitorZones());
this.comboBoxGroup.DataSource = _monitorGroups;
this.comboBoxGroup.DisplayMember = "Name";
if (_monitorGroups.Count > 0)
this.comboBoxGroup.SelectedIndex = 0;
}
private void comboBoxGroup_SelectedIndexChanged(object sender, EventArgs e)
{
MonitorGroup mGroup = (MonitorGroup) this.comboBoxGroup.SelectedItem;
if (mGroup != null)
{
this.textBoxGroup.Text = mGroup.Name;
_currentGroup = (MonitorGroup) this.comboBoxGroup.SelectedItem;
if (_currentGroup != null)
{
this.textBoxGroup.Text = _currentGroup.Name;
List<MonitorZone> groupZones = new List<MonitorZone>();
foreach(MonitorZone mZone in _monitorZones)
{
if (mZone.MonitorGroupId == mGroup.Id)
if (mZone.MonitorGroupId == _currentGroup.Id)
groupZones.Add(mZone);
}
groupZones.Sort();
@ -107,6 +132,8 @@ namespace AISAdmin
{
this.listBoxZones.DataSource = null;
this.textBoxGroup.ResetText();
this.buttonSaveGroup.Enabled = false;
this.textBoxGroup.ReadOnly = true;
}
}
}

View File

@ -122,14 +122,14 @@ namespace bsmd.AIS2Service
return monitorZones;
}
bool Save(MonitorZone mZone)
public bool Save(MonitorZone mZone)
{
if (mZone == null) return false;
if(mZone.Id <= 0)
{
// insert
string insertZoneString = $"INSERT INTO monitor_zone (name, active, monitor_group_id, sequence) VALUES ('{mZone.Name}', {mZone.Active}, {mZone.MonitorGroupId}, {mZone.Sequence}";
string insertZoneString = $"INSERT INTO monitor_zone (name, active, monitor_group_id, sequence) VALUES ('{mZone.Name}', {mZone.Active}, {mZone.MonitorGroupId}, {mZone.Sequence})";
SQLiteCommand cmd = new SQLiteCommand(insertZoneString, _connection);
int insertedRows = cmd.ExecuteNonQuery();
cmd.Dispose();

View File

@ -6,9 +6,12 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using System.Xml.Linq;
namespace bsmd.AIS2Service
{
@ -36,7 +39,7 @@ namespace bsmd.AIS2Service
{
#region fields
private readonly string _name;
private string _name;
private readonly List<MonitorZone> _zones = new List<MonitorZone>();
#endregion
@ -54,7 +57,7 @@ namespace bsmd.AIS2Service
public List<MonitorZone> Zones { get { return _zones; } }
public string Name { get { return _name; } }
public string Name { get { return _name; } set { _name = value; } }
#endregion
}
@ -97,6 +100,34 @@ namespace bsmd.AIS2Service
public long MonitorGroupId { get; set; }
public static MonitorZone ImportFromKML(string filename)
{
MonitorZone result = null;
if (File.Exists(filename))
{
XDocument kml = XDocument.Load(filename);
XNamespace ns = "http://www.opengis.net/kml/2.2";
string name = kml.Root.Element(ns + "Document").Element(ns + "name").Value;
if (name.EndsWith(".kml")) name = name.Substring(0, name.Length - 4);
result = new MonitorZone(-1, name);
// now find all vertices
string[] vertices = kml.Root.Element(ns + "Document").Element(ns + "Placemark").Element(ns + "Polygon").Element(ns + "outerBoundaryIs").Element(ns + "LinearRing").Element(ns + "coordinates").Value.Split(' ');
for (int i = 0; i < vertices.Length - 1; i++)
{
string[] pointElems = vertices[i].Trim().Split(',');
if (pointElems.Length != 3) continue;
GeoPoint gp = new GeoPoint(-1);
gp.Lon = Double.Parse(pointElems[0], System.Globalization.NumberFormatInfo.InvariantInfo);
gp.Lat = Double.Parse(pointElems[1], System.Globalization.NumberFormatInfo.InvariantInfo);
result.Vertices.Add(gp);
}
}
return result;
}
#endregion
#region public methods