
    njA                         S SK r S SKrS SKrS SKJrJr  \R                  " 5         S r " S S\5      r	 " S S\	5      r
S r\R                  4S	 jr\S
:X  a#  \R                  " \" \R                  5      5        gg)    N)ogrosrc                  D    [        S[        R                  S    S35        g)NzUsage: r   z8 -- This is a sample. Read source to know how to use. --   )printsysargv     W/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/osgeo_utils/samples/densify.pyUsager   )   s$    	
#((1+VW r   c                   F    \ rS rSrS rSS jrS rS rS rSS jr	S	 r
S
rg)
Translator0   c           	         SSK JnJn  SnU" U5      nU" USS5      nUR                  SSSS	S
S9  UR                  SSSSSS9  UR                  SSSSSS9  UR                  SSSSSSS9  UR                  SSSS S!9  UR                  S"S#S$S%[        S&S'9  UR                  S(S)S*S+S!9  UR                  S,S-S.S/S!9  UR                  S0S1S2S3S!9  UR                  S4S5S6S7S!9  UR                  S8S9SS:S;S<S=9  UR                  U5        U R                  (       a?  U" US>S?5      nU R                   H  nUR                  U5        M     UR                  U5        UR                  S@SAS@SB9  X@l        g )CNr   )OptionGroupOptionParserzusage: %prog [options] argzBase optionszBasic Translation Optionsz-iz--inputsrc_filenamezOGR input data sourceINPUT)desthelpmetavarz-oz--outputdst_filenamezOGR output data sourceOUTPUTz-nz--nooverwritestore_false	overwritez)Do not overwrite the existing output file)actionr   r   z-ofz-fz--driverdriver_namez0OGR output driver.  Defaults to "ESRI Shapefile"DRIVERz-wz--wherewherez@SQL attribute filter -- enclose in quotes "PNAME='Cedar River'" )r   r   z-sz--spatspatz,Spatial query extents -- minx miny maxx maxy   )r   r   typenargsz-lz--layerlayerzbThe name of the input layer to translate, if not given, the first layer on the data source is usedz-kz--selectfieldszLComma separated list of fields to include -- field1,field2,field3,...,fieldnz-tz--target-srst_srszATarget SRS -- the spatial reference system to project the data toz-az--assign-srsa_srsz?Assign SRS -- the spatial reference to assign to the input dataz-qz--quietverboseFz%don't print status messages to stdout)r   r   defaultr   zSpecial OptionszSpecial optionsTESRI Shapefile)r)   driverr   )	optparser   r   
add_optionfloatadd_option_groupoptsset_defaultsparser)selfr   r   usager3   gos          r   construct_parserTranslator.construct_parser1   s   6,e$0KL	( 	 	
 	
) 	 	
 	
 < 	 	
 	
C 	 	
 	
W	 	 	
 	
C 	 	
 	
y	 	 	
 	
c	 	 	
 	
X	 	 	
 	
V	 	 	
 	
 8 	 	
 	"99F$57HIAYYQ ##A&D1ATRr   Nc                     S U l         S U l        X l        U R                  5         U R                  R                  US9u  U l        U l        S U l        S U l	        S U l
        S U l        S U l        g )N)args)inputoutputr1   r8   r3   
parse_argsoptionsr;   in_srsout_srsin_dsout_dsout_drv)r4   	argumentsr?   s      r   __init__Translator.__init__   sd    
	"&++"8"8i"8"Hdi
