o
    6f(3                     @   s  d dl Zd dlmZmZmZ d dlmZ d dlZd dl	m
Z
mZmZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl	Z	d d	lmZmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ dd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dS )    N)PointPolygon
LineString	transform)MapGeoJsonPopup)Document)WD_PARAGRAPH_ALIGNMENT)Pt)datetime)r   DivIcon)partial)linear)
color_ansi)mapping)MultiLineStringc                 C   sR   z|j |d |  kddgf jd }t|W S  ty(   td|   Y d S w )NPUNTOESTENORTEr   z*No matching coordinates found for vertex: )locstripvaluesr   
IndexErrorprint)vertexcoord_dfcoords r   //home/deployuser/azure_apps/autowriter/model.pycreate_point   s   $
r!   c                    s    fdd| D }t |S )Nc                    s.   g | ]}|   d  jv rt| jd qS )r   r   )r   r   r!   r   ).0vr   r   r    
<listcomp>   s   . z"create_polygon.<locals>.<listcomp>)r   )verticesr   pointsr   r$   r    create_polygon   s   r(   c                 C   s&   t |j| j d |j| j d  S )N   )npsqrtxy)point1point2r   r   r    calculate_distance"   s   &r0   c                 C   s   |j }t|j|jgt| j| jg }tt|d |d }d|  kr-dk r.dS  d|  kr9dk r:dS  d|  krEdk rHd	S  d
S d
S )N   r   i-   Oriente   NorteiySur	Occidente)centroidr*   arrayr,   r-   degreesarctan2)polygon_centroidlineline_centroidvectorangler   r   r    find_orientation%   s   $rA   c                 C   sn   t |j| j |j| j g}t j|}|| }t | jd ||  }t |jd ||  }t||gS )z@ Shorten each end of the line segment by 'shorten_by' distance. r   )r*   r9   r,   r-   linalgnormr   r   )start_point	end_point
shorten_byline_vectorline_lengthline_directionnew_start_pointnew_end_pointr   r   r    shorten_lineT   s   rL   c                 C   s   |  tjd tjd} | S )Nz<b>z</b>)replacer   BOLDEND)descr   r   r    clean_description^   s   rQ   c           5         s  t j| ddd}t j| ddtd t|  td t  |d jd	|d
< d td< |d t|d< |d
 fdd|d< |d dd |d< d}dd |jD }|	 D ]\}}|d
 }t
t|d D ]}	t||	 }
t||	d  }t|
|g}t|
||d }||}t|
|}d||	  d|
j d|
j d||	d   d|j d|j d|dd}|	 D ]F\}}||kr||d jr||d j}|jst|d |}||| vrg || |< || | |d|d  d|d    qquqeg }g }|	 D ]i\}}tj |d   d|d  d |d!  d"tj d#| 
}|d$|d jdd%7 }|d&7 }||  D ]\}}d'|}|d#tj d(|  d"tj d#| d)	7 }qM|d#| 7 }|| |t | q||d*< |D ]}t| qt! }d+t"# $d, d-}d.d/ }|D ]}|% }||| t&j'|_(t&j)|%d0_(|%  q|j*D ])}|j+} | j,r| j,d n| % }!||!_-|j.d1 |!_/|!j0D ]	}"t1d2|"j2_3qqd3}#|4|# td4 d }$t56d5}%t56d6}&t5j7j8|%|&d7d8j9|d fd9d|d:< |d: d;d |d< |d d<d : }'|d d=d : }(|'|(g})t;j<|)d>d?}$|d! = }*t>j?@dt|*  fd@dtA|*D }+|	 D ]I\}}tB|d: },|+|d!  fdAd}-t;jC|d* dBdC}.t;jD|,|-|.dDE|$ |d j|d jg}/|d  }0t;jF|/tGdE|0 dFdGdHE|$ qddItdJt|*dK   }1|1dL7 }1|+ D ]\}2}3|1dM|3|2f 7 }1q|1dN7 }1|$H jIJt;K|1 dO}4|$4|4 tdP |#|4fS )QNr   zA:D)
sheet_nameusecolsr1   )rR   zPolygon Definitions:z
Coordinates:zPuntos de coordenadas-Verticesr   z# Lotec                    s
   t |  S N)r(   r,   )coordinates_dfr   r    <lambda>      
 zprocess_all.<locals>.<lambda>r   c                 S      | j S rV   r8   polyr   r   r    rY          Centroidc                 S   s   i | ]}|i qS r   r   )r"   ir   r   r    
