2020-11-18 03:05:29 -03:00
{
"cells": [
{
"cell_type": "code",
2020-11-25 16:03:59 -03:00
"execution_count": 1,
2020-11-18 03:05:29 -03:00
"metadata": {},
2020-11-25 16:03:59 -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-18 03:05:29 -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",
"\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": {},
"source": [
"# Parameters"
]
},
{
"cell_type": "code",
2020-11-25 16:03:59 -03:00
"execution_count": 2,
2020-11-18 03:05:29 -03:00
"metadata": {},
"outputs": [],
"source": [
"#path_T = \"Thermo.tif\"\n",
"#path_String = \"Thermo_String_PV01.tif\"\n",
"\n",
2020-11-25 16:03:59 -03:00
"path_T = \"Pampa/THERMAL_01.tif\"\n",
"path_String = \"Pampa/BP-A-1.tif\"\n",
"ZonaPV = 'BP-A-1'\n",
2020-11-18 03:05:29 -03:00
"path_kml_panel = 'Pampa/KML/Paneles_' + ZonaPV +'.kml'\n",
"path_kml_mesa ='Pampa/KML/Mesa_' + ZonaPV +'.kml'\n",
"path_dict = 'Pampa/KML/Mesa_' + ZonaPV + '.pickle'\n",
"\n",
"panel_size = (29 , 50)\n",
"#panel_size = (37 , 17) #weight, height size#\n",
"#panel_size = (20 , 35)\n",
"overlap = 0\n",
"order_top_bottom = False # order top bottom or right left\n",
"\n",
"\n",
"GR_String = gr.from_file(path_String)\n",
"GR_T = gr.from_file(path_T)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Enumerate Tables and Panels"
]
},
{
"cell_type": "code",
2020-11-25 16:03:59 -03:00
"execution_count": 3,
2020-11-18 03:05:29 -03:00
"metadata": {},
"outputs": [],
"source": [
"\n",
"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",
"\n",
" \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",
" 'T':0}\n",
"\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",
" 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",
"\n",
" split_Weight = max(split_Weight, 1)\n",
" split_Height = max(split_Height, 1)\n",
" 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",
" 'T' : 0,\n",
" 'severidad': 'default'} \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Save dictionary with gps data"
]
},
{
"cell_type": "code",
2020-11-25 16:03:59 -03:00
"execution_count": 4,
2020-11-18 03:05:29 -03:00
"metadata": {},
"outputs": [],
"source": [
"## Save List in coordinate latitud and longitude ###\n",
"geot = GR_String.geot\n",
"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",
" 'T': 0, \n",
" 'severidad': 'default'}\n",
" \n",
" string_coord['panels'][panel_key] = panel_coord\n",
" \n",
" L_strings_coord[string_key] = string_coord\n",
"\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)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Display image"
]
},
{
"cell_type": "code",
2020-11-25 16:03:59 -03:00
"execution_count": 5,
2020-11-18 03:05:29 -03:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
2020-11-25 16:03:59 -03:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6IAAAOVCAYAAABzh12SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXRkZ33n//dzq0pLa+mV7rbb7b29gG3CZmwIZAgEAiZgliEsNsuPCUkIJJnJyZkQAoFhiAcCmUwgZAwJxGZJJ0BMSIhZxsmEDEtjCGBwDuCl23Z77Vavkkq13ef3hyRbrVZVSXVLVSrp/TrHx92qq/o+6m6V7qee5RtijEiSJEmS1ClJtwcgSZIkSVpbDKKSJEmSpI4yiEqSJEmSOsogKkmSJEnqKIOoJEmSJKmjDKKSJEmSpI4yiEqS1rwQwu+GEP683ddKkqSFBfuISpJWkxDCa4HfAs4BjgE3AG+JMR7p5rgAQgh/CeyPMf5et8ciSVI3OSMqSVo1Qgi/BbwH+G1gPXAZcAbwlRBCX53PyXduhJIkCQyikqRVIoQwCrwTeHOM8YsxxkqMcR/wMqbD6FUz170jhPCZEMInQgjHgNfOfOwTc57r1SGEu0IIYyGEt4UQ9oUQnjXn8z8x8+szQwgxhPCaEMLdIYSDIYS3LnK8s5/7uhDCPSGEwyGEXwkhPCmEcEsI4UgI4YNzrj8nhPBPM2M6GEL4ZAhhw5zHHx9C+G4I4XgI4dMhhL8OIfz3OY8/P4TwvZnn/XoI4ZIMf9ySJGViEJUkrRZPAQaAv537wRjjOHAj8HNzPvxC4DPABuCTc68PITwa+BDwKuAUpmdWdzSp/dPA+cAzgbeHEC5cwrifDOwCfhH4Y+CtwLOAxwAvCyH8zOzQgGuAU4ELgZ3AO2bG3Mf0EuS/BDYBfwW8aM7X9Hjgo8AvA5uBa4HPhxD6lzBOSZLaxiAqSVottgAHY4zVBR67f+bxWd+IMX4uxpjGGIvzrn0p8Pcxxv8XYywDbweaHajwzhhjMcb4feD7wGOXMO53xRinYoxfBiaAv4oxPhRjvBf4V+BxADHG22OMX4kxlmKMB4A/AmZD6mVAHviTmZngvwW+NafGLwHXxhj3xBhrMcbrgNLM50mS1HHui5EkrRYHgS0hhPwCYfSUmcdn3dPgeU6d+3iMcTKEMNak9gNzfj0JDC9ivLMenPPr4gK/HwYIIWwF/gR4GjDC9JvJh+eM+d544gmEc7/GM4DXhBDePOdjfTOfJ0lSxzkjKklaLb7B9Czfi+d+MIQwBDwXuGnOhxvNcN4PnDbn8weZXs7abdcwPe5LYoyjTO95DTOP3Q/sCCGEOdfvnPPre4B3xxg3zPlvXYzxrzoyckmS5jGISpJWhRjjUaYPK/pACOHnQwiFEMKZwKeB/cDHF/lUnwF+IYTwlJm9l+/kkcDXTSPAOHAkhLCD6ZOBZ30DqAFvCiHkQwgvBC6d8/hHgF8JITw5TBsKIVwRQhjp2OglSZrDICpJWjVijO8Ffhd4H9M9RPcwPRv4zBhjaZHPcSvwZmA30zONx4GHmJ5t7aZ3Ao8HjgJfYM6hTDN7WV8MvB44wvRs6T8wM+YY47eZ3if6QaaX894OvLZzQ5ck6UThxO0kkiRprhDCMNPhbleMcW+3x7NYIYQ9wP+OMX6s22ORJGk+Z0QlSZonhPALIYR1M/tL3wf8ANjX3VE1FkL4mRDC9pmlua8BLgG+2O1xSZK0kI4H0Zl9Oz8OIdweQvidTteXJGkRXgjcN/PfLuDlceUvITqf6dYxR4HfAl4aY7y/u0OSJGlhHV2aG0LIAT9huqn4fuBm4BUxxn/v2CAkSZIkSV3V6RnRS4HbY4x3zhyssJvpd50lSZIkSWtEp4PoDk5ssL1/5mOSJEmSpDUi3+F6C/VhO2ltcAjhDcAbAHLknrCO0eUelyQti80USQsFYl+Oob5yw2v7ClPsO/IoYrnxdZIkSZ00xQTlWGprT+1OB9H9wM45vz+N6YMgThBj/DDwYYDRsCk+OTyzM6OTpDa7Ot5Kcft23v+y1/JLT7257nWX797DWaf+iNd9/iqqe+/q4AglSZIa2xNvavtzdjqI3gzsCiGcBdwLvBx4ZaNP2EyRq+OthEKBhSdU56jVuD5e0KahSpIkSZKWQ0eDaIyxGkJ4E/AlIAd8NMZ4a7PPK551GrmLAxvzkw2ve+DBdfD1bGO8Ot5KyOdJT31U0x20uQPHuG7yzMz1koFBats3NL02ue8Q11fOzVRPkiRJkrqt0zOixBj/EfjHpX7enldezIV9pbqPX757D/sH12UZ2sMmzz2dcy5+gIEmE7C3/mTzdMe2jI5fsJOLztvfcL63FiP79mw88ainJbr64cwfICxiiXdM+Xh4TOsFJUmSJGkBHQ+iveKrv/gENiR9dR+/fPeepiuFFysG+NbLLyM0eMIn7f4G7ShY3Lmd6vZRRnaMN76uWmDonw9C40nohqaDbyDZvJGYazy9HCaKbZldXgpDtiRJktQdBtE16I+f8WJ+9bL6h6YAPOavvsmBXC5zreJZO9j4uBJbc42D7y2HtsA/ZS5Hced2irtGGR4uNrwu+XEKP8leT5IkSdLSGUS17L74sku5qG+q7uOX795DzJ3Uxac1+Txfft2TeNbQAw3r3TK0MXOpq+OtsGMbtZ+tv2QcII2Bvi/nuP7Atmy1gFDoY/KibcQm7xEM3zXJdQe3t1xPkiRJWk4GUa0ufQWeMHg3UH9ZdTtNPGo9jy3d23BZdY2UOwbXZ65V3LkdBgc459yHGAqNlzp/L9kIB1uvNRt8Jy7dSTin8exy8Xg/N355K7HSWu/LuUuq03NOpTzcOGX3Ha/xyb3Z30iQJElS9xhEpYy+/vJLSRocsXzp7m+0rdaHL7iCZ7/sBzwqV6h7zeW797SlVnHndqZGBrisdrjhdfH0e/libjuxkq0WABcWuGTdWMNrf9SfhwxB9OHgGxJq55xCra/x3uv+QyWuf3Bry/UkSZJ0MoOopLr++Oeu5DfO+7e6j7cr9AJce8Yz4QWjXLWl/ubddoZscjk2X1JiR77+svGUyA/u3AQPtqVsRzy8jDvJQbN93jHl+tr5HRiVJEnSiQyiktakD5/1c5z30qM8aeBY3Wsu3f1NBsZqHRxVexR3bmfqzFF2PKrx7PLkcIXk0wOkU/XDeDNXx1tJBgcZe9pmYpOfKBt/WOMT92zKVAuAkBCSJo2eY+T6eEHLtSRJ0vIyiErSKvRHz7uS3zj/O3Ufv3z3HsLwQUiyz4hO7NzGResfYl2zvcvbs/VChtmQvZ6tW440vO74YJXwt/3EUuPDxBqZDb7J5k3E/vrL4QHCVJnrDp/aci1JktYag6iktWl0hEfl93d7FKvGTS97Ils6sHcZ4I+e/wJ+Y1fjJeNxwxifDWeS9Tzu4s7t1C4Z4KKhxuuzf1wYhE+1XueRJdUJ40/cQW2g8fVD96d86vYNrReUJKnLDKJSDwlt6nIjqGwc4PR8DRocNCUB/PkLf56rttxW9/HLd+8hn6SZ68zuXX7UaZPsyDeeyf3myHq4vfVaDwffvn7Gf2prw5ZQoQaf+9EO0uPHWy8oSdI8BlGph8TGB7xK6nGL2bvczkO74oYRLjxjP/2hfhI985Qf8/kD/6nlIDq3RdP4k3cyeF7j5zl6fB3/+MXtLS+rnhuyJx/TOGQDDO+b5Lox+y5LUqcZRKUe4oyopHb6o+e8hF95ys11H2/rSdVAaXiQx5Uat4Ti1Du5Mbcj07Lq6b7Lg5x77oPN9y6HjdD4XK+G5gbtZHAQmtSLlQrXV3e1XlCSVgmDqNRDnBGV1KuuPeOZjD1rR9NDtNrlwxdcwXNedktH9i4Xd26HJCH/2ITtfUcbXnv70W3wf1qv9fCMbz5P5ZxtxFyTXsj3j3PdkR2tF5SkZWIQlSRJyujDZz+bc15+nMsG6p/ofPnuPaT97dlPHAYGOPOSAwyHxkH0e6MbocW8fcJs75bNVDaceIpWeTRhcucjLa5yEzn+4atbiJVyplqEhJBvsqYauL563pL
2020-11-18 03:05:29 -03:00
"text/plain": [
"<Figure size 1152x1152 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
2020-11-25 16:03:59 -03:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAJAAAAOVCAYAAACGY2mWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9ebR8WVXn+dnnnHtvRLx4w2/IkYREFEgGh1KQQqHUlskuXNpdaoMCpd3qqirtqu4uZ20taSmHVa2UZVe3lEvKUlFxKLUVGaQFCy1FEVRI5oQ0k0wy+Y1viIg7nLP7j3PujRvxe7/8JZmQ73d/633Xeuu9dyPixo2IHfvss/d3f7eoKsc4xkOFOeoLOMawcWxAx3hYODagYzwsHBvQMR4Wjg3oGA8LxwZ0jIeFT6sBichbROSbP4n7f1REnpP+/j4R+blP39V9chCRbxCRN36q7zt0XNGARORZIvKnInJRRM6JyJ+IyNM/3Remqv9aVR+08X0yEJEXisjbReRARM6KyC+LyC1XuJ5fVtXnPZjzfzL3PeTa/pWI/NJDeexR4AENSES2gN8D/h1wEngU8MNA+em/tE8PRORrgNcA/xY4DTyF+HreJiInLvMY98hd4cCgqpf9AZ4GXHiA2/8V8Eu9/x8LKODS/28BfhR4O3AR+B3gZO/+LwXuBM4C3w98FHjO+rmB1wPfvvbcfw389+nv24A3AeeA9wNfd5nrlfR837V23ADvBl6e/v9G4E+An0rn/JF07G29xzwvPddF4N8DbwW+uff4/n0V+CfAB4HzwP8FyIN8TxX4Z+mxe8D/AXwm8F+BXeC1QJ7ue4L4hf9Eep7fA27pneszgD9O5/nDdB395/r7wJ8CF9L7+6UPZB+qesUl7AOAF5FfEJGvuNw39Ap4GfA/AjcDDfDTACLyZOD/JhrRzcAp4HLLyGuAF7f/pMfeCvy+iGwQjec1wPXpfv9eRJ5yyHmeCDwG+PX+QVUNwG8Cz+0dfgZwRzrnK/r3F5HTwG8A35uu+/3AF13+LQDghcDTgc8Fvg54/hXu38cLgC8gfsDfBbwK+Abg0cBTWb43Bng18b15DDAHfqZ3ntcQv8yniIb60t5rehTw+8Qvy0ngO4DfFJHrHujCHtCAVHUXeBbxW/AfgE+IyO+KyA1XeMF9/KKqvltVD4D/Hfg6EbHA1wC/p6p/rKplui1c5hz/Gfg8Ebk1/f8NwG+lx70Q+KiqvlpVG1X9K6IxfM0h5zmdft97yG339m4HuEdV/10653ztvv8t8B5V/S1Vbb8UH3+A9wDgx1T1gqr+HfBHwOdd4f59/Liq7qrqe4ie8o2qeoeqXgT+APh7AKp6VlV/U1VnqrpHNPwvARCRxxAN+AdVtVLVtwG/23uOlwCvU9XXqWpQ1TcBf5le62VxxSBaVd+rqt+oqrcQrf1m4JWfxIu/q/f3nUBG/KBu7t+WDOzsZa5hj/jteFE69CLgl9PftwLPEJEL7Q/RwG485FRn0u+bDrntpt7t69e9jvVrV+DuB7g/rBrYDJhe4f593Nf7e37I/1MAEZmIyM+KyJ0isktcrnbSF/Zm4JyqznqP7b/GW4GvXXsfn8Xh71WHT2obr6rvA/4j0ZAADoBJ7y6HfWiP7v39GKAmflD39m8TkQnRtV4OvwK8WESeCYyJ32KIb8JbVXWn9zNV1X96yDneT/ygv7Z/UEQM8I+AN/cOPxBN4V56y62ICJdffh9J/EviMv0MVd0C/kE6LsRrPpne5xb9z+Yu4mrRfx83VPXHHugJr7QLu01E/mW7xRWRRxPX2z9Ld3kX8A9E5DEisk2MCdbxEhF5crrwlwO/oaqeGEO8MKUJ8nTbA13P64jfkpcDv5biFoiB4hNE5KUikqWfp4vIk9ZPkDzFdwA/ICJfLyJjEbkR+Dlgixg0Pxj8PvDZIvLVaYf2bRz+5XmksUn0SBdE5CTwQ+0NqnoncUn6VyKSpy/iV/Ye+0vAV4rI80XEishIRL70SumNK3mgPWIw+ecickA0nHcTLZ20Tv4a8DfAO4gf5jp+kei1Pg6MgH+eHvse4hv/GuK34zwPsAykeOe3gOekx7TH94g7ohcB96Tn+XGguMx5fo0YPP6vRE94O9GjfbGqHrqEHnKOM0Qv9hPEZffJxA/nqNMbryS+ljPEz+r1a7d/A/BM4jX/CPGzKwFU9S7gq4DvI+7i7gK+kys5GT0mlD1spCXwbuAbVPWPrnT/qwUi8mvA+1T1h65458vguBb2EJFc/Y6IFMRvrbBc2q9KpKX9M0XEiMgLiB7ntx/OOY8zrA8dzyQupTlxGfzqQ7b7VxtuJIYBp4ge85+q6jsfzgmvmiUsfSP+LWCBn7tS9H+MqwNXhQGlPMUHiJngu4G/AF6sqrcf6YUd44q4WmKgLwQ+lLKrFfCrxPX5GFc5rpYY6FGsZkXvJqYPLovTIvrYT+cVPYJ49+NuRhWqj9xzRlUfsPZ0teFqMSA55Ngla6uIfCvwrRBT2n/5ab6oRwqf9aP/BIAP/w8/eOcRX8onjavFgO5mNa1+CzEpuAJVfRWxEs3TRBTg1p/78XijFxCFTDG7DjUKGo9prpAHxAXEKGIUawPb0zmnJwds5Qs2bIUzHoAqOA6aHBOfApNs2YiSGc/Y1mzYksI0AMx9xtSVFBL/Dwi12u6xVgKv/ptnIgKhNmgQxAY++rLvi68rGMRcro58deNqMaC/AB4vIp8BfIyYVf76B/NAs2+xpWAqCBk0E8XOBDWCACqCV0UBVSALiMS/M+uZZiWbLhqDkUCjFq9CSD8AzgQMSlDBq1AHS20smXqMaHwsSkiOtFaL1xheGvF4NeRFQ1XGt1ta404IQZCrJhz95HBVGJCqNiLy7cAbiNv4n0+ljiuiOGcozkG2rzRjWJw2iAe1IAHUgC3B55aQG9QpwYJ3gezkLiNbd8YT1CTjMZ332bt/ztu/+3XsfvQ8X/vmf4y1ipHoLTwGUkmuVkutFivR2Iz47hoDwnRccq500UsKqwu0gvrDVvGrH1eFAQGo6uuIBdNPCtO7lPFZT7bf0Iwtbu4IDvxYEK+oCCAgEJygNhrX4jpDUKFIy1ZQQyAaD4CTQEBw0zFf/Mqv5M+///XJA5HuLzTBECR98BqXOCsBK8vlyKvBq2FeZdFoBIw9+tTJpwpXjQE9VOx8cI4pG/CKnVvsIuDHhnLbxg+1CdhKcfMAQVFnaCaG+7cN8zqLnictPdFzhPQTjSobZTAaoSo0anCqNMFiRZOnCmTJ27RLmU/G6NWQiWdkag7OTsAqJvMY6zHm2jCiwRuQvbhAQkCNQbMURyhks0CwwuhsjTQBU3nsfgkiHHzGNraMRpNJoDD18oQho5FArdFD5dbTBIOI4iRgRLvlDaKRlWq6c7TG6NUwMjWn3R7XuT2wGpevBOmtWDJgjzR4AxKfYg2TwougmEZpxga1gi8MzkfPE4oMDPgiBcfWs5PNmJiKgGBQarXs+4IDX7Df5DTBkhuP0C5Ryw+73bVl4rug20r0ZBO7YGoXnHT7bJp5IusKKgZcwJhljGRtwPvjIPpIoHl8CeoMITOIKqYKGG/AKwc3ZkzuFyQobOVADK6lgd3ZiLnPmJgKWG6/g0rafivWxq25EWXDlRQWClPjTFy62nhnETI8holUnHAHbJo5uXhqddxRXQ9NNBCVgKqseCAADcMMoodp9j1oZlFnUGtQEz8E8Uq257ELxY9gdoPj4KaMcscSXAyo1UEI8eWPTM3ULpiYipGpGduaLTfnZHbAlAP+v//5dVz44Fne9C/exMF772bLLdhM9y+k6bbskPI+BEamZmRqvAqzUCDjBlw0thCE0DMYVR6YQHsVY/AeqPsqG0EU1CumCUgTqG8oUIH9RwkYGN8PbgHV1FBvKJOs6U4TvUkdA+j0aU5sxZ4Z8aJXPRubGkYy4wlASLmeoMJuM6YwMR0QEBaasefHbJiSXDwn3T7T7TnzWUHw0fv0lywNw/0eD96AUrIZgoLRGAf5GLAGGxOK9ZYSCgU1iLeEDDCQO8++L7i32mbbzZnaBbV
2020-11-18 03:05:29 -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",
"string = L_strings_coord['22']\n",
"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",
"geot_S = GR_String.geot\n",
"\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",
"plt.imshow(GR_String.raster.data)\n",
"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",
" poly = patches.Polygon(Utils.gps2pixel(Poly['points'],geot_S),\n",
" linewidth=2,\n",
" edgecolor='red',\n",
" alpha=0.5,\n",
" fill = True)\n",
" plt.text(np.mean([x[0] for x in Utils.gps2pixel(Poly['points'],geot_S)]), \n",
" np.mean([y[1] for y in Utils.gps2pixel(Poly['points'],geot_S)]) , \n",
" 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",
"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",
"#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-11-25 16:03:59 -03:00
"execution_count": 6,
2020-11-18 03:05:29 -03:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Listo\n"
]
}
],
"source": [
"\n",
"## Load List in coordinate latitud and longitude ###\n",
"with open(path_dict, \"rb\") as fp:\n",
" L_strings_coord = pickle.load(fp)\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",
" pmt = kml.newpolygon(name= string['id'], outerboundaryis = points)\n",
" pmt.extendeddata.newdata(name='Mesa', value=string['id'])\n",
"\n",
"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",
" \n",
"kml.save(path_kml_panel)\n",
"print('Listo')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"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
}