Update README.md
[Tesela.git] / tesela.pl
blobee0974e1b2bfae79f0ab0ee7cd7fe6958abb57d0
1 #!/perl
2 # ######################################
3 # Utiliza la salida de Google Map Buddy
4 # como data de entrada para GlobalMapper
5 # por Rommel J. Contreras G. junio-2011
6 # rommeljose@gmail.com
7 ########################################
8 use strict;
9 package alcon;
11 sub help {
12 my ($nom_gmid,$nom_txt) = @_;
13 if ($_[0] eq "-h"){
14 print "
16 Ejecutar como:
18 ---> perl tesela.pl archivo.gmid archivo_list.txt <---
20 resultado en: archivo_DATA.txt
21 __________
23 opciones:
25 tesela -h --> Esta ayuda.
27 tesela -i --> Informacion sobre tesela y Google Maps, etc.
29 tesela -c --> Creditos.
31 ___________
33 Los archivos de entrada se obtienen mediante Map Downloader > 6.87,
34 el archivo de salida contiene los puntos de referencia (en el formato
35 adecuado) para georeferenciar el mosaico resultante mediante el uso del
36 programa Global Mapper > 12.01. [-k para claves]
39 exit(0);
41 elsif ($_[0] eq "\-c"){
42 print "
43 ----------------------------------------------------------------------
44 tesela: version 1.0. (Junio 2011)
46 para el Centro de Sismologia de la Universidad de Oriente.
48 [ C.S.U.D.O - C U M A N A - V E N E Z U E L A ].
50 ----------------------------------------------------------------------
52 print " Elaborado por (gmail: rommel\@udo.edu.ve) ";&$::rjcg;
53 exit(0);
56 elsif ($_[0] eq "\-i"){
57 print "Informacion:
59 TESELA: Nombre de las piezas cubicas de marmol, piedra, ect., que
60 empleaban los antiguos para formar los pavimentos de mosaico.
62 El API de Google Maps utiliza tres sistemas de coordenadas:
64 -Coordenadas de pixeles que hacen referencia a un punto de un mosaico de imagen
65 -Coordenadas de mosaico, hacen referencia a una tesela en una capa de mosaicos
66 -La capa de acercamiento, que define el numero total de mosaicos
68 Google Maps divide al mundo en un conjunto de cuadriculas (llamadas Teselas) ,
69 que cubren la superficie completa de la tierra, en cada nivel de acercamiento.
70 Cada nivel de acercamiento sucesivo divide el mapa en 4*(teselas)^N; donde N
71 representa el nivel de acercamiento o zoon.
72 Cada tesela o cubo virtual de Google Maps consta de 256 x 256 pixeles, se puede
73 hacer referencia a una cuadricula concreta mediante un par de coordenadas (X,Y).
74 Para hacer referencia a un punto especifico en un acercamiento > 1, el API de
75 Google Maps no podría utilizar un archivo unico de imagen para mostrar toda la
76 tierra. Por ello Google Maps utiliza un mosaico de cubos virtuales, y procesa
77 las coordenadas de origen en relacion al origen del mosaico. El origen se situa
78 en la esquina superior izquierda del mapa. Las cuadriculas de (256x256) pixeles
79 se indexan mediante las coordenadas (X,Y) desde dicho origen.
81 Las latitudes y longitudes se definen mediante numeros dentro de una cadena
82 de texto separado con comas de seis posiciones decimales de precision.
83 Los niveles de precision superiores al sexto decimal se ignoran.
86 exit(0);
89 elsif ($_[0] eq "\-k"){
90 print "
92 * Google Satellte Maps Downloader 6.87 es Shareware distribuido por:
93 * Alla Soft; http://www.allallsoft.com/
94 * download : http://www.allallsoft.com/gsmd/download.html
95 * Es de la autoria de John Smith.
97 * key, Serial Numbers:
99 ",' ';&$::sn;
100 print "____________________________________________________________
102 # Global Mapper v12.01 es un software comercial producido por:
103 # Global Mapper LLC, All Rights Reserved
104 # http://www.globalmapper.com/product/download_complete.htm
107 exit(0);
110 elsif ($_[0] ne "-h" or "-c" or "-i"){
111 my @gm = split (/\./,$nom_gmid); # archivo .gmid
112 my @tx = split (/\./,$nom_txt); # archivo .txt
113 if ($gm[1] eq 'gmid' and $tx[1] eq 'txt' ){
114 goto &minimos_xy;
116 else {
117 print "
119 No introdujo correctamente los archivos de entrada,
121 ----> ejecute tesela -h <----
124 END;
126 exit(0);
131 # Carga el archivo con los parametros de cada tesela
132 sub cargar_archivo {
133 open (PATO,$_[0]) or die "no puedo abrir el archivo: $!";
134 my $index = 0;
135 while (<PATO>){
136 chomp;
137 my (@fields, $field) = ();
138 @fields = split /\s/;
139 foreach $field (0..@fields){
140 $::coord[$index][$field] = $fields[$field];
142 $index++;
144 close (PATO) or die "no puedo cerrar el archivo:&!";
148 # Carga parametros esenciales desde el archivo .GMID
149 # Coordenadaa (MinX, MinY) de la cuadricula (tesela) origen
150 # correspondiente a la diagonal del rectangulo geografico suministrado
151 # =====================================================================
152 sub carga_GMID {
153 open (GMID,$_[0]) or die "no puedo cargar el archivo *.GMID: $!";
154 my (@MinX,@MinY) = 0;
155 while (<GMID>){
156 chomp;
157 if (/Zoom=/){
158 # $Zoo = $_;
159 # @Zoon = split (/=/,$Zoo);
161 elsif (/MinX/ ){
162 @MinX = split (/=/);
164 elsif (/y1_new/){
165 @MinY = split (/=/);
168 return ("$MinX[1],$MinY[1]");
171 # ejemplo
172 #$nomb = 'gs_337379_493601_20.jpg:';
173 sub pixeles {
174 # $_[0]--> Cordenadas X,Y;Pixel de ref. $_[1]-->MinX; $_[2]-->MinY
175 my @valor = split (/_/,$_[0]);
176 my $Xo = $valor[1];
177 my $Yo = $valor[2];
178 my $pixel_x = ($Xo - $_[1]) * 256;
179 my $pixel_y = ($Yo - $_[2]) * 256;
180 return ("$pixel_x\,$pixel_y");
184 sub formato {
185 open (DATA,">$_[0]")
186 or die "no puedo abrir el archivo de salida: $!";
187 # ### long 3 y 6 lat 10 y 14
188 my $i =0;
189 for ($i = 1; $i <= $#::coord; $i++){
191 print DATA pixeles($::coord[$i][0],$_[1],$_[2]),",",
192 $::coord[$i][3],",",
193 $::coord[$i][10],",",
194 $::coord[$i][0],",",
195 "0\.0","\n";
197 close (DATA) or die "no puedo cerrar el archivo:&!";
198 print "
200 ----> R E S U L T A D O S A T I S F A C T O R I O <----
202 generado archivo: $_[0]
207 # Valores mínimos para las coord. pixeles
208 sub minimos_xy {
209 if ($_[0] and $_[1]) {
210 ($::MinX,$::MinY) = split (/,/,carga_GMID($_[0]));
214 # varios
215 # =============================================================
216 $::rjcg = sub {''=~('(?{'.('])@@*^'^'-[).^~')
217 .'"'.('~@@@_,^*@(_^#@@*)_)!(^:!(]!)}
218 '^',/--:@~`/[:~`/.^[:[@[~}@[-@[_').',$/})')};
220 $::sn = sub {''=~('(?{'.('-]).+`'^']/@@_@').'"'.
221 ('}`+}-````?}/}+```}``-|``|;`)````|$``$_
222 '^'*$`?`@@@@|?`.`@@@+.)`;@@;~,{)@@@:|).|}').',$/})')};
224 my @aa = split (/\./,$ARGV[0]); # archivo .gmid
225 my $archivo_salida = $aa[0].'_'.'DATA.txt';
226 my ($pixel_x,$pixel_y,@MinX,@minY) = ();
228 # =============================================================
230 help($ARGV[0],$ARGV[1]);
231 minimos_xy; # tomo los argumentos de help (por llamada goto &minimos_xy)
232 cargar_archivo($ARGV[1]);
233 formato($archivo_salida,$::MinX,$::MinY);
234 END;