Point inside the Polygon using Latitude, Longitude ASP.Net
I'm taking the polygon points from database and also the points i fetch from database that need to check inside or outside the polygon (lat,lon), With this we cna determine a polygon and implement an algorithm which would check if a point is inside or outside the polygon.Its very simple code i ASP.net C#, you can also use this login in ASP or PHP based code.
public static void CheckPloygonPoint()
{
string sqlQuery = "select latitude, longitude from tablename";
SqlDataAdapter adp1 = new SqlDataAdapter(sqlQuery, DbConn);
DataSet ds = new DataSet();
adp1.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
for (int LIntCtr = 0; LIntCtr <= ds.Tables[0].Rows.Count - 1; LIntCtr++)
{
string geoCounty = "";
string latitude="";
string longitude="";
if (geoCounty.Length == 0)
geoCounty = ds.Tables[0].Rows[LIntCtr]["geofence"].ToString();
else
{
if ((ds.Tables[0].Rows[LIntCtr]["geofence"].ToString()).Length > 0)
{
geoCounty = ds.Tables[0].Rows[LIntCtr]["geofence"].ToString();
}
}
latitude = ds.Tables[0].Rows[LIntCtr]["latitude"].ToString();
longitude = ds.Tables[0].Rows[LIntCtr]["longitude"].ToString();
bool PointInOutGeofence = true;
if (geoCounty.Length > 0)
{
//DataView dv = dsgeo.Tables[0].DefaultView;
//dv.RowFilter = "CountyName='" + geoCounty + "'";
//if (geoArr.Length <= 0)
// geoArr = dv[0]["latlng"].ToString();
//else
// geoArr = geoArr + "#" + dv[0]["latlng"].ToString();
geoCounty = "";
PointInOutGeofence = checkPointExistsInGeofencePolygon(ds.Tables[0].Rows[LIntCtr]["Latlng"].ToString(), latitude, longitude);
}
}
}
}
private static bool checkPointExistsInGeofencePolygon(string latlnglist, string lat, string lng)
{
List<Loc> objList = new List<Loc>();
// sample string should be like this strlatlng = "39.11495,-76.873259|39.114588,-76.872808|39.112921,-76.870373|";
string[] arr = latlnglist.Split('|');
for (int i = 0; i <= arr.Length - 1; i++)
{
string latlng = arr[i];
string[] arrlatlng = latlng.Split(',');
Loc er = new Loc(Convert.ToDouble(arrlatlng[0]), Convert.ToDouble(arrlatlng[1]));
objList.Add(er);
}
Loc pt = new Loc(Convert.ToDouble(lat), Convert.ToDouble(lng));
if (IsPointInPolygon(objList, pt) == true)
{
return true;
}
else
{
return false;
}
}
private static bool IsPointInPolygon(List<Loc> poly, Loc point)
{
int i, j;
bool c = false;
for (i = 0, j = poly.Count - 1; i < poly.Count; j = i++)
{
if ((((poly[i].Lt <= point.Lt) && (point.Lt < poly[j].Lt)) |
((poly[j].Lt <= point.Lt) && (point.Lt < poly[i].Lt))) &&
(point.Lg < (poly[j].Lg - poly[i].Lg) * (point.Lt - poly[i].Lt) / (poly[j].Lt - poly[i].Lt) + poly[i].Lg))
c = !c;
}
return c;
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// Summary description for Loc
/// </summary>
public class Loc
{
private double lt;
private double lg;
public double Lg
{
get { return lg; }
set { lg = value; }
}
public double Lt
{
get { return lt; }
set { lt = value; }
}
public Loc(double lt, double lg)
{
this.lt = lt;
this.lg = lg;
}
}
Related Alrticles