public void GetZoneForIncidentTest() { var point = new PoligonoDetalle { Latitud = float.Parse("25.721972"), Longitud = float.Parse("-100.237198") }; var expectedZonaId = 2; var zona = GetZoneForIncident(point); Assert.IsNotNull(zona); Assert.AreEqual(expectedZonaId, zona.Id); }
public Zona GetZoneForIncident(PoligonoDetalle point) { var db = new RiinContainer(); var result = false; Zona zone = null; var Zonas = db.Estados.First(e => e.Id == 2).Zonas.Where(z => z.Poligonos.PoligonoDetalles.Count > 0); foreach (var zona in Zonas) { var polygon = zona.Poligonos.PoligonoDetalles.ToList();//.Select(p => new Coordinate { Latitude = p.Latitud, Longitude = p.Longitud }).ToList(); Assert.IsTrue(polygon.Count > 0, "Polygon should have coordinates"); result = IsPointInPolygon(polygon, point); if (result) { zone = zona; break; } } return zone; }
static bool IsPointInPolygon(IList<PoligonoDetalle> polygon, PoligonoDetalle point) { int i, j; var c = false; for (i = 0, j = polygon.Count - 1; i < polygon.Count; j = i++) { if ((((polygon[i].Latitud <= point.Latitud) && (point.Latitud < polygon[j].Latitud)) || ((polygon[j].Latitud <= point.Latitud) && (point.Latitud < polygon[i].Latitud))) && (point.Longitud < (polygon[j].Longitud - polygon[i].Longitud) * (point.Latitud - polygon[i].Latitud) / (polygon[j].Latitud - polygon[i].Latitud) + polygon[i].Longitud)) c = !c; } return c; }
public void NotZoneFoundForIncident() { var point = new PoligonoDetalle { Latitud = float.Parse("25.690419"), Longitud = float.Parse("-100.232048") }; var zona = GetZoneForIncident(point); Assert.IsNull(zona); }
public JsonResult GetZoneForIncident(float lat, float lng) { var db = new RiinContainer(); var result = false; Zona zone = null; PoligonoDetalle point = new PoligonoDetalle(); point.Latitud = lat; point.Longitud = lng; var Zonas = db.Zonas.Where(z => z.Poligonos.PoligonoDetalles.Count > 0); foreach (var zona in Zonas) { var polygon = zona.Poligonos.PoligonoDetalles.ToList(); result = IsPointInPolygon(polygon, point); if (result) { zone = zona; break; } } return Json(zone != null ? zone.Id : -1, JsonRequestBehavior.AllowGet); }