git_bsmd/AIS/bsmd.AIS2Service/MonitorZone.cs
Daniel Schick 47adcbacf1 ZONE MONITORING WIP 1
added classes for vertices, polygons (zones) and a monitoring vlass
2025-09-01 10:05:55 +02:00

55 lines
1.5 KiB
C#

// Copyright (c) 2022 - schick Informatik
// bsmd.AIS2Service [MonitorZone.cs]: %UserDisplayName%
// Description: Represents a geographical area that should be checked against
// ship positions
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bsmd.AIS2Service
{
internal class MonitorZone
{
private List<GeoPoint> _vertices;
public MonitorZone(List<GeoPoint> vertices)
{
_vertices = vertices;
}
public bool IsPointInPolygon4(GeoPoint testPoint)
{
bool result = false;
int j = _vertices.Count() - 1;
for (int i = 0; i < _vertices.Count(); i++)
{
if (_vertices[i].Lat < testPoint.Lat && _vertices[j].Lat >= testPoint.Lat || _vertices[j].Lat < testPoint.Lat && _vertices[i].Lat >= testPoint.Lat)
{
if (_vertices[i].Lon + (testPoint.Lat - _vertices[i].Lat) / (_vertices[j].Lat - _vertices[i].Lat) * (_vertices[j].Lon - _vertices[i].Lon) < testPoint.Lon)
{
result = !result;
}
}
j = i;
}
return result;
}
}
internal class GeoPoint
{
public GeoPoint(double lat, double lon)
{
Lat = lat; Lon = lon;
}
public double Lat { get; private set; }
public double Lon { get; private set; }
}
}