a
    J5d                     @   s   d 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mZ dd	lmZ dd
lmZ ddlmZmZ dd Zdd ZdddZdd Zdd ZdS )z/
Geometry factories based on the geo interface
    N)GeometryTypeError   )GeometryCollection)
LineString)MultiLineString)
MultiPoint)MultiPolygon)Point)
LinearRingPolygonc                 C   sD   | du rdS t | tttjfr<t| dkr.dS ttt| S dS dS )zDHelper to identify if coordinates or subset of coordinates are emptyNTr   F)	
isinstancelisttuplenpZndarraylenallmap_is_coordinates_empty)coordinates r   P/var/www/html/django/DPS/env/lib/python3.9/site-packages/shapely/geometry/geo.pyr      s    r   c                 C   sf   | dkrt  S | dkrt S | dkr*t S | dkr8t S | dkrFt S | dkrTt S td| dS )	z&Return empty counterpart for geom_typepoint
multipoint
linestringmultilinestringpolygonmultipolygonUnknown geometry type: N)r	   r   r   r   r   r   r   )	geom_typer   r   r   _empty_shape_for_no_coordinates   s    r   Tc                 C   s6   ||f||f| |f| |fg}|s.|ddd }t |S )z=Returns a rectangular polygon with configurable normal vectorN)r   )ZminxZminyZmaxxZmaxyZccwZcoordsr   r   r   box1   s    r!   c                 C   s"  t | dr| j}n| }|d }d|v r@t|d r@t|S |dkrTt|d S |dkrht|d S |dkr|t|d S |dkrt	|d d |d d	d
 S |dkrt
|d S |dkrt|d S |dkrtdd |d D S |dkrdd |dg D }t|S td|d
S )a3  
    Returns a new, independent geometry with coordinates *copied* from the
    context. Changes to the original context will not be reflected in the
    geometry object.

    Parameters
    ----------
    context :
        a GeoJSON-like dict, which provides a "type" member describing the type
        of the geometry and "coordinates" member providing a list of coordinates,
        or an object which implements __geo_interface__.

    Returns
    -------
    Geometry object

    Examples
    --------
    Create a Point from GeoJSON, and then create a copy using __geo_interface__.

    >>> context = {'type': 'Point', 'coordinates': [0, 1]}
    >>> geom = shape(context)
    >>> geom.geom_type == 'Point'
    True
    >>> geom.wkt
    'POINT (0 1)'
    >>> geom2 = shape(geom)
    >>> geom == geom2
    True
    __geo_interface__typer   r   r   Z
linearringr   r   r   Nr   r   r   c                 S   s    g | ]}|d  |dd gqS )r   r   Nr   ).0cr   r   r   
<listcomp>l       zshape.<locals>.<listcomp>Zgeometrycollectionc                 S   s   g | ]}t |qS r   )shape)r$   gr   r   r   r&   n   r'   Z
geometriesr   )hasattrr"   getlowerr   r   r	   r   r
   r   r   r   r   r   r   )contextobr   Zgeomsr   r   r   r(   9   s0    

r(   c                 C   s   | j S )af  
    Returns a GeoJSON-like mapping from a Geometry or any
    object which implements __geo_interface__

    Parameters
    ----------
    ob :
        An object which implements __geo_interface__.

    Returns
    -------
    dict

    Examples
    --------
    >>> pt = Point(0, 0)
    >>> mapping(pt)
    {'type': 'Point', 'coordinates': (0.0, 0.0)}
    )r"   )r.   r   r   r   mappingt   s    r/   )T)__doc__numpyr   Zshapely.errorsr   Z
collectionr   r   r   r   r   r   r   r   r   r   r	   r   r
   r   r   r   r!   r(   r/   r   r   r   r   <module>   s   
;