
    nj@                     >   S SK r S SKrS SKJrJrJr  0 q\R                  S\R                  S\R                  S\R                  S\R                  S\R                  S\R                  S	\R                  S\R                  S
\R                   S\R"                  S\R$                  S\R&                  S\R(                  S0r0 q " S S\5      rSS jrS r\R6                  4S jr\S:X  a4  \R<                  " 5         \R>                  " \" \R6                  5      5        gg)    N)gdalogrosrPoint
LineStringPolygon
MultiPointMultiLineStringMultiPolygonGeometryCollectionzLineString Zz	Polygon ZzMultiPoint ZzMultiLineString ZzMultiPolygon ZzGeometryCollection Zc                   H    \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rSrg)GeoParquetValidator;   Nc                 D    Xl         X l        X0l        S U l        / U l        g )N)filename
check_datalocal_schemadserrors)selfr   r   r   s       c/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/osgeo_utils/samples/validate_geoparquet.py__init__GeoParquetValidator.__init__<   s      $(    c                 F   [         R                  " SS9   [        R                  " SS9   [        R                  " SS9   U R	                  5         S U l        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)NT)useExceptions)r   ExceptionMgrr   r   _checkr   )r   s    r   checkGeoParquetValidator.checkC   sg    T2C4D4D5
$/KKMDG 05
22//5
 5
22s9   BBA0BB0
A>:B
B	B
B c                    [        U R                  5      S:X  a)  U R                  R                  U R                   S35        g [        U R                  5      S:  a+  U R                  R                  U R                   SU 35        g g )Nd   z*: too many errors. No longer emitting onesz: )lenr   appendr   )r   msgs     r   _errorGeoParquetValidator._errorJ   sm    t{{s"KK==/!KL #KK$--3%89 $r   c                 r   [         R                  " UR                  5       5      nU[         R                  :X  a  [	        UR                  5       5       Hz  nUR                  U5      nUS:X  a,  UR                  5       (       a  U R                  SU S35        MF  US:  d  MN  UR                  5       (       a  Me  U R                  SU S35        M|     g U[         R                  [         R                  4;   aC  [	        UR                  5       5       H%  nUR                  U5      nU R                  Xb5        M'     g g )Nr   z!Exterior ring of geometry at row z has invalid orientationz!Interior ring of geometry at row )r   
GT_FlattenGetGeometryType
wkbPolygonrangeGetGeometryCountGetGeometryRefIsClockwiser&   wkbMultiPolygonwkbGeometryCollection_check_counterclockwise)r   growgtidxringsubgeoms          r   r2   +GeoParquetValidator._check_counterclockwiseR   s   ^^A--/0Q//12'',!8 0 0 2 2KK;C5@XY 1WT%5%5%7%7KK;C5@XY 3 C'')B)BCCQ//12**3/,,W: 3 Dr   c                 Z  ^ SS K n[        R                  S:  a  SSKJn  U" S5      nOSSKJn  U" S5      R                  nS nU" U5      S:  aM  SSKJnJ	m  S	[        4U4S
 jjn	U" U	S9n
UR                  R                  U5      nU" XS9R                  U5        g UR                  X!S9  g )Nr   )      )version
jsonschema)get_distributionc                 R    [        [        [        U R                  S5      5      5      $ )N.)tuplemapintsplit)vs    r   versiontuple3GeoParquetValidator._validate.<locals>.versiontuplep   s    S1773<122r   )      )RegistryResourceuric                 V  > U R                  S5      (       d$  U R                  S5      (       d  [        SU  35      eSS KnU [        ;  a3  UR                  R                  U 5      R                  5       nU[        U '   O	[        U    nTR                  [        R                  " U5      5      $ )Nzhttp://zhttps://zCannot retrieve r   )

startswith	Exceptionurllibmap_remote_resourcesrequesturlopenreadfrom_contentsjsonloads)rM   rQ   responserL   s      r   retrieve_remote_file;GeoParquetValidator._validate.<locals>.retrieve_remote_filey   s    ~~i00
9S9S#&6se$<== 22%~~55c:??AH08(-3C8H--djj.BCCr   )retrieve)registry)instanceschema)r>   sysversion_infoimportlib.metadatar=   pkg_resourcesr?   referencingrK   rL   str
validatorsvalidator_forvalidate)r   r_   r^   r>   r=   jsonschema_versionr?   rG   rK   rZ   r]   validator_clsrL   s               @r   	_validateGeoParquetValidator._validated   s    v%2!(!66!1,!?!G!G	3 *+w66D# D  )=>H&11??GM&4==hG Ar   c                 V   [         R                  " S5      c  U R                  S5      $  SS KnUR                     [         R                  " U R                  S/S9U l        U R                  R                  S5      nUR                  SS5      nUc  U R                  S	5      $  [        R                  " U5      nSU;  a&  U R                  SU-  5        U R                  (       d  g U R                  (       a9  [        R                  " [!        U R                  S5      R#                  5       5      nOUS   n[%        U[        5      (       d  U R                  SU-  5      $ SU S3nU[&        ;  aL  SS Kn	 U	R*                  R-                  U5      R#                  5       n
 [        R                  " U
5      [&        U'   [&        U   n U R1                  Xe5        SU;  a  U R                  S5      $ US   nSU;  a  U R                  S5      $ US   nX;  a  U R                  SU S35        [3        UR5                  5       R7                  5       5       Vs/ s H0  nUR5                  5       R9                  U5      R;                  5       PM2     nnUR=                  5        H2  u  nnX;  a  U R                  SU S 35        U R?                  UU5        M4     U R@                  (       a  U RC                  X<5        g g ! [
         a    U R                  S5      s $ f = f! [         a'  nU R                  S[        U5      -  5      s S nA$ S nAff = f! [         a-  nU R                  S
U< S[        U5      < S35      s S nA$ S nAff = f! [         a*  nU R                  SU S[/        U5       35      s S nA$ S nAff = f! [         a-  nU R                  SU SU
 S[/        U5       35      s S nA$ S nAff = f! [         a(  nU R                  S[        U5      -  5         S nAGNKS nAff = fs  snf )!NParquetzParquet driver not availabler   zDjsonschema Python module not available. Try 'pip install jsonschema')allowed_driverszis not a Parquet file: %sgeo_PARQUET_METADATA_z 'geo' file metadata item missingz9'geo' metadata item is not valid JSON. Value of 'geo' = 'z'. Exception = 'z' r=   zC'geo' metadata item lacks a 'version' member. Value of 'geo' = '%s'rbz7'geo["version"]' is not a string. Value of 'geo' = '%s'z@https://github.com/opengeospatial/geoparquet/releases/download/vz/schema.jsonz,Cannot download GeoParquet JSON schema from z. Exception = z$Failed to read GeoParquet schema at z as JSON. Schema content = 'z'. Exception = z5'geo' metadata item fails to validate its schema: %s'primary_columnzgeo["primary_column"] missingcolumnszgeo["columns"] missingzgeo["primary_column"] = z" is not in listed in geo["columns"zgeo["columns"] lists a z0 column which is not found in the Parquet fields)"r   GetDriverByNamer&   r>   rh   ImportErrorOpenExr   r   rP   re   GetLayerGetMetadataItemrW   rX   r   openrU   
isinstancegeoparquet_schemasrQ   rS   rT   reprrk   r,   GetLayerDefnGetGeomFieldCountGetGeomFieldDefnGetNameitems_check_column_metadatar   _check_data)r   r>   elyrrp   geo_jschema_jr=   
schema_urlrQ   rY   rs   rt   iogr_geom_field_namescolumn_name
column_defs                    r   r   GeoParquetValidator._check   s    	*2;;=>>		Ekk$--)MDG ggq!!!%)=>;;;ABB	JJsOE E!KKU $$zz$t'8'8$"?"D"D"FGHI&Ggs++{{ORUU  \\c[ddpqJ!33%~~55jAFFHH59ZZ5I&z2 **5H	NN8+ 5(;;>??/0E!;;788	"(KK*>*::\] 3++-??AB 
B //2::<B 	  

 (/}}#K6-k]:jk ''Z@ (7 ??S* {  	;;V 	  	E;;:SVCDD	E  	;;A  	: ! ;;FzlR`aefgah`ij  ! ;;>zlJfgofpp  AE  FG  AH  @I  J   	KKG#a&P 	$ 
s   K1 %L "M 1)N  N7 O1 7P&1LL
ML>8M>M
M="M82M=8M= 
N4
N/)N4/N47
O."O)#O.)O.1
P#;PP#c                    S nSU;   a  US   nU(       a  [         R                  " 5       S-  [         R                  " 5       -   S:  ax  [         R                  " 5       n [	        U[
        5      (       a&  UR                  [        R                  " U5      5        ON[	        U[        5      (       a  UR                  U5        O'O&[         R                  " 5       nUR                  S5        SU;   Ga  US   nU(       Gaq  [        U5      S:X  a	  S	nS
nSn	Sn
OE[        U5      S:X  a/  S	nS
nSnSn	Sn
SnXl   Xk   :  a  U R                  SU SU S35        O S5       eU(       a  UR                  5       (       a  [        Xg   5      S:  a  U R                  SU S35        [        Xh   5      S:  a  U R                  SU S35        [        Xi   5      S:  a  U R                  SU	 S35        [        Xj   5      S:  a  U R                  SU
 S35        U(       a7  UR!                  5       (       a"  Xi   Xg   :  a  U R                  SU	 SU S35        Xj   Xh   :  a  U R                  SU
 SU S35        SU;   a4  US   n[#        5       nU H  nX;   d  M
  U R                  U S35        M      g g g ! [         a,  nU R                  SU S3[        U5      -  5         S nAGNS nAff = f)Ncrsr"   iZ  zcrs z cannot be parsed: %si  bboxrI   r         r;         zbbox[z	] < bbox[]zUnexpected len(bbox)   z	abs(bbox[z]) > 180Z   z]) > 90geometry_typesz. is declared several times in geometry_types[])r   GetPROJVersionMajorGetPROJVersionMinorSpatialReferencer{   dictSetFromUserInputrW   dumpsre   rP   r&   ImportFromEPSGr#   IsGeographicabsIsProjectedset)r   r   r   srsr   r   r   minx_idxminy_idxmaxx_idxmaxy_idxminz_idxmaxz_idxr   set_geometry_typesgeometry_types                   r   r   *GeoParquetValidator._check_column_metadata   s   JU#C'')C/#2I2I2KKsR**,L!#t,,,,TZZ_=#C--,,S1 &&(Ct$Zf%Dt9> H H H HY!^ H H H H H H~6eH:Yxj$JK 9"8853++--4>*S0iz$BC4>*R/iz$AB4>*S0iz$BC4>*R/iz$AB3??,,~6eH:Yxj$JK>DN2KK%z8*A FG:-!+,<!=%(U"%3M$:,o-[\ &4 .O   ! LKK$se+@ ACF JKKLs   :J' &J' '
K1!KKc                    UR                  [        UR                  5       R                  5       5       Vs/ s H0  nUR                  5       R	                  U5      R                  5       PM2     sn5        UR                  S/S9nSnU GH/  nUnSnUR                  5        GH  u  pSU
;   a  U
S   n[        U5      nO
[        5       nSU
;   a  U
S   nOS nUn[        Xi   5      nXi    H  nS n Ub  [        R                  " U5      nU(       a  UR                  5       nU[         ;  a'  U R                  S	U S
3UR#                  5       -  5        O.U(       a'  [         U   nUU;  a  U R                  S	U SU S35        [%        US5      (       a  US:X  a  U R'                  X5        US-  nM     GM     XX-  nGM2     g s  snf ! [         a.  nU R                  SU SU	 S3[        U5      -  5         S nANS nAff = f)NzUSE_MASKED_ARRAYS=NO)optionsr   r   orientationzInvalid WKB geometry at row z for column z: %szGeometry at row z) is of unexpected type for GeoParquet: %sz is of type z$, but not listed in geometry_types[]r/   counterclockwiser   )SetIgnoredFieldsr,   r~   GetFieldCountGetFieldDefnr   GetArrowStreamAsNumPyr   r   r#   r   CreateGeometryFromWkbrP   r&   re   r*   map_ogr_geom_type_to_geoparquetGetGeometryNamehasattrr2   )r   r   rt   r   streamr4   batch
row_backuprows_in_batchr   r   r   r   r   geomr3   r   ogr_geom_typegeoparquet_geom_types                      r   r   GeoParquetValidator._check_data<  s1    s//1??ABBA   "//2::<B	
 **4J3K*LEJM+2==?'#z1%/0@%AN),^)<&),& J.",]";K"&K  #E$6 7!.DA+ # 9 9$ ?A ()(9(9(;(0OO KK"23%7` a"#"3"3"5!6 03R -40  4;MM $&6se<H\G]  ^B  %C!" $A}55 +/A A 88@1HCE / ,;d  Ck < % :3%|K=X\]!!f% s   7F<-G
G9	$G4	4G9	)r   r   r   r   r   FN)__name__
__module____qualname____firstlineno__r   r   r&   r2   rk   r   r   r   __static_attributes__ r   r   r   r   ;   s0    :;$(BTi+VAF?!r   r   c                 N    [        XUS9nUR                  5         UR                  $ )a~  Validate a file against GeoParquet specification

Parameters
----------
filename:
    File to validate
check_data:
    Set to True to check geometry content in addition to metadata.
local_schema:
    Path to local schema (if not specified, it will be retrieved at https://github.com/opengeospatial/geoparquet)

Returns
-------
A list of error messages, or an empty list if no error
r   r   )r   r   r   )r   r   r   checkers       r   r   r   ~  s(      "lG MMO>>r   c                  \    [        S5        [        S5        [        S5        [        S5        g)NzOUsage: validate_geoparquet.py [--check-data] [--schema FILENAME] my_geo.parquet z3--check-data: validate data in addition to metadatazV--schema: path to GeoParquet JSON schema. If not specified, retrieved from the networkr   )printr   r   r   Usager     s/    	Y 
"I	
?@	` r   c                 `   S n[        U 5      S:X  a
  [        5       $ SnS nSnU[        U 5      :  aK  X   nUS:X  a  SnO(US:X  a  XS-      nUS-  nOUS   S:X  a
  [        5       $ UnUS-  nU[        U 5      :  a  MK  Uc
  [        5       $ [        XUS9nU(       a  U H  n[        U5        M     gg)	Nr   Fz--check-dataTz--schemar   -r   )r#   r   r   r   )argvr   r   r   r   argr   r%   s           r   mainr     s    H
4yA~wJL	A
c$i-g. JJA;LFAVs]7NH	Q c$i- w8NFC#J r   __main__r   ) rW   r`   osgeor   r   r   r|   wkbPointwkbLineStringr+   wkbMultiPointwkbMultiLineStringr0   r1   wkbPoint25DwkbLineString25DwkbPolygon25DwkbMultiPoint25DwkbMultiLineString25DwkbMultiPolygon25DwkbGeometryCollection25Dr   rR   objectr   r   r   r   r   r   UseExceptionsexitr   r   r   <module>r      s  @  
      LL'|NNI|-3OOW.{.2,  "8# "  @!& @!F
.	 hh > zHHT#((^ r   