@@ -334,24 +334,37 @@ def regions2kml(rundata=None,fname='regions.kml',verbose=True,combined=True):
334334 mapping ['width' ] = 2
335335
336336 if flagregion .spatial_region_type == 1 :
337- x1 ,x2 ,y1 ,y2 = flagregion .spatial_region
338- x = [x1 ,x1 ,x2 ,x2 ,x1 ]
339- y = [y1 ,y2 ,y2 ,y1 ,y1 ]
337+ #x1,x2,y1,y2 = flagregion.spatial_region
338+ #x = [x1,x1,x2,x2,x1]
339+ #y = [y1,y2,y2,y1,y1]
340+ region_text = kml_region (mapping ) # mapping contains rectangle
340341 else :
342+ # for Ruled Rectangles, must list all vertices:
341343 x ,y = flagregion .spatial_region .vertices ()
342344
343- v = "\n "
344- for j in range (len (x )):
345- v = v + "%s,%s,%s\n " % (f2s (x [j ]),f2s (y [j ]),f2s (elev ))
346- v = v + "%s,%s,%s\n " % (f2s (x [0 ]),f2s (y [0 ]),f2s (elev ))
347- v .replace (' ' ,'' )
345+ # if all x values are > 180 or all are < -180 shift the values
346+ # for coordinates (original values still appear in description):
347+ xge = np .array (x )
348+ if xge .min () > 180 :
349+ xge = xge - 360.
350+ if xge .max () < - 180 :
351+ xge = xge + 360.
352+ if x .min () < - 180 or x .max () > 180 :
353+ # cannot deal with this case easily
354+ print ('*** polygon spans date line, might not display properly' )
355+
356+ v = "\n "
357+ for j in range (len (x )):
358+ v = v + "%s,%s,%s\n " % (f2s (xge [j ]),f2s (y [j ]),f2s (elev ))
359+ v = v + "%s,%s,%s\n " % (f2s (xge [0 ]),f2s (y [0 ]),f2s (elev ))
360+ v .replace (' ' ,'' )
348361
349- region_text = kml_region (mapping , v )
362+ region_text = kml_region (mapping , v )
350363
351- fname = flagregion .name + '.kml'
352- region_text = kml_region (mapping , v )
353364 kml_text = kml_text + region_text
354365
366+ fname = flagregion .name + '.kml'
367+
355368 if not combined :
356369 kml_text = kml_text + kml_footer ()
357370 kml_file = open (fname ,'w' )
@@ -582,10 +595,20 @@ def poly2kml(xy,fname=None,name='poly',color='00FF00', width=3,
582595 mapping ['color' ] = color
583596 mapping ['width' ] = width
584597
598+ # if all x values are > 180 or all are < -180 shift the values for plotting
599+ xge = np .array (x )
600+ if xge .min () > 180 :
601+ xge = xge - 360.
602+ if xge .max () < - 180 :
603+ xge = xge + 360.
604+ if x .min () < - 180 or x .max () > 180 :
605+ # cannot deal with this case easily
606+ print ('*** polygon spans date line, might not display properly' )
607+
585608 v = "\n "
586609 for j in range (len (x )):
587- v = v + "%s,%s,%s\n " % (f2s (x [j ]),f2s (y [j ]),f2s (elev ))
588- v = v + "%s,%s,%s\n " % (f2s (x [0 ]),f2s (y [0 ]),f2s (elev ))
610+ v = v + "%s,%s,%s\n " % (f2s (xge [j ]),f2s (y [j ]),f2s (elev ))
611+ v = v + "%s,%s,%s\n " % (f2s (xge [0 ]),f2s (y [0 ]),f2s (elev ))
589612 v .replace (' ' ,'' )
590613
591614 region_text = kml_region (mapping , v )
@@ -655,15 +678,29 @@ def gauges2kml(rundata=None, fname='gauges.kml', verbose=True):
655678 for rnum ,gauge in enumerate (gauges ):
656679 t1 ,t2 = gauge [3 :5 ]
657680 x1 ,y1 = gauge [1 :3 ]
681+
682+ # adjust point location for GE so -180 <= xge <= 180:
683+ if x1 < - 180 :
684+ xge = x1 + 360
685+ elif x1 > 180 :
686+ xge = x1 - 360
687+ else :
688+ xge = x1
689+
658690 gaugeno = gauge [0 ]
659691 if verbose :
660- print ("Gauge %i: %s, %s \n " % (gaugeno ,f2s (x1 ),f2s (y1 )) \
661- + " t1 = %s, t2 = %s" % (f2s (t1 ),f2s (t2 )))
692+ if xge == x1 :
693+ print ("Gauge %i: x = %s, y = %s \n " % (gaugeno ,f2s (x1 ),f2s (y1 )) \
694+ + " t1 = %s, t2 = %s" % (f2s (t1 ),f2s (t2 )))
695+ else :
696+ print ("Gauge %i: x = %s (%s), y = %s \n " \
697+ % (gaugeno ,f2s (x1 ),f2s (xge ),f2s (y1 )) \
698+ + " t1 = %s, t2 = %s" % (f2s (t1 ),f2s (t2 )))
662699 mapping = {}
663700 mapping ['gaugeno' ] = gaugeno
664701 mapping ['t1' ] = t1
665702 mapping ['t2' ] = t2
666- mapping ['x1' ] = x1
703+ mapping ['x1' ] = xge
667704 mapping ['y1' ] = y1
668705 mapping ['elev' ] = elev
669706 mapping ['name' ] = 'Gauge %i' % rnum
@@ -700,6 +737,26 @@ def kml_footer():
700737
701738def kml_region (mapping , vertex_text = None ):
702739
740+ # if all x values are > 180 or all are < -180 shift the values for plotting
741+ if 'x3' in mapping :
742+ xge = np .array ([mapping ['x1' ], mapping ['x2' ], mapping ['x3' ],mapping ['x4' ]])
743+ else :
744+ xge = np .array ([mapping ['x1' ], mapping ['x2' ]])
745+ if xge .min () > 180 :
746+ xge = xge - 360.
747+ if xge .max () < - 180 :
748+ xge = xge + 360.
749+ if xge .min () < - 180 or xge .max () > 180 :
750+ # cannot deal with this case easily
751+ print ('*** kml_region spans date line, might not display properly' )
752+
753+ mapping ['x1' ] = xge [0 ]
754+ mapping ['x2' ] = xge [1 ]
755+ if 'x3' in mapping :
756+ mapping ['x3' ] = xge [2 ]
757+ mapping ['x4' ] = xge [3 ]
758+
759+
703760 if vertex_text is None :
704761 if 'x3' in mapping :
705762 # quadrilateral with 4 corners specified
0 commit comments