2020-11-13 00:19:20 -03:00
{
"cells": [
{
"cell_type": "code",
2020-12-18 16:27:01 -03:00
"execution_count": 58,
2020-11-13 00:19:20 -03:00
"metadata": {},
2020-12-18 16:27:01 -03:00
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/dlsaavedra/anaconda3/envs/new/lib/python3.7/site-packages/pysal/explore/segregation/network/network.py:16: UserWarning: You need pandana and urbanaccess to work with segregation's network module\n",
"You can install them with `pip install urbanaccess pandana` or `conda install -c udst pandana urbanaccess`\n",
" \"You need pandana and urbanaccess to work with segregation's network module\\n\"\n",
"/home/dlsaavedra/anaconda3/envs/new/lib/python3.7/site-packages/pysal/model/spvcm/abstracts.py:10: UserWarning: The `dill` module is required to use the sqlite backend fully.\n",
" from .sqlite import head_to_sql, start_sql\n"
]
}
],
2020-11-13 00:19:20 -03:00
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"from matplotlib import path\n",
"import matplotlib.patches as patches\n",
"from skimage import draw\n",
"import scipy.ndimage as ndimage\n",
"import Utils\n",
"import georasters as gr\n",
"import cv2\n",
"from Utils import doubleMADsfromMedian\n",
"from skimage.transform import resize\n",
"import pickle\n",
"import simplekml\n",
2020-12-18 16:27:01 -03:00
"import geopandas\n",
2020-11-13 00:19:20 -03:00
"\n",
"def order_rect(List_P_strings, top_bottom = False):\n",
" #If top_bottom is false then sort right left\n",
" if not top_bottom:\n",
" List_P_strings = [[(List_P[0][1],List_P[0][0]),\n",
" (List_P[1][1],List_P[1][0]),\n",
" (List_P[2][1],List_P[2][0]),\n",
" (List_P[3][1],List_P[3][0])] for List_P in List_P_strings]\n",
" \n",
" bboxes=sorted(List_P_strings, key=lambda x: x[0][0])\n",
" bboxes = [(P[0][0], P[0][1], P[2][0]-P[0][0], P[2][1]-P[0][1]) for P in bboxes]\n",
" df=pd.DataFrame(bboxes, columns=['x','y','w', 'h'], dtype=int)\n",
" \n",
"\n",
" df[\"x2\"] = df[\"x\"]+df[\"w\"] # adding column for x on the right side\n",
" df = df.sort_values([\"x\",\"y\", \"x2\"]) # sorting\n",
"\n",
"\n",
" for i in range(2): # change rows between each other by their coordinates several times \n",
" # to sort them completely \n",
" for ind in range(len(df)-1):\n",
" # print(ind, df.iloc[ind][4] > df.iloc[ind+1][0])\n",
" if df.iloc[ind][4] > df.iloc[ind+1][0] and df.iloc[ind][1]> df.iloc[ind+1][1]:\n",
" df.iloc[ind], df.iloc[ind+1] = df.iloc[ind+1].copy(), df.iloc[ind].copy()\n",
" \n",
" L_F = [np.array([[box[0], box[1]], \n",
" [box[0] + box[2], box[1]], \n",
" [box[0] + box[2], box[1] + box[3]], \n",
" [box[0], box[1] + box[3]]]) for box in df.values.tolist()]\n",
" \n",
" if not top_bottom:\n",
" L_F = [[(List_P[0][1],List_P[0][0]),\n",
" (List_P[1][1],List_P[1][0]),\n",
" (List_P[2][1],List_P[2][0]),\n",
" (List_P[3][1],List_P[3][0])] for List_P in L_F]\n",
" return np.array(L_F) "
]
},
{
"cell_type": "markdown",
"metadata": {},
2020-11-18 03:05:29 -03:00
"source": [
"# Parameters"
]
2020-11-13 00:19:20 -03:00
},
{
"cell_type": "code",
2020-12-18 16:27:01 -03:00
"execution_count": 92,
2020-11-13 00:19:20 -03:00
"metadata": {},
"outputs": [],
"source": [
"#path_T = \"Thermo.tif\"\n",
"#path_String = \"Thermo_String_PV01.tif\"\n",
"\n",
2020-12-17 18:46:01 -03:00
"path_T = \"Los_Loros/TH_02_index_thermal_ir.tif\"\n",
2020-12-18 16:27:01 -03:00
"path_Mesa_shape = \"Los_Loros/Mesas.shp\"\n",
"#path_String = \"Los_Loros/Raster_Test.tif\"\n",
2020-12-17 18:46:01 -03:00
"ZonaPV = 'Test'\n",
"path_kml_panel = 'Los_Loros/KML/Paneles_' + ZonaPV +'.kml'\n",
"path_kml_mesa ='Los_Loros/KML/Mesa_' + ZonaPV +'.kml'\n",
"path_dict = 'Los_Loros/KML/Mesa_' + ZonaPV + '.pickle'\n",
2020-11-13 00:19:20 -03:00
"\n",
2020-12-17 18:46:01 -03:00
"#panel_size = (11 , 21)\n",
2020-11-13 00:19:20 -03:00
"#panel_size = (37 , 17) #weight, height size#\n",
"#panel_size = (20 , 35)\n",
2020-12-17 18:46:01 -03:00
"\n",
"split_Weight, split_Height = (10,2)\n",
2020-12-18 16:27:01 -03:00
"overlap = 0\n",
2020-11-13 00:19:20 -03:00
"order_top_bottom = False # order top bottom or right left\n",
"\n",
"\n",
2020-12-18 16:27:01 -03:00
"GR_T = gr.from_file(path_T)\n",
"geot = GR_T.geot\n",
"GR_T.raster.data[GR_T.raster.data == -10000] = 0"
2020-11-18 03:05:29 -03:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Enumerate Tables and Panels"
]
},
{
"cell_type": "code",
2020-12-18 16:27:01 -03:00
"execution_count": 93,
2020-11-18 03:05:29 -03:00
"metadata": {},
2020-12-18 16:27:01 -03:00
"outputs": [
{
"data": {
"text/plain": [
"'\"\\nlabel_im, nb_labels = ndimage.label(GR_String.raster.data > 0)#, structure= np.ones((2,2))) ## Label each connect region\\n\\n \\nL_strings = {} # {name: \\'001\\', points:(top-left, top-right, bottom-right, bottom-left) (x,y), \\'panels\\' : }\\n\\nepsilon = 0\\n\\nList_P_strings = []\\nfor i in range(1, nb_labels + 1):\\n \\n countours, hierarchy = cv2.findContours(np.uint8(label_im == i), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\\n x_max = np.max(countours[0][:, 0, 0]) + epsilon\\n y_max = np.max(countours[0][:, 0, 1]) + epsilon\\n x_min = np.min(countours[0][:, 0, 0]) - epsilon\\n y_min = np.min(countours[0][:, 0, 1]) - epsilon\\n \\n List_P_strings.append([(x_min, y_min), (x_max, y_min), (x_max, y_max), (x_min, y_max)])\\n \\n'"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
2020-11-18 03:05:29 -03:00
"source": [
2020-12-18 16:27:01 -03:00
"# If Mesas is Raster\n",
"\"\"\"\"\n",
2020-11-13 00:19:20 -03:00
"label_im, nb_labels = ndimage.label(GR_String.raster.data > 0)#, structure= np.ones((2,2))) ## Label each connect region\n",
"\n",
" \n",
"L_strings = {} # {name: '001', points:(top-left, top-right, bottom-right, bottom-left) (x,y), 'panels' : }\n",
"\n",
"epsilon = 0\n",
"\n",
"List_P_strings = []\n",
"for i in range(1, nb_labels + 1):\n",
" \n",
" countours, hierarchy = cv2.findContours(np.uint8(label_im == i), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\n",
" x_max = np.max(countours[0][:, 0, 0]) + epsilon\n",
" y_max = np.max(countours[0][:, 0, 1]) + epsilon\n",
" x_min = np.min(countours[0][:, 0, 0]) - epsilon\n",
" y_min = np.min(countours[0][:, 0, 1]) - epsilon\n",
" \n",
" List_P_strings.append([(x_min, y_min), (x_max, y_min), (x_max, y_max), (x_min, y_max)])\n",
2020-12-18 16:27:01 -03:00
" \n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [],
"source": [
"## If mesas is Shape\n",
"\n",
"df = geopandas.read_file(path_Mesa_shape)\n",
"G = [i for i in df.geometry]\n",
"List_P_strings = []\n",
2020-11-13 00:19:20 -03:00
"\n",
2020-12-18 16:27:01 -03:00
"for g in G: \n",
" x,y = g.exterior.coords.xy\n",
" coords = np.dstack((x,y)).tolist()[0][:-1]\n",
" List_P_strings.append(Utils.gps2pixel(np.array(coords), geot))"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [],
"source": [
"\n",
"L_strings = {}\n",
2020-11-13 00:19:20 -03:00
" \n",
"for i,List_P in enumerate(order_rect(List_P_strings, top_bottom=order_top_bottom), 1):\n",
" \n",
" L_strings[str(i)] = {'id': i, \n",
" 'points' : List_P, \n",
" 'panels' : {}, \n",
" 'status': 'default', \n",
2020-12-17 18:46:01 -03:00
" 'T': np.mean(GR_T.raster.data[List_P[0][1]:List_P[2][1],List_P[0][0]:List_P[2][0]])}\n",
2020-11-13 00:19:20 -03:00
"\n",
"for string_key in L_strings.keys():\n",
" \n",
" string = L_strings[string_key]\n",
" string['panels'] = {}\n",
" Points = Utils.order_points_rect(string['points']).astype(np.int)\n",
" \n",
" ## If strings is vertical or horizontal\n",
2020-12-17 18:46:01 -03:00
" #if (Points[2][0] - Points[0][0]) > (Points[2][1] - Points[0][1]):\n",
" # split_Weight, split_Height = np.int((Points[2][0] - Points[0][0]) / panel_size[0]) , np.int((Points[2][1] - Points[0][1]) / panel_size[1])\n",
" #else:\n",
" # split_Weight, split_Height = np.int((Points[2][0] - Points[0][0]) / panel_size[1]) , np.int((Points[2][1] - Points[0][1]) / panel_size[0])\n",
2020-11-13 00:19:20 -03:00
"\n",
2020-12-17 18:46:01 -03:00
" #split_Weight = max(split_Weight, 1)\n",
" #split_Height = max(split_Height, 1)\n",
2020-11-13 00:19:20 -03:00
" M, maxWidth, maxHeight = Utils.perspectiveTransform(Points)\n",
" sub_division = Utils.subdivision_rect([split_Weight, split_Height], maxWidth, maxHeight, overlap)\n",
" sub_division_origin = np.uint(cv2.perspectiveTransform(np.array(sub_division), np.linalg.inv(M)))\n",
" \n",
" for i,panels_coord in enumerate(order_rect(sub_division_origin, order_top_bottom),1):\n",
" string['panels'][str(i)] = {'id' : i,\n",
" 'points' : panels_coord,\n",
" 'status': 'default', \n",
2020-12-17 18:46:01 -03:00
" 'T' : np.mean(GR_T.raster.data[panels_coord[0][1]:panels_coord[2][1], panels_coord[0][0]:panels_coord[2][0]]),\n",
2020-11-13 00:19:20 -03:00
" 'severidad': 'default'} \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
2020-11-18 03:05:29 -03:00
"source": [
"# Save dictionary with gps data"
]
2020-11-13 00:19:20 -03:00
},
{
"cell_type": "code",
2020-12-18 16:27:01 -03:00
"execution_count": 96,
2020-11-13 00:19:20 -03:00
"metadata": {},
"outputs": [],
"source": [
"## Save List in coordinate latitud and longitude ###\n",
2020-12-18 16:27:01 -03:00
"\n",
2020-11-13 00:19:20 -03:00
"L_strings_coord = {}\n",
" \n",
"for string_key in L_strings.keys():\n",
" \n",
" string = L_strings[string_key]\n",
" points = string['points']\n",
" string_coord = {'id': 'Mesa_' + str(string['id']).zfill(3), \n",
" 'points': Utils.pixel2gps(points, geot), \n",
" 'panels': {}, \n",
" 'status': string['status'], \n",
" 'T' : string['T']}\n",
" \n",
" for panel_key in string['panels'].keys():\n",
" \n",
" panel = string['panels'][panel_key]\n",
" points = panel['points']\n",
" panel_coord = {'id': panel['id'],\n",
" 'points': Utils.pixel2gps(points, geot), \n",
" 'status': panel['status'], \n",
" 'prob': 0.0, \n",
2020-12-17 18:46:01 -03:00
" 'T': panel['T'], \n",
2020-11-13 00:19:20 -03:00
" 'severidad': 'default'}\n",
" \n",
" string_coord['panels'][panel_key] = panel_coord\n",
" \n",
" L_strings_coord[string_key] = string_coord\n",
2020-12-17 18:46:01 -03:00
"\n"
2020-11-13 00:19:20 -03:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Display image"
]
},
{
"cell_type": "code",
2020-12-18 16:27:01 -03:00
"execution_count": 102,
2020-12-17 18:46:01 -03:00
"metadata": {
"scrolled": true
},
2020-11-13 00:19:20 -03:00
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
2020-12-18 16:27:01 -03:00
"image/png": "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
2020-11-13 00:19:20 -03:00
"text/plain": [
"<Figure size 1152x1152 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
2020-12-18 16:27:01 -03:00
"image/png": "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
2020-11-13 00:19:20 -03:00
"text/plain": [
"<Figure size 1152x1152 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"## Load List in coordinate latitud and longitude to pixels ###\n",
2020-12-18 16:27:01 -03:00
"string = L_strings_coord['6']\n",
2020-11-13 00:19:20 -03:00
"panels = string['panels']\n",
"\n",
"\n",
"epsilon = 0\n",
"matrix_expand_bounds = [[-epsilon, -epsilon],[+epsilon, -epsilon], [+epsilon, +epsilon], [-epsilon, +epsilon]]\n",
"\n",
"#geot = GR_RGB.geot\n",
"geot = GR_T.geot\n",
2020-12-18 16:27:01 -03:00
"\n",
2020-11-13 00:19:20 -03:00
"\n",
"\n",
"Points = Utils.gps2pixel(string['points'], geot) + matrix_expand_bounds\n",
"\n",
"\n",
"\n",
"plt.figure(0)\n",
"plt.figure(figsize=(16, 16))\n",
2020-12-18 16:27:01 -03:00
"plt.imshow(GR_T.raster.data)\n",
2020-11-13 00:19:20 -03:00
"plt.title('Origin Image')\n",
"ax = plt.gca()\n",
"\n",
"for Poly_key in L_strings_coord.keys():\n",
" \n",
" Poly = L_strings_coord[Poly_key]\n",
2020-12-18 16:27:01 -03:00
" poly = patches.Polygon(Utils.gps2pixel(Poly['points'],geot),\n",
2020-11-13 00:19:20 -03:00
" linewidth=2,\n",
" edgecolor='red',\n",
" alpha=0.5,\n",
" fill = True)\n",
2020-12-18 16:27:01 -03:00
" plt.text(np.mean([x[0] for x in Utils.gps2pixel(Poly['points'],geot)]), \n",
" np.mean([y[1] for y in Utils.gps2pixel(Poly['points'],geot)]) , \n",
2020-11-13 00:19:20 -03:00
" str(Poly['id']).split('_')[-1], bbox=dict(facecolor='red', alpha=0.8), fontsize=10)\n",
"\n",
" ax.add_patch(poly)\n",
" \n",
"plt.figure(1)\n",
"plt.figure(figsize=(16, 16))\n",
2020-12-17 18:46:01 -03:00
"#plt.imshow(GR_T.raster[0,Points[0][1] : Points[2][1], Points[0][0]: Points[2][0]])\n",
"plt.imshow(GR_T.raster[Points[0][1] : Points[2][1], Points[0][0]: Points[2][0]])\n",
2020-11-13 00:19:20 -03:00
"#plt.imshow((GR_RGB.raster[:3,:,:]).transpose((1, 2, 0))[Points[0][1] : Points[2][1], Points[0][0]: Points[2][0],:])\n",
"\n",
"plt.title('Subdive Origin Image')\n",
"ax = plt.gca()\n",
"\n",
"for Poly_key in panels.keys():\n",
" \n",
" Poly = panels[Poly_key]\n",
" poly = patches.Polygon(Utils.gps2pixel(Poly['points'],geot) - (Points[0][0], Points[0][1]),\n",
" linewidth=2,\n",
" edgecolor='red',\n",
" fill = False)\n",
" plt.text(np.mean([x[0] for x in Utils.gps2pixel(Poly['points'],geot) - (Points[0][0], Points[0][1])]), np.mean([y[1] for y in Utils.gps2pixel(Poly['points'],geot) - (Points[0][0], Points[0][1])]) , \n",
" str(Poly['id']), bbox=dict(facecolor='red', alpha=0.0), fontsize=8)\n",
"\n",
" ax.add_patch(poly)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Save KML"
]
},
{
"cell_type": "code",
2020-12-18 16:27:01 -03:00
"execution_count": 98,
2020-11-13 00:19:20 -03:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Listo\n"
]
}
],
"source": [
2020-12-17 18:46:01 -03:00
"\n",
"## Save List in coordinate latitud and longitude ###\n",
"with open(path_dict, 'wb') as handle:\n",
" pickle.dump(L_strings_coord, handle, protocol=pickle.HIGHEST_PROTOCOL)\n",
2020-11-18 03:05:29 -03:00
"\n",
"## Load List in coordinate latitud and longitude ###\n",
"with open(path_dict, \"rb\") as fp:\n",
" L_strings_coord = pickle.load(fp)\n",
2020-11-13 00:19:20 -03:00
"\n",
"kml=simplekml.Kml()\n",
"\n",
"\n",
"for string_key in L_strings_coord.keys():\n",
" \n",
" string = L_strings_coord[string_key]\n",
" points = string['points']\n",
" \n",
2020-12-17 18:46:01 -03:00
" pmt = kml.newpolygon(name= string['id'], \n",
" outerboundaryis = points)\n",
2020-11-13 00:19:20 -03:00
" pmt.extendeddata.newdata(name='Mesa', value=string['id'])\n",
2020-12-17 18:46:01 -03:00
" pmt.extendeddata.newdata(name= 'T°', value= string['T'])\n",
" \n",
2020-11-13 00:19:20 -03:00
"kml.save(path_kml_mesa)\n",
"\n",
"\n",
"kml=simplekml.Kml()\n",
"\n",
"\n",
"for string_key in L_strings_coord.keys():\n",
" \n",
" string = L_strings_coord[string_key]\n",
" points = string['points']\n",
" \n",
" for panel_key in string['panels'].keys():\n",
" panel = string['panels'][panel_key]\n",
" points = panel['points']\n",
" \n",
" pmt = kml.newpolygon(outerboundaryis = points)\n",
" pmt.extendeddata.newdata(name= 'Id integer', value= str(string_key).zfill(3) + '_' + str(panel['id']).zfill(3))\n",
" pmt.extendeddata.newdata(name= 'Id panel', value= str(panel['id']).zfill(3))\n",
" pmt.extendeddata.newdata(name='Zona PV', value= ZonaPV)\n",
" pmt.extendeddata.newdata(name='Cód. Fall', value= 0)\n",
" pmt.extendeddata.newdata(name= 'Tipo falla', value= panel['status'])\n",
" pmt.extendeddata.newdata(name= 'Mesa', value= string['id'])\n",
2020-12-17 18:46:01 -03:00
" pmt.extendeddata.newdata(name= 'T°', value= panel['T'])\n",
2020-11-13 00:19:20 -03:00
" \n",
"kml.save(path_kml_panel)\n",
"print('Listo')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
2020-12-18 16:27:01 -03:00
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [],
"source": []
},
2020-11-13 00:19:20 -03:00
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}