<dictcomp>   s    zprocess_all.<locals>.<dictcomp>g      @zpartiendo del punto z (E z, N z) al punto u$   ) en línea recta y en distancia de z.2fz metros lineales; zy que linda con Tipou	    número u	    NÚMERO z DE Etapa: u)   con un área privada total aproximada de z metros cuadrados. u\   Su área y linderos están determinados por el perímetro marcado con los siguientes puntos:z; zPOR EL .DescriptionzNDocumento creado automaticamente con AutoWriter de Arquitectura & Concreto el z%d/%m/%Yz.
Los resultados de este documento deben ser validados objetivamente antes de ser incluidos en las escrituras finales o cualquier otro tipo de documento oficial.

c                 S   s\   | tj}|D ]#}tj|v r&| tjd\}}| |}d|_| | q| | qd S )Nr1   T)splitr   rN   rO   add_runbold)	paragraphtextpartspart	bold_textnormal_textrunr   r   r    apply_formatting   s   

z%process_all.<locals>.apply_formattingz-------------------------Header
   z'downloads/Descripciones Escrituras.docxz,Word document has been created successfully!z	EPSG:3116z	EPSG:4326T)	always_xyc                    s
   t  | S rV   r   r]   )projectr   r    rY     rZ   Polygon_WGSc                 S   r[   rV   r\   r]   r   r   r    rY     r_   c                 S   r[   rV   )r-   pr   r   r    rY     r_   c                 S   r[   rV   rW   ry   r   r   r    rY   	  r_      )location
zoom_startc                    s   i | ]	\}}| |qS r   r   )r"   ra   etapa)colorsr   r    rb     s    c                 S   s   |ddddS )Nblackr)   g      ?)	fillColorcolorweightfillOpacityr   )r,   r   r   r   r    rY     s    i,  )	max_width)style_functionpopupz-<div style="font-size: 6pt; color: black"><b>z
</b></div>)html)r|   iconz<div style="position: fixed; bottom: 50px; left: 50px; width: 150px; height: %s; border:2px solid grey; z-index:9999; font-size:14px; background-color: white; padding: 10px;">      z<p><b>Etapa Legend:</b></p>z1<p><span style="color: %s;">&#9632;</span> %s</p>z</div>zdownloads/mapa.htmlz8Interactive map has been created and saved successfully!)Lpd
read_excelr   headstrri   astypeapplyindexiterrowsrangelenr!   r   rL   bufferr0   r,   r-   
intersectsboundaryintersectionis_emptyrA   appendr   rN   upperrO   areaitemsjoinrQ   r
   r   nowstrftimeadd_paragraphr   JUSTIFY	alignmentCENTERsectionsheader
paragraphsrm   stylesstylerunsr   fontsizesavepyprojCRSTransformerfrom_crsr   meanfoliumr   uniquer   Set1_09scale	enumerater   r	   r   add_toMarkerr   get_rootr   	add_childElement)5
excel_pathheader_textfooter_text
polygon_dfbuffer_distanceadjacenciesr   rowr&   jrD   rE   r=   
short_linebuffered_linedistanceline_descriptionidx	other_rowshared_lineorientationdescriptionsclean_descriptionsdescriptiondetailsdetails_strrP   docheader_contentrs   rl   sectionr   header_paragraphrr   word_file_path
map_folium
source_crs
target_crsaverage_lataverage_lon
map_centeretapas	color_mapgeo_jsonr   popup_contentlabel_locationlabellegend_htmlr~   r   map_file_pathr   )r   rX   rw   r    process_allf   s   
	

F*8
.









r   )&pandasr   shapely.geometryr   r   r   shapely.opsr   r   r   r   r   r	   docxr
   numpyr*   docx.enum.textr   docx.sharedr   r   folium.featuresr   	functoolsr   branca.colormapr   r   r   r   r!   r(   r0   rA   rL   rQ   r   r   r   r   r    <module>   s2    /
