private static void CalculateAreaAndPerimeter(DataAccessLayer DAL)
        {
            List<TtPolygon> polys = DAL.GetPolygons();

            if (polys != null && polys.Count > 0)
            {
                foreach (TtPolygon poly in polys)
                {
                    try
                    {
                        TtPolygon newPoly = new TtPolygon(poly);
                        List<TtPoint> points = DAL.GetBoundaryPoints(poly.CN).FilterOut(OpType.WayPoint).ToList();

                        if (points.Count > 2)
                        {
                            double perim = 0, area = 0;

                            points.Add(points[0]);
                            TtPoint p1, p2;
                            for (int i = 0; i < points.Count - 1; i++)
                            {
                                p1 = points[i];
                                p2 = points[i + 1];

                                perim += TtUtils.Distance(p1, p2);
                                area += ((p2.AdjX - p1.AdjX) * (p2.AdjY + p1.AdjY) / 2);
                            }

                            newPoly.Perimeter = perim;
                            newPoly.Area = Math.Abs(area);
                        }
                        else
                        {
                            newPoly.Perimeter = 0;
                            newPoly.Area = 0;
                        }

                        DAL.SavePolygon(poly, newPoly);
                    }
                    catch (Exception ex)
                    {
                        TtUtils.WriteError(ex.Message, "SegmentFactory:CalculateAreaAndPerimeter", ex.StackTrace);
                    }
                }
            }
        }