r   c                 d    U R                  5         U R                  5         U R                  5         g N)openmake_fields	translater4   s    r   processTranslator.process   s!    		r   c                    U R                   R                  (       a0  [        R                  " U R                   R                  5      U l        O[        S5      eU R                   R                  (       ah  U R                  R                  U R                   R                  5      U l        U R                  (       d"  [        SU R                   R                  -  5      eO U R                  R                  S5      U l        U R                   R                  (       aJ  [        R                  " 5       U l        U R                  R                  U R                   R                  5        OU R                  R                  5       U l        U R                   R                   (       a-  U R                  R"                  " U R                   R                   6   [        R$                  " U R                   R&                  5      U l        U R                   R*                  (       a/  U R                  R-                  U R                   R*                  5        U R(                  (       d#  [        SU R                   R&                   S35      eU R(                  R/                  S5      (       d#  [        SU R                   R&                   S35      eU R                   R0                  (       d  [        S5      eU R                   R&                  S	:X  Ga  [2        R4                  R7                  [2        R4                  R9                  U R                   R0                  5      5      u  p[2        R4                  R;                  U5      u  p4U R                   R<                  (       a  [2        R4                  R?                  [2        R4                  RA                  UU5      S
-   5      (       a  [2        RB                  " [2        R4                  RA                  UU5      S
-   5        [2        RB                  " [2        R4                  RA                  UU5      S-   5        [2        RB                  " [2        R4                  RA                  UU5      S-   5        Ot[2        R4                  R?                  [2        R4                  RA                  UU5      S
-   5      (       a/  [        S[2        R4                  RA                  UU5      S
-   -  5      eU R                   R<                  (       a  SnOSnU R(                  RE                  U R                   R0                  U5      U l#        U R                   RH                  (       aJ  [        R                  " 5       U l%        U RJ                  R                  U R                   RH                  5        OS U l%        U RF                  RM                  U R                   R0                  U R                  RO                  5       RQ                  5       U RJ                  S9U l)        g )NzNo input layer was specifiedzThe layer '%s' was not foundr   zThe 'zV' driver was not found, did you misspell it or is it not available in this GDAL build?CreateDataSourcezX' driver does not support creating layers, you will have to choose another output driverzNo output layer was specifiedr+   z.shpz.shxz.dbfzGThe file '%s' already exists, but the overwrite option is not specified)zOVERWRITE=YES)r
   )	geom_typesrs)*r?   r   r   OpenrB   	Exceptionr%   GetLayerByNamer<   GetLayerr(   r   SpatialReferencer@   SetFromUserInputGetSpatialRefr!   SetSpatialFilterRectGetDriverByNamer   rD   r    SetAttributeFilterTestCapabilityr   ospathsplitabspathsplitextr   existsjoinremoverQ   rC   r'   rA   CreateLayerGetLayerDefnGetGeomTyper=   )r4   r`   filenamename_dscos         r   rJ   Translator.open   s>   <<$$$,,";";<DJ:;;<<224<<3E3EFDJ:: >ASAS STT  ,,Q/DJ<<..0DKKK((););<**224DK<<JJ++T\\->->?**4<<+C+CD<<JJ))$,,*<*<=||001  2H  I  ||**+=>>001  2J  K  ||((;<<<<##'77WW]]277??4<<;T;T+UVNDgg&&x0GD||%%77>>GGLL 	  II   !	! II   !	! II   !	! 77>>GGLL 	  $aGGLL $ $ %	%	 	 <<!!%DDll33DLL4M4MtT<<//1DLLL))$,,*<*<=DLkk--LL%%jj--/;;= . 
r   c                 `   U R                   R                  5       nU R                  R                  (       a  U R                  R                  R	                  S5      n[        UR                  5       5       Hj  nUR                  U5      nU HP  nUR                  5       R                  5       UR                  5       :X  d  M5  U R                  R                  U5        MR     Ml     g [        UR                  5       5       H/  nUR                  U5      nU R                  R                  U5        M1     g )N,)r<   rh   r?   r&   ra   rangeGetFieldCountGetFieldDefnGetNameupperr=   CreateField)r4   defnr&   ifldfs         r   rK   Translator.make_fields  s    zz&&(<<\\((..s3F4--/0''*A{{}**,	9//4   1 4--/0''*'', 1r   c                 z   U R                   R                  5       nS nU R                  R                  (       a+  [        R
                  " U R                  U R                  5      nU(       a  UR                  5       R                  5       nU(       a  UR                  U5        U(       a  U" U5      nUR                  U5        [        R                  " U R                  R                  5       S9nUR!                  U5        U R                  R#                  U5        U R                   R                  5       nU(       a  M  g g )N)feature_def)r<   GetNextFeaturer?   r'   r   CoordinateTransformationr@   rA   GetGeometryRefClone	TransformSetGeometryr   Featurer=   rh   SetFromCreateFeature)r4   geometry_callbackattribute_callbackrz   transgeomds          r   rL   Translator.translate  s    JJ%%'<<00dllKE##%++-Du% (.MM$(@(@(BCAIIaLKK%%a(

))+A ar   c                 \    U R                   (       a  U R                   R                  5         g g rI   )r=   
SyncToDiskrM   s    r   __del__Translator.__del__1  s    ;;KK""$ r   )r;   rB   r@   r<   r?   r1   rD   rC   rA   r=   r3   rI   )NN)__name__
__module____qualname____firstlineno__r8   rF   rN   rJ   rK   rL   r   __static_attributes__r
   r   r   r   r   0   s)    ^@
h
T-,*%r   r   c                   ,    \ rS rSrS rS rS rS rSrg)Densifyi6  c                 F   X!-
  nXC-
  nUS:X  a  UnUS:  a  X5-   n	X4$ X5-
  n	X4$ [         R                  " [         R                  " [        U5      [        U5      -  5      5      n
US:  a  US:  a  U
nUS:  a  US:  a  SU
-
  nUS:  a  US:  a  SU
-   nUS:  a  US:  a  SU
-
  nUS:X  a  Un	US:  a  X-   nX4$ X-
  n X4$ X[         R                  " [         R
                  " W5      5      -  -   nX5[         R                  " [         R
                  " U5      5      -  -   n	X4$ )Nr      ih  )mathdegreesatanabscosradianssin)r4   x0x1y0y1r   abxnynthetaomegas               r   	calcpointDensify.calcpoint7  s6   GG6B1uV 8O V8OTYYs1vA78q5QUEq5QU%KEq5QU%KEq5QU%KE6B1uV x V
 x $((4<<#6777B$((4<<#6777Bxr   c                 X    X-
  nX4-
  nUS-  US-  -   n[         R                  " U5      nU$ )Nr   r   sqrt)	r4   r   r   r   r   deltaxdeltayd2r   s	            r   distanceDensify.distance[  s4    ]f]*IIbMr   c           	         UR                  5       nU[        R                  :X  d  U[        R                  :X  d  [	        S5      e[        R
                  " [        R                  5      nUR                  S5      nUR                  S5      nUR                  XE5        [        SUR                  5       5       GH  nU R                  R                  nUR                  U5      nUR                  U5      n	U(       a  U(       d  [	        S5      eU R                  XHXY5      n
U R                  R                  R                  5       S:X  a-  U
S:w  a%  [        U
5      [         R"                  " X-  5      -  nOM  X:  Ga9  U R                  R                  R                  5       S:X  aa  [%        [         R"                  " X-  5      5      nX-
  U-  nX-
  U-  nUnUn[        SU5       H  nX-   nX-   nUR                  X5        M     GOU R                  R                  R                  5       S:X  a  [%        [         R&                  " X-  5      5      nS nS n[        SU5       Hy  nU(       dB  U R)                  XHXYU5      u  nnU R                  UUUU5      n
UnUnUR                  UU5        ML  U R)                  UUUX5      u  nnUnUnUR                  UU5        M{     OU R                  R                  R                  5       S:X  a  [%        [         R&                  " X-  5      5      nS nS nX-  n[        U5       Hy  nU(       dB  U R)                  XHXYU5      u  nnU R                  UUUU5      n
UnUnUR                  UU5        ML  U R)                  UUUX5      u  nnUnUnUR                  UU5        M{     UR                  X5        UnU	nGM     U$ )	NzKThe densify function only works on linestring or multilinestring geometriesr      zFirst point is nullUNIFORM        ENDBEGIN)GetGeometryTyper   wkbLineStringwkbMultiLineStringrU   GeometryGetXGetYAddPointrq   GetPointCountr?   r   	remainderru   r/   r   ceilintfloorr   )r4   geometrygtyper6   r   r   rx   	thresholdr   r   r   segcountdxdyxyrl   xayar   r   r   s                         r   densifyDensify.densifyb  sV   ((****es7M7M.M]  LL**+ ]]1]]1	

2q(0023A--Iq!Bq!BR 566bb-A||%%++-:8 %a499Q]+C CI }<<))//1Y>"499Q]#;<H'X-B'X-BAA"1h/FF

1( 0
 \\++113u<"4::am#<=HBB"1h/!%)^^BBI%NFB $b"b" =A!#B!#BJJr2.$!%BB!JB

2r* 0 \\++113w>  #4::am#<=HBB !"I"8_!%)^^BBI%NFB $b"b" =A!#B!#BJJr2.$!%BB!JB

2r* - JJrBBO 4R r   c                 v    U R                  5         U R                  5         U R                  U R                  S9  g )N)r   )rJ   rK   rL   r   rM   s    r   rN   Densify.process  s)    		6r   r
   N)	r   r   r   r   r   r   r   rN   r   r
   r   r   r   r   6  s    "HWr7r   r   c                    ^ S mU4S jnSnU R                  5       nU(       a/  [        U5       H  nU R                  U5      nX!" U5      -   nM      U$ U" U 5      nU$ )Nc                 X    X-
  nX-
  nUS-  US-  -   n[         R                  " U5      nU$ )z=Return the euclidean distance between this point and another.r   r   )r   r   x2y2r   r   r   r   s           r   get_distanceGetLength.<locals>.get_distance  s4    aiFAI&99R=r   c                    > SnU nUR                  5       nUR                  S5      UR                  S5      pT[        SU5       H5  nUR                  U5      UR                  U5      pT
" XEXx5      n	X-   nUnUnM7     U$ )Nr   r   r   )r   r   r   rq   )single
cumulativer6   pt_countr   r   pir   r   lengthr   s             r   cumulateGetLength.<locals>.cumulate  s~    
??$AFF1IB8$BVVBZ!""1F#,JBB % r   r   )GetGeometryCountrq   r   )r   r   r   
geom_countgir6   r   s         @r   	GetLengthr     sl     J**,J
#B''+A#hqk1J $
  h'
r   c           
         [        U 5      S:  a
  [        5       $ SS Kn/ nUR                  SSSSSS/ S	QS
9nUR	                  U5        UR                  SSSSSSS9nUR	                  U5        [        U SS  US9nUR                  5         g )Nr   r   z-rz--remainderr   choiceendz{what to do with the remainder -- place it at the beginning,
place it at the end, or evenly distribute it across the segment)r   beginuniform)r   r#   r*   r   choicesz-dz
--distancer   r/   a  Threshold distance for point placement.  If the
'uniform' remainder is used, points will be evenly placed
along the segment in a fashion that makes sure they are
no further apart than the threshold.  If 'beg' or 'end'
is chosen, the threshold distance will be used as an absolute value.DISTANCE)r   r#   r   r   r   )r?   )lenr   r-   make_optionappendr   rN   )r	   r-   r?   r7   r   s        r   mainr     s    
4y1}wGC+ 	 		A NN1H
  	 	A NN1QR'*AIIKr   __main__)r   r_   r   osgeor   r   UseExceptionsr   objectr   r   r   r	   r   r   exitr
   r   r   <module>r      s{   @  	 
     C% C%LH7j H7VD hh  F zHHT#((^ r   