V_Malyushitskiy

Untitled

May 18th, 2021 (edited)
475
4 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         public static string GetLonLatRcut(this string geom, Guid type, double   = 0)
  2.         {
  3.             string geomnew = geom;
  4.             NumberFormatInfo provider = new NumberFormatInfo();
  5.             provider.NumberDecimalSeparator = ".";
  6.             if (type == Types.Тип_зоны_поражения.Точка.Id)
  7.             {
  8.                 var reg = new Regex(@"POINT\((?<lat>\d{2}\.\d*)\s(?<lon>\d{2}\.\d*)\)");
  9.                 geomnew = $"st_geomfromtext(''{reg.Replace(geom, "POINT($2 $1)")}'')";
  10.             }
  11.             else if (type == Types.Тип_зоны_поражения.Линия__в_том_числе_ломаная_.Id)
  12.             {
  13.                 geomnew = geom.Replace("LINESTRING(", "").Replace(")", "");
  14.                 var points = geomnew.Split(',');
  15.                 geomnew = "LINESTRING(";
  16.                 foreach (var p in points)
  17.                 {
  18.                     var lonlat = p.Split(' ');
  19.                     geomnew += $"{lonlat[1]} {lonlat[0]},";
  20.                 }
  21.                 geomnew = geomnew.Remove(geomnew.Length - 1);
  22.                 geomnew += ")";
  23.                 geomnew = $"st_geomfromtext(''{geomnew}'')";
  24.             }
  25.             else if (type == Types.Тип_зоны_поражения.Многоугольник.Id)
  26.             {
  27.                 //POLYGON((59.915931 30.300428, 59.931959 30.301115, 59.929374 30.380766, 59.905586 30.364973, 59.915931 30.300428))
  28.                 geomnew = geom.Replace("POLYGON ((", "").Replace("POLYGON((", "").Replace("))", "");
  29.                 var points = geomnew.Split(',').Select(x => x.Trim()).ToList();
  30.                 geomnew = "POLYGON((";
  31.                 if (points.First() != points.Last())
  32.                     points.Add(points.First());
  33.                 foreach (var p in points)
  34.                 {
  35.                     var lonlat = p.Split(' ');
  36.                     geomnew += $"{lonlat[1]} {lonlat[0]},";
  37.                 }
  38.                 geomnew = geomnew.Remove(geomnew.Length - 1);
  39.                 geomnew += "))";
  40.  
  41.                 geomnew = $"st_geomfromtext(''{geomnew}'')";
  42.             }
  43.             else if (type == Types.Тип_зоны_поражения.Окружность.Id)
  44.             {
  45.                 //POINT(59.942296 30.246870),500
  46.                 var reg = new Regex(@"POINT\((?<lat>\d{2}\.\d*)\s(?<lon>\d{2}\.\d*)\)");
  47.                 geomnew = reg.Replace(geom, "POINT($2 $1)");
  48.  
  49.                 var circle = geomnew.Split(',');
  50.                 double buffer = 0;
  51.  
  52.                 if (circle.Length == 2)
  53.                 {
  54.                     geomnew = circle[0];
  55.                     buffer = Convert.ToDouble(circle[1], provider) / 111000;
  56.                 }
  57.                 geomnew = $"st_buffer(st_geomfromtext(''{geomnew}''),{buffer.ToString(provider)})";
  58.             }
  59.             if (buff != 0)
  60.             {
  61.                 var buffstr = (buff / 111000).ToString(provider);
  62.                 geomnew = $"st_buffer({geomnew},{buffstr})";
  63.             }
  64.             return geomnew;
  65.         }
RAW Paste Data