Source code for geo_loc
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
import matplotlib.path as mpltPath
[docs]def read_data(a,b):
"""
Read data of points and exclution zone.
:param a: Point coordinates to locate inside area.
:param b: Area boundaries coordinates. A polygon with X,Y coordinate of its vertices
:return:
1. area_coord : List. Area limits coordinates. An exclution zone.
2. points: List. Point coordinates.
3. points_coord: Dataframe. Point coordinates
"""
df=pd.read_csv(a)#Point coordinate
df2=pd.read_csv(b)#Area limits coordinates. Exclution zone.
#df2.drop('Unnamed: 2', axis=1, inplace=True)# to remove some column from data
#Dataframe to list
area_coord = [df2.columns.values.tolist()] + df2.values.tolist() #Exclution zone
del area_coord[0] #delete name columns
points_coord=df[['X', 'Y']] #point coordinates
points = [points_coord.columns.values.tolist()] + points_coord.values.tolist()
del points[0] #delete name columns
return area_coord, points, points_coord
#........................................................................
[docs]def poly_creation(area_coord):
"""
Polygon creation.
:param area_coord: List. Area limits coordinates. An exclution zone.
:return: polygon boundaries (class 'matplotlib.collections.PatchCollection')
"""
patches = []
num_polygons = 1
for i in range(num_polygons):
polygon = Polygon(area_coord, True)
patches.append(polygon)
p = PatchCollection(patches, cmap=matplotlib.cm.jet, alpha=0.4)
return p
[docs]def find_points(area_coord, points):
"""
Find points inside the polygon or exclution zone.
:param area_coord: List. Area limits coordinates. An exclution zone.
:param points: List. Point coordinates.
:return: position (class 'numpy.ndarray'). Position index on path.contains_points(points) wich value is "True".
"""
path = mpltPath.Path(area_coord)
inside = path.contains_points(points)
#...........................................................................
position=np.where(inside)[0] #find in list the points inside exclution zone.
#............................................................................
return position
[docs]def save_position(position, points_coord):
"""
Save in dataframe the point coordinates found inside area.
:param position: Class 'numpy.ndarray'. Position index on path.contains_points(points) wich value is "True".
:param points_coord: Dataframe. Point coordinates
:return: Dataframe with points coordinates inside area.
"""
df = pd.DataFrame(columns=['X', 'Y'])
for i in position:
df =df.append(points_coord.iloc[[i]], ignore_index=True)
df['position']=position
return df