/// <summary> /// Индикатор ошибок по имени поля /// </summary> /// <param name="columnName">Наименование проверяемого свойства</param> /// <returns>null - при осутствии ошибок, в противном случае описание ошибки</returns> public string this[string columnName] { get { if (columnName == nameof(EditShape)) { //Защита от дурака if (EditShape == "" || EditShape == null) { return("Геометрия не может быть пустой"); } SqlGeometry shape; //Проверка на возможность конвертации в геометрию try { //Конвертация строки в SqlGeometry SqlChars wkt = new SqlChars(EditShape.ToCharArray()); shape = SqlGeometry.STGeomFromText(wkt, 32631).MakeValid(); } catch (Exception ex) { return(String.Format("Ошибка геометрии: {0}", ex.Message)); } //Расположен ли полигон в пределах границ Республики Бенин DbGeometry newDbGeometry = shape.ToDbGeometry(); using (var context = ContextFactory.Create()) { context.CadastraleSecteurs_v.Load(); var cadSect = context.CadastraleSecteurs_v.Local; bool IsBeninWithin = cadSect.Where(s => s.Shape.Intersects(newDbGeometry)).Any(); if (!IsBeninWithin) { return("Границы расположены за пределами государственной границы Республики Бенин"); } } //Ошибок не найдено return(null); } else { return(null); } } }
/// <summary> /// Сохраняет изменения геометрии /// </summary> protected void SaveChanges() { if (this[nameof(EditShape)] != null) { return; } //Конвертация строки в SqlGeometry SqlGeometry shape; SqlChars wkt = new SqlChars(EditShape.ToCharArray()); shape = SqlGeometry.STGeomFromText(wkt, 32631).MakeValid(); FeatureObjet.Shape = shape.ToDbGeometry(); IsEndEditing = true; }