internal void Delete()
        {
            try { DB.Connection.ExecuteNonQuery("DELETE FROM " + Table + " WHERE " + Columns.Id + "=" + _id); }
            catch (Exception ex) { Console.Out.WriteLine("Error deleting area:  " + ex.Message); }

            try { DB.Connection.ExecuteNonQuery("DROP TABLE " + AreaBoundingBoxes.GetTableName(this)); }
            catch (Exception ex) { Console.Out.WriteLine("Error deleting area bounding boxes:  " + ex.Message); }

            try { DB.Connection.ExecuteNonQuery("DROP TABLE " + Incident.GetTableName(this, true)); }
            catch (Exception ex) { Console.Out.WriteLine("Error deleting incident table:  " + ex.Message); }
        }
        internal string GetIntersectsCondition(string entityColumn)
        {
            string areaBoundingBoxesTable = AreaBoundingBoxes.GetTableName(this);
            string areaBoundingBoxesRelationshipColumn = areaBoundingBoxesTable + "." + AreaBoundingBoxes.Columns.Relationship;

            return("EXISTS (SELECT 1 " +
                   "FROM " + areaBoundingBoxesTable + "," + _shapefile.GeometryTable + " " +
                   "WHERE st_intersects(" + entityColumn + "," + areaBoundingBoxesTable + "." + AreaBoundingBoxes.Columns.BoundingBox + ") AND " +
                   "(" +
                   areaBoundingBoxesRelationshipColumn + "='" + AreaBoundingBoxes.Relationship.Within + "' OR " +
                   "(" +
                   areaBoundingBoxesRelationshipColumn + "='" + AreaBoundingBoxes.Relationship.Overlaps + "' AND " +
                   "st_intersects(" + entityColumn + "," + _shapefile.GeometryTable + "." + ShapefileGeometry.Columns.Geometry + ")" +                    // this is the slow operation, so we're hiding it behind simpler checks as much as possible
                   ")" +
                   ")" +
                   ")");
        }