782{
783 double minx, miny, maxx, maxy;
784 double latmax, latmin, lonmax, lonmin;
785 double lonwidth, latwidth;
786 double latmaxadjust, lonmaxadjust, latminadjust, lonminadjust;
788
789
794
795 if ( minx == maxx && miny == maxy )
796 {
797
798
799 return 20;
800 }
801
802 lonmin = -180.0;
803 latmin = -90.0;
804 lonmax = 180.0;
805 latmax = 90.0;
806
807
808
809 while ( 1 )
810 {
811 lonwidth = lonmax - lonmin;
812 latwidth = latmax - latmin;
813 latmaxadjust = lonmaxadjust = latminadjust = lonminadjust = 0.0;
814
815 if ( minx > lonmin + lonwidth / 2.0 )
816 {
817 lonminadjust = lonwidth / 2.0;
818 }
819 else if ( maxx < lonmax - lonwidth / 2.0 )
820 {
821 lonmaxadjust = -1 * lonwidth / 2.0;
822 }
823 if ( lonminadjust || lonmaxadjust )
824 {
825 lonmin += lonminadjust;
826 lonmax += lonmaxadjust;
827
828
830 }
831 else
832 {
833 break;
834 }
835
836 if ( miny > latmin + latwidth / 2.0 )
837 {
838 latminadjust = latwidth / 2.0;
839 }
840 else if (maxy < latmax - latwidth / 2.0 )
841 {
842 latmaxadjust = -1 * latwidth / 2.0;
843 }
844
845 if ( latminadjust || latmaxadjust )
846 {
847 latmin += latminadjust;
848 latmax += latmaxadjust;
849
850
852 }
853 else
854 {
855 break;
856 }
857 }
858
859
860 bounds->
xmin = lonmin;
861 bounds->
xmax = lonmax;
862 bounds->
ymin = latmin;
863 bounds->
ymax = latmax;
864
865
866
868}