public async Task <IActionResult> Create([Bind("MiradouroId,Nome,Localizacao,Terreno,E_Miradouro,Condicoes,Ocupacao_maxima,Descricao")] Miradouro miradouro, string grausLat = "a", string minutoLat = "a", string segundosLat = "a", char DirNS = 'N', string grausLong = "a", string minutosLong = "a", string segundosLong = "a", char DirWE = 'E', string Coordenadas = "DD", string latiDD = "a", string longDD = "a")//serve para evitar alguns ataques, só recebe campos que estejam no Bind { /* * DMS * latitude grau -> 0 - 90 * longitude grau -> 0 - 180 * minuto -> 0 - 59 * segundo -> 0 - 59.9999 * * DD * Latitude -> -90.0000 - 90.0000 * Longitude -> -180.0000 - 180.0000 */ int grausLatitude = 0; int minutosLatitude = 0; float segundosLatitude = 0; double LatDD = 0; int grausLongitude = 0; int minutosLongitude = 0; float segundosLongitude = 0; double LongDD = 0; int grausFinaLatlDMS = 0; float auxminutosLat = 0; int minutosFinalLatDMS = 0; float auxsegundosLat = 0; float segundosFinalLatDMS = 0; int grausFinalLongDMS = 0; float auxminutosLong = 0; int minutosFinalLongDMS = 0; float auxsegundosLong = 0; float segundosFinalLongDMS = 0; double latDoubleDMS = 0; char dirNS = 'N'; double longDoubleDMS = 0; char dirWE = 'W'; bool Coord_aceites = false; if (Coordenadas == "DMS") { try { //latitude DMS grausLatitude = Int32.Parse(grausLat); minutosLatitude = Int32.Parse(minutoLat); segundosLatitude = Convert.ToSingle(segundosLat); LatDD = grausLatitude + (minutosLatitude / 60.0) + (segundosLatitude / 3600.0); //longitude DMS grausLongitude = Int32.Parse(grausLong); minutosLongitude = Int32.Parse(minutosLong); segundosLongitude = Convert.ToSingle(segundosLong); LongDD = grausLongitude + (minutosLongitude / 60.0) + (segundosLongitude / 3600.0); if ((grausLatitude >= 0 && grausLatitude <= 90) && (minutosLatitude >= 0 && minutosLatitude <= 60) && (segundosLatitude >= 0 && segundosLatitude <= 60) && (grausLongitude >= 0 && grausLongitude <= 90) && (minutosLongitude >= 0 && minutosLongitude <= 60) && (segundosLongitude >= 0 && segundosLongitude <= 60)) { Coord_aceites = true; } } catch { if ((grausLat == null || minutoLat == null || segundosLat == null) || (grausLong == null || minutosLong == null || segundosLong == null)) { ModelState.AddModelError("Longitude_DD", "As coordenadas é um campo obrigatório!"); } else { ModelState.AddModelError("Longitude_DD", "As coordenadas não são validas, insira apenas valores numericos!"); } return(View(miradouro)); } } if (Coordenadas == "DD") { try { //latitude DD latDoubleDMS = Convert.ToDouble(latiDD); //longitude DD longDoubleDMS = Convert.ToDouble(longDD); if (latiDD != null && longDD != null) { if ((latDoubleDMS >= -90 && latDoubleDMS <= 90) && (longDoubleDMS >= -180 && longDoubleDMS <= 180)) { Coord_aceites = true; } } } catch { ModelState.AddModelError("Longitude_DD", "As coordenadas não são validas, insira apenas valores numericos!"); return(View(miradouro)); } } if (!Coord_aceites) { ModelState.AddModelError("Longitude_DD", "As coordenadas é um campo obrigatório!"); return(View(miradouro)); } if (Coordenadas == "DMS") { miradouro.Latitude_DMS = string.Concat(grausLat, "º", minutoLat, "'", segundosLat, "''", DirNS); miradouro.Latitude_DMS = miradouro.Latitude_DMS.Replace(",", "."); miradouro.Longitude_DMS = string.Concat(grausLong, "º", minutosLong, "'", segundosLong, "''", DirWE); miradouro.Longitude_DMS = miradouro.Longitude_DMS.Replace(",", "."); //latitude DD /*grausLatitude = Int32.Parse(grausLat); * minutosLatitude = Int32.Parse(minutoLat); * segundosLatitude = Convert.ToSingle(segundosLat); * LatDD = grausLatitude + (minutosLatitude / 60.0) + (segundosLatitude / 3600.0);*/ if (DirNS == 'S') { LatDD = LatDD * -1; } LatDD = Math.Round(LatDD, 6); miradouro.Latitude_DD = "" + LatDD; miradouro.Latitude_DD = miradouro.Latitude_DD.Replace(",", "."); //longitude DD /*grausLongitude = Int32.Parse(grausLong); * minutosLongitude = Int32.Parse(minutosLong); * segundosLongitude = Convert.ToSingle(segundosLong); * LongDD = grausLongitude + (minutosLongitude / 60.0) + (segundosLongitude / 3600.0);*/ if (DirWE == 'W') { LongDD = LongDD * -1; } LongDD = Math.Round(LongDD, 6); miradouro.Longitude_DD = "" + LongDD; miradouro.Longitude_DD = miradouro.Longitude_DD.Replace(",", "."); } if (Coordenadas == "DD") { miradouro.Latitude_DD = "" + latiDD; miradouro.Latitude_DD = miradouro.Latitude_DD.Replace(",", "."); miradouro.Longitude_DD = "" + longDD; miradouro.Longitude_DD = miradouro.Longitude_DD.Replace(",", "."); //latDoubleDMS = Convert.ToDouble(latiDD); if (latDoubleDMS < 0) { latDoubleDMS = latDoubleDMS * -1; dirNS = 'S'; } else { dirNS = 'N'; } grausFinaLatlDMS = (int)latDoubleDMS; auxminutosLat = (float)((latDoubleDMS - grausFinaLatlDMS) * 60.0); minutosFinalLatDMS = (int)auxminutosLat; auxsegundosLat = (float)((auxminutosLat - minutosFinalLatDMS) * 60.0); segundosFinalLatDMS = (float)Math.Round(auxsegundosLat, 3); miradouro.Latitude_DMS = "" + grausFinaLatlDMS + "º" + minutosFinalLatDMS + "'" + segundosFinalLatDMS + "''" + dirNS; miradouro.Latitude_DMS = miradouro.Latitude_DMS.Replace(",", "."); //longDoubleDMS = Convert.ToDouble(longDD); if (longDoubleDMS < 0) { longDoubleDMS = longDoubleDMS * -1; dirWE = 'W'; } else { dirWE = 'E'; } grausFinalLongDMS = (int)longDoubleDMS; auxminutosLong = (float)((longDoubleDMS - grausFinalLongDMS) * 60.0); minutosFinalLongDMS = (int)auxminutosLong; auxsegundosLong = (float)((auxminutosLong - minutosFinalLongDMS) * 60.0); segundosFinalLongDMS = (float)Math.Round(auxsegundosLong, 3); miradouro.Longitude_DMS = "" + grausFinalLongDMS + "º" + minutosFinalLongDMS + "'" + segundosFinalLongDMS + "''" + dirWE; miradouro.Longitude_DMS = miradouro.Longitude_DMS.Replace(",", "."); } if (ModelState.IsValid) { // todo: validacoes adicionais antes de inserir o miradouro //var coordenadas = formataCoordenadas(miradouro.Coordenadas_gps); if (!miradouro.E_Miradouro) { miradouro.Ocupacao_maxima = -1; } miradouro.Ativo = true; _context.Add(miradouro); await _context.SaveChangesAsync(); // todo: informar o utilizador, miradouro criado com sucesso //ViewData["sucess"] = "Miradouro criado com sucesso."; //return RedirectToAction(nameof(Index)); ViewBag.MiradouroSucesso = "Criar"; return(RedirectToAction("CriarSucesso")); } //ViewData["error"] = "Falha ao criar o miradouro!"; return(View(miradouro)); }
public async Task <IActionResult> Edit(int id, [Bind("MiradouroId,Nome,Localizacao,Terreno,E_Miradouro,Condicoes,Ocupacao_maxima,Descricao")] Miradouro miradouro, string grausLat = "0", string minutoLat = "0", string segundosLat = "0", char DirNS = 'N', string grausLong = "0", string minutosLong = "0", string segundosLong = "0", char DirWE = 'E', string Coordenadas = "DD", string latiDD = "0", string longDD = "0") { if (id != miradouro.MiradouroId) { return(NotFound()); } if (!miradouro.E_Miradouro) { miradouro.Ocupacao_maxima = -1; } if (Coordenadas == "DMS") { miradouro.Latitude_DMS = string.Concat(grausLat, "º", minutoLat, "'", segundosLat, "''", DirNS); miradouro.Latitude_DMS = miradouro.Latitude_DMS.Replace(",", "."); miradouro.Longitude_DMS = string.Concat(grausLong, "º", minutosLong, "'", segundosLong, "''", DirWE); miradouro.Longitude_DMS = miradouro.Longitude_DMS.Replace(",", "."); //latitude DD int grausLatitude = Int32.Parse(grausLat); int minutosLatitude = Int32.Parse(minutoLat); segundosLat = segundosLat.Replace(".", ","); float segundosLatitude = Convert.ToSingle(segundosLat); double LatDD = grausLatitude + (minutosLatitude / 60.0) + (segundosLatitude / 3600.0); if (DirNS == 'S') { LatDD = LatDD * -1; } LatDD = Math.Round(LatDD, 6); miradouro.Latitude_DD = "" + LatDD; miradouro.Latitude_DD = miradouro.Latitude_DD.Replace(",", "."); //longitude DD int grausLongitude = Int32.Parse(grausLong); int minutosLongitude = Int32.Parse(minutosLong); segundosLong = segundosLong.Replace(".", ","); float segundosLongitude = Convert.ToSingle(segundosLong); double LongDD = grausLongitude + (minutosLongitude / 60.0) + (segundosLongitude / 3600.0); if (DirWE == 'W') { LongDD = LongDD * -1; } LongDD = Math.Round(LongDD, 6); miradouro.Longitude_DD = "" + LongDD; miradouro.Longitude_DD = miradouro.Longitude_DD.Replace(",", "."); } if (Coordenadas == "DD") { miradouro.Latitude_DD = "" + latiDD; miradouro.Latitude_DD = miradouro.Latitude_DD.Replace(",", "."); miradouro.Longitude_DD = "" + longDD; miradouro.Longitude_DD = miradouro.Longitude_DD.Replace(",", "."); double latDoubleDMS = Convert.ToDouble(latiDD); char dirNS; if (latDoubleDMS < 0) { latDoubleDMS = latDoubleDMS * -1; dirNS = 'S'; } else { dirNS = 'N'; } int grausFinaLatlDMS = (int)latDoubleDMS; float auxminutosLat = (float)((latDoubleDMS - grausFinaLatlDMS) * 60.0); int minutosFinalLatDMS = (int)auxminutosLat; float auxsegundosLat = (float)((auxminutosLat - minutosFinalLatDMS) * 60.0); float segundosFinalLatDMS = (float)Math.Round(auxsegundosLat, 3); miradouro.Latitude_DMS = "" + grausFinaLatlDMS + "º" + minutosFinalLatDMS + "'" + segundosFinalLatDMS + "''" + dirNS; miradouro.Latitude_DMS = miradouro.Latitude_DMS.Replace(",", "."); double longDoubleDMS = Convert.ToDouble(longDD); char dirWE; if (longDoubleDMS < 0) { longDoubleDMS = longDoubleDMS * -1; dirWE = 'W'; } else { dirWE = 'E'; } int grausFinalLongDMS = (int)longDoubleDMS; float auxminutosLong = (float)((longDoubleDMS - grausFinalLongDMS) * 60.0); int minutosFinalLongDMS = (int)auxminutosLong; float auxsegundosLong = (float)((auxminutosLong - minutosFinalLongDMS) * 60.0); float segundosFinalLongDMS = (float)Math.Round(auxsegundosLong, 3); miradouro.Longitude_DMS = "" + grausFinalLongDMS + "º" + minutosFinalLongDMS + "'" + segundosFinalLongDMS + "''" + dirWE; miradouro.Longitude_DMS = miradouro.Longitude_DMS.Replace(",", "."); } if (ModelState.IsValid) { try { _context.Update(miradouro); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!MiradouroExists(miradouro.MiradouroId)) { // todo: talvez alguem apagou esse miradouro // pergunta ao utilizador se quer criar um novo com os mesmos dados return(NotFound()); } else { // todo: mostrar o erro e perguntar se quer tentar outra vez throw; } } //return RedirectToAction(nameof(Index)); ViewBag.MiradouroSucesso = "Editar"; return(RedirectToAction("EditarSucesso")); } // todo: informar o utilizador que o miradouro foi editado com sucesso return(View(miradouro)); }