Search code examples
pythonpandasnumpypolygongeo

How to check if a lat/lon coordinate is within a polygon, using Python. (Taking into account the great circle.)


I have this data frame, that contains lat/lon coordiantes:

      Lat       Lon
 29.39291 -98.50925
 29.39923 -98.51256
 29.40147 -98.51123
 29.38752 -98.52372
 29.39291 -98.50925
 29.39537 -98.50402
 29.39343 -98.49707
 29.39291 -98.50925
 29.39556 -98.53148

These are the coordinates that construct the polygon:

       Lat        Lon
 29.392945 -98.507696
 29.406167 -98.509074
 29.407234 -98.517039
 29.391325 -98.517166

I want to check for each coordinate (from the first data frame) if it's within the polygon, using Python, and taking into account the great circle.

Expected result:

      Lat       Lon  Within
 29.39291 -98.50925       1
 29.39923 -98.51256       1
 29.40147 -98.51123       1
 29.38752 -98.52372       0
 29.39291 -98.50925       1
 29.39537 -98.50402       0
 29.39343 -98.49707       0
 29.39291 -98.50925       1
 29.39556 -98.53148       0

Solution

  • From here What's the fastest way of checking if a point is inside a polygon in python, assuming your dataframe of the polygon is df_poly and the points are df_points:

    from shapely.geometry import Point
    from shapely.geometry.polygon import Polygon
    
    polygon = Polygon([tuple(x) for x in df_poly[['Lat', 'Lon']].to_numpy()])
    df_points['Within'] = df_points.apply(lambda x: polygon.contains(Point(x['Lat'], x['Lon'])), axis=1)