2020-11-13 00:19:20 -03:00
{
"cells": [
{
"cell_type": "code",
2020-12-01 22:42:41 -03:00
"execution_count": 11,
2020-11-13 00:19:20 -03:00
"metadata": {},
2020-12-01 22:42:41 -03:00
"outputs": [],
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",
"\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-01 22:42:41 -03:00
"execution_count": 22,
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-01 22:42:41 -03:00
"path_T = \"Ocoa/Ocoa_T02.tif\"\n",
"path_String = \"Ocoa/Ocoa_Mesas.tif\"\n",
2020-11-25 16:03:59 -03:00
"ZonaPV = 'BP-A-1'\n",
2020-12-01 22:42:41 -03:00
"path_kml_panel = 'Ocoa/KML/Paneles_' + ZonaPV +'.kml'\n",
"path_kml_mesa ='Ocoa/KML/Mesa_' + ZonaPV +'.kml'\n",
"path_dict = 'Ocoa/KML/Mesa_' + ZonaPV + '.pickle'\n",
2020-11-13 00:19:20 -03:00
"\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",
2020-11-18 03:05:29 -03:00
"GR_T = gr.from_file(path_T)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Enumerate Tables and Panels"
]
},
{
"cell_type": "code",
2020-12-01 22:42:41 -03:00
"execution_count": 23,
2020-11-18 03:05:29 -03:00
"metadata": {},
"outputs": [],
"source": [
2020-11-13 00:19:20 -03:00
"\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": {},
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-01 22:42:41 -03:00
"execution_count": 14,
2020-11-13 00:19:20 -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",
2020-11-18 03:05:29 -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)"
2020-11-13 00:19:20 -03:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Display image"
]
},
{
"cell_type": "code",
2020-12-01 22:42:41 -03:00
"execution_count": 15,
2020-11-13 00:19:20 -03:00
"metadata": {},
"outputs": [
2020-12-01 22:42:41 -03:00
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/dlsaavedra/anaconda3/envs/new/lib/python3.7/site-packages/ipykernel_launcher.py:40: UserWarning: Attempting to set identical bottom == top == -0.5 results in singular transformations; automatically expanding.\n"
]
},
2020-11-13 00:19:20 -03:00
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
2020-12-01 22:42:41 -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-01 22:42:41 -03:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7cAACqGCAYAAABtZxtEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzcsevtcxzH8fdb94YMDAb5D+7ExKiQMppN/gPFZPKfWMxkQknXZrplsiiTDWX7JfoY7lVMbhm+nnk86tQ533OG1/o83885e84ZAAAAKHvk6gEAAADwb4lbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCQMTuPru793b3Zndv7e4ju/vh7n61u1/s7tNXbwSAq4hbAOj4eWZemZmvH7x+fmZ+Pee8NDMfzMybVw0DgKvdunoAAPBwzjk3M3Ozu39e+mFmzoPnT83MT1fsAoD/AnELAF0/zsyju/vtzPw+My9cvAcALuNYMgB0vTYzv5xz7szM+zPz7rVzAOA64hYAunbu/w535v5d3Ccv3AIAl3IsGQAidvf2zHw6M8/NzOcz897M3Nndu3P/C+u3rlsHANfac84/fwoAAAD+wxxLBgAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrgFAAAgT9wCAACQJ24BAADIE7cAAADkiVsAAADyxC0AAAB54hYAAIA8cQsAAECeuAUAACBP3AIAAJAnbgEAAMgTtwAAAOSJWwAAAPLELQAAAHniFgAAgDxxCwAAQJ64BQAAIE/cAgAAkCduAQAAyBO3AAAA5IlbAAAA8sQtAAAAeeIWAACAPHELAABAnrg
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",
"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-12-01 22:42:41 -03:00
"execution_count": 16,
2020-11-13 00:19:20 -03:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Listo\n"
]
}
],
"source": [
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",
" 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",
2020-12-01 22:42:41 -03:00
"execution_count": 21,
2020-11-13 00:19:20 -03:00
"metadata": {},
2020-12-01 22:42:41 -03:00
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/dlsaavedra/anaconda3/envs/new/lib/python3.7/site-packages/ipykernel_launcher.py:3: UserWarning: Attempting to set identical left == right == -0.5 results in singular transformations; automatically expanding.\n",
" This is separate from the ipykernel package so we can avoid doing imports until\n",
"/home/dlsaavedra/anaconda3/envs/new/lib/python3.7/site-packages/ipykernel_launcher.py:3: UserWarning: Attempting to set identical bottom == top == -0.5 results in singular transformations; automatically expanding.\n",
" This is separate from the ipykernel package so we can avoid doing imports until\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f38f4d861d0>"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1152x1152 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
2020-11-13 00:19:20 -03:00
"source": [
2020-12-01 22:42:41 -03:00
"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]])"
2020-11-13 00:19:20 -03:00
]
},
{
"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
}