o
    h                     @   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   s@   | du rdS t | tttjfrt| dkrdS ttt| S dS )z;Identify if coordinates or subset of coordinates are empty.NTr   F)	
isinstancelisttuplenpndarraylenallmap_is_coordinates_empty)coordinates r   O/var/www/html/scripts/venv/lib/python3.10/site-packages/shapely/geometry/geo.pyr      s   r   c                 C   sb   | dkrt  S | dkrt S | dkrt S | dkrt S | dkr#t S | dkr*t S td| )z'Return empty counterpart for geom_type.point
multipoint
linestringmultilinestringpolygonmultipolygonUnknown geometry type: )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=Return a rectangular polygon with configurable normal vector.N)r
   )minxminymaxxmaxyccwcoordsr   r   r   box.   s   r'   c                 C   s:  t | dr	| j}n| }|d }|dkr!|d }|d }d|v r/t|d r/t|S |dkr9t|d S |dkrCt|d S |dkrMt|d S |d	kr`t	|d d
 |d dd S |dkrjt
|d S |dkrtt|d S |dkrtdd |d D S |dkrdd |dg D }t|S td|)aX  Return 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__.

    >>> from shapely.geometry import shape
    >>> 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__typefeaturegeometryr   r   r   
linearringr   r      Nr   r   r   c                 S   s    g | ]}|d  |dd gqS )r   r-   Nr   ).0cr   r   r   
<listcomp>q   s     zshape.<locals>.<listcomp>geometrycollectionc                 S   s   g | ]}t |qS r   )shape)r.   gr   r   r   r0   s   s    
geometriesr   )hasattrr(   getlowerr   r   r   r   r	   r
   r   r   r   r   r   )contextobr   geomsr   r   r   r2   6   s6   
!r2   c                 C   s   | j S )a  Return a GeoJSON-like mapping.

    Input should be a Geometry or an object which implements __geo_interface__.

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

    Returns
    -------
    dict

    Examples
    --------
    >>> from shapely.geometry import mapping, Point
    >>> pt = Point(0, 0)
    >>> mapping(pt)
    {'type': 'Point', 'coordinates': (0.0, 0.0)}

    )r(   )r9   r   r   r   mappingy   s   r;   )T)__doc__numpyr   shapely.errorsr   shapely.geometry.collectionr   shapely.geometry.linestringr    shapely.geometry.multilinestringr   shapely.geometry.multipointr   shapely.geometry.multipolygonr   shapely.geometry.pointr   shapely.geometry.polygonr	   r
   r   r   r'   r2   r;   r   r   r   r   <module>   s    
C