2 # ######################################
3 # Utiliza la salida de Google Map Buddy
4 # como data de entrada para GlobalMapper
5 # por Rommel J. Contreras G. junio-2011
7 ########################################
12 my ($nom_gmid,$nom_txt) = @_;
18 ---> perl tesela.pl archivo.gmid archivo_list.txt <---
20 resultado en: archivo_DATA.txt
25 tesela -h --> Esta ayuda.
27 tesela -i --> Informacion sobre tesela y Google Maps, etc.
29 tesela -c --> Creditos.
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]
41 elsif ($_[0] eq "\-c"){
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
;
56 elsif ($_[0] eq "\-i"){
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.
89 elsif ($_[0] eq "\-k"){
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:
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
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' ){
119 No introdujo correctamente los archivos de entrada,
121 ----> ejecute tesela -h <----
131 # Carga el archivo con los parametros de cada tesela
133 open (PATO
,$_[0]) or die "no puedo abrir el archivo: $!";
137 my (@fields, $field) = ();
138 @fields = split /\s/;
139 foreach $field (0..@fields){
140 $::coord
[$index][$field] = $fields[$field];
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 # =====================================================================
153 open (GMID
,$_[0]) or die "no puedo cargar el archivo *.GMID: $!";
154 my (@MinX,@MinY) = 0;
159 # @Zoon = split (/=/,$Zoo);
168 return ("$MinX[1],$MinY[1]");
172 #$nomb = 'gs_337379_493601_20.jpg:';
174 # $_[0]--> Cordenadas X,Y;Pixel de ref. $_[1]-->MinX; $_[2]-->MinY
175 my @valor = split (/_/,$_[0]);
178 my $pixel_x = ($Xo - $_[1]) * 256;
179 my $pixel_y = ($Yo - $_[2]) * 256;
180 return ("$pixel_x\,$pixel_y");
186 or die "no puedo abrir el archivo de salida: $!";
187 # ### long 3 y 6 lat 10 y 14
189 for ($i = 1; $i <= $#::coord; $i++){
191 print DATA pixeles
($::coord
[$i][0],$_[1],$_[2]),",",
193 $::coord
[$i][10],",",
197 close (DATA
) or die "no puedo cerrar el archivo:&!";
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
209 if ($_[0] and $_[1]) {
210 ($::MinX
,$::MinY
) = split (/,/,carga_GMID
($_[0]));
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
);