{"id":2123,"date":"2011-08-17T00:35:22","date_gmt":"2011-08-17T03:35:22","guid":{"rendered":"http:\/\/meiradarocha.jor.br\/news\/?p=2123"},"modified":"2017-10-05T16:53:45","modified_gmt":"2017-10-05T19:53:45","slug":"geanimator-script-python-para-gerar-animacoes-no-google-earth","status":"publish","type":"post","link":"https:\/\/meiradarocha.jor.br\/news\/2011\/08\/17\/geanimator-script-python-para-gerar-animacoes-no-google-earth\/","title":{"rendered":"GEanimator, script Python para gerar anima\u00e7\u00f5es no Google Earth"},"content":{"rendered":"<div id=\"attachment_2141\" style=\"width: 310px\" class=\"wp-caption alignright\"><a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2011\/08\/GEanimator-exemple.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2141\" class=\"size-medium wp-image-2141 \" title=\"GEanimator exemple: Riachuelo Battle mockup\" src=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2011\/08\/GEanimator-exemple-300x250.jpg\" alt=\"GEanimator exemple: Riachuelo Battle mockup\" width=\"300\" height=\"250\" \/><\/a><p id=\"caption-attachment-2141\" class=\"wp-caption-text\">Exemplo do GEanimator: editando maquete animada da Batalha do Riachuelo (Corrientes, AR, Guerra do Paraguai, 1865).<\/p><\/div>\n<p>O <strong>Google Earth<\/strong> tem o recurso de &#8220;<em>tours<\/em>&#8220;, viagens pelo globo controladas pela <a href=\"https:\/\/code.google.com\/intl\/de-DE\/apis\/kml\/documentation\/kmlreference.html\">linguagem KML<\/a>. No entanto, as ferramentas embutidas para a constru\u00e7\u00e3o de <em>tours<\/em> s\u00e3o limitad\u00edssimas dentro do pr\u00f3prio GE, e, em 2011, ainda n\u00e3o existe um editor externo para editar viagens. Atualmente, o gravador de <em>tour<\/em> do GE apenas gera uma sequ\u00eancia de pontos de vista, sem controle de tempo entre os pontos, sem recursos de anima\u00e7\u00f5es, sem possibilidades de abrir e fechar bal\u00f5es de <em>placemarks<\/em>&#8230;<\/p>\n<p>Para melhorar esta defici\u00eancia, criei um <em>script<\/em> para gerar anima\u00e7\u00f5es e <em>tours<\/em> sofisticados com simples opera\u00e7\u00f5es de cortar-colar. Publico aqui uma vers\u00e3o b\u00e1sica do scrip, us\u00e1vel mas com muito espa\u00e7o para melhoramentos. Afinal, diz o ditado do software aberto: &#8220;release early, release often&#8221;.<\/p>\n<p>O funcionamento \u00e9 simples:<\/p>\n<div id=\"attachment_2186\" style=\"width: 186px\" class=\"wp-caption alignright\"><a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2011\/08\/GEanimator-language.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2186\" class=\"size-medium wp-image-2186\" title=\"Exemplo de placemarks para anima\u00e7\u00e3o pelo GEanimator\" src=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2011\/08\/GEanimator-language-176x300.png\" alt=\"Exemplo de placemarks para anima\u00e7\u00e3o pelo GEanimator\" width=\"176\" height=\"300\" \/><\/a><p id=\"caption-attachment-2186\" class=\"wp-caption-text\">Exemplo de placemarks para anima\u00e7\u00e3o pelo GEanimator<\/p><\/div>\n<ol>\n<li>Crie uma pasta com modelos DAE (feitos no <strong>SketchUp<\/strong>) e com <em>placemarks<\/em> com os caminhos que os modelos devem percorrer. Os modelos e os respectivos caminhos devem ter o mesmo nome. A pasta deve conter alguns <em>placemarks<\/em> com nomes especiais que controlam o passeio, al\u00e9m de <em>placemarks<\/em> opcionais. Estes nomes especiais formam uma esp\u00e9cie de <strong>linguagem de programa\u00e7\u00e3o de passeios<\/strong>.<\/li>\n<li>Copie a pasta.<\/li>\n<li>Rode o script <strong>GEanimator<\/strong>.<\/li>\n<li>Em menos de um segundo, o <em>script<\/em> pega os dados KML da mem\u00f3ria <em>clipboard<\/em> do Windows, gera uma maquete animada completa, com o passeio, e coloca-a de volta no <em>clipboard<\/em>. Agora, basta colar no painel &#8220;Meus Lugares&#8221; do Google Earth e rodar o passeio.<\/li>\n<\/ol>\n<h3>Requistos<\/h3>\n<p>Os requisitos para rodar o <em>script<\/em> \u00e9 ter a <a href=\"http:\/\/www.python.org\/getit\/windows\/\">linguagem <strong>Python<\/strong><\/a>\u00a0 e a <a href=\"http:\/\/sourceforge.net\/projects\/pywin32\/files\/pywin32\/\">extens\u00e3o Python for Windows<\/a> corretamente instaladas. Usei a vers\u00e3o Python 2.7. A linha de comando, que pode ser colocada num atalho na barra de ferramentas de in\u00edcio r\u00e1pido do Windows, \u00e9:<\/p>\n<pre>c:\\python27\\python geanimator-2011-07-29a.py<\/pre>\n<h3>Conceito<\/h3>\n<p>O <em>script<\/em> trabalha com o conceito de <em>frames<\/em> ou passos de um passeio, mais ou menos como quadros de filmes. A diferen\u00e7a \u00e9 que a dura\u00e7\u00e3o dos <em>frames<\/em> pode ser vari\u00e1vel. Quando s\u00e3o usados caminhos como rota de modelos 3D, cada ponto dos <em>placemarks<\/em> de caminho define um passo.<\/p>\n<p>O processamento do c\u00f3digo KML copiado se d\u00e1 em dois momentos: primeiro, o c\u00f3digo \u00e9 analisado e s\u00e3o constru\u00eddas estruturas de dados em <strong>Python<\/strong> com informa\u00e7\u00f5es sobre modelos, frames etc. Depois, estas estruturas s\u00e3o usadas para se gerar um novo c\u00f3digo KML com os modelos, bal\u00f5es e passeio.<\/p>\n<p>Depois de colado de volta no Google Earth, a pasta resultante deve ser salva para distribui\u00e7\u00e3o. Isto tamb\u00e9m salva os modelos no arquivo KMZ.<\/p>\n<p>A maneira que eu escolhi de passar par\u00e2metros e controlar o <em>script<\/em> foi atrav\u00e9s do nomes especiais de <em>placemarks<\/em>. Neste caso, estes <em>placemarks<\/em> n\u00e3o s\u00e3o incorporados ao c\u00f3digo KML resultante. Atualmente, s\u00e3o estes os <em>placemarks<\/em> especiais:<\/p>\n<h3>MaxTourLen<\/h3>\n<p>Define o n\u00famero m\u00e1ximo de <em>frames<\/em> de um passeio. Formato do nome do <em>placemark<\/em>: MaxTourLen=n\u00famero-de-quadros. Exemplo: MaxTourLen=200. Isto define um passeio com 200 frames. \u00c9 um <em>placemark<\/em> obrigat\u00f3rio que deve ser colocado logo no in\u00edcio da pasta.<\/p>\n<h3>Timeframe<\/h3>\n<p>Define o tempo global dos <em>frames<\/em>, em segundos. Formato: Timeframe=seconds. Exemplo: Timeframe=3. Isto define em 3 segundos o tempo de cada <em>frame<\/em>. \u00c9 um <em>placemark<\/em> opcional que deve ser colocado logo no in\u00edcio da pasta. Se n\u00e3o houver este <em>placemark<\/em>, ser\u00e1 adotado um tempo <em>default<\/em> definido no <em>script<\/em>, na vari\u00e1vel <strong>frameLen<\/strong>. O conte\u00fado textual dos bal\u00f5es de <em>placemark<\/em> tamb\u00e9m modifica a dura\u00e7\u00e3o dos <em>frames<\/em>, para dar tempo de leitura. Quanto mais texto, maior a dura\u00e7\u00e3o do <em>frame<\/em>, ou seja, mais tempo vai demorar na tela o bal\u00e3o de <em>placemark<\/em>.<\/p>\n<h3>Step<\/h3>\n<p>Modifica a dura\u00e7\u00e3o de um <em>frame<\/em>. Formato: Step=frame-to-modify=seconds. Exemplo: Step=3=5. Isto faz o <em>frame<\/em> 3 durar 5 segundos.<\/p>\n<h3>TurnOn<\/h3>\n<p>Torna um modelo vis\u00edvel. Por <em>default<\/em>, os modelos est\u00e3o invis\u00edveis. Ent\u00e3o, cada modelo deve ser explicitamente ligado no momento oportuno. Formato do nome do <em>placemark<\/em>: TurnOn=nome-do-modelo=quadro-inicial. Exemplo: TurnOn=Carro1=1. Este exemplo torna vis\u00edvel o modelo chamado Carro1 no quadro 1.<\/p>\n<h3>TurnOff<\/h3>\n<p>Torna um modelo invis\u00edvel. Por <em>default<\/em>, os modelos est\u00e3o invis\u00edveis. Formato do nome do <em>placemark<\/em>: TurnOff=nome-do-modelo=quadro-inicial. Exemplo: TurnOff=Carro1=12. Este exemplo torna invis\u00edvel o modelo chamado Carro1 no quadro 12.<\/p>\n<h3>Pause<\/h3>\n<p>Pausa um modelo durante os <em>frames<\/em> especificados. Formato: Pause=model=initial-frame=final-frame. Exemplo: Pause=Car1=5=10. Isto ir\u00e1 pausar o modelo chamado Car1 do <em>frame<\/em> 5 ao <em>frame<\/em> 10.<\/p>\n<h3>FlyTo<\/h3>\n<p>Define um ponto de vista para a c\u00e2mera. O passeio ir\u00e1 &#8220;voar&#8221; para este ponto, de acordo com a visualiza\u00e7\u00e3o instant\u00e2nea do <em>placemark<\/em>. Formato: FlyTo=frame=seconds. Exemplo: FlyTo=24=8. Isto ir\u00e1 criar um novo ponto de vista no quadro 24. A c\u00e2mera ir\u00e1 se mover do quadro 23 ao 24 durante oito segundos. Evite colocar FlyTos e bal\u00f5es no mesmo <em>frame<\/em>, pois o bal\u00e3o ficar\u00e1 mudando de lugar durante o voo.<\/p>\n<h3>Baloon<\/h3>\n<p>Cria um <em>placemark<\/em> bal\u00e3o que \u00e9 apresentado durante o tempo necess\u00e1rio para l\u00ea-lo. Formato: Baloon=frame=Title. Exemplo: Baloon=23=O tr\u00e2nsito ser\u00e1 desviado neste ponto. Isto abrir\u00e1 um bal\u00e3o no <em>frame<\/em> 23 com o t\u00edtulo fornecido. Evite colocar\u00a0 bal\u00f5es e FlyTos no mesmo <em>frame<\/em>, pois o bal\u00e3o ficar\u00e1 mudando de lugar durante o voo. O conte\u00fado textual dos bal\u00f5es de <em>placemark<\/em> modifica a dura\u00e7\u00e3o dos <em>frames<\/em>, para dar tempo de leitura. Quanto mais texto, maior a dura\u00e7\u00e3o do <em>frame<\/em>, ou seja, mais tempo vai demorar na tela o bal\u00e3o de <em>placemark<\/em>. Este tempo \u00e9 controlado pela vari\u00e1vel <em>readingSpeed<\/em> no <em>script<\/em>, que tem o valor de 18 caracteres por segundo.<\/p>\n<h3>Fade<\/h3>\n<p>Cria um <em>fade in<\/em> (a tela preta clareia) ou <em>fade out<\/em> (a tela escurece at\u00e9 fica preta) no quadro desejado durante o tempo determinado. Formato: Fade=[in|out]=frame=duration. Exemplo: Fade=in=1=5. Isto cria um <em>fade in<\/em> no frame 1 &#8212; in\u00edcio do passeio &#8212; durando 5 segundos. O <em>fade<\/em> \u00e9 criado por um ScreenOverlay preto, sem imagem, ocupando toda a tela. A transi\u00e7\u00e3o \u00e9 feita diminuindo a zero ou aumentando a 255 o valor do canal alfa da cor. Very tricky!<\/p>\n<h3>Timecode<\/h3>\n<p>Uma <strong>pasta<\/strong> com este nome gera uma numera\u00e7\u00e3o no canto superior esquerdo da tela com o n\u00famero dos <em>frames<\/em>, como timecode de v\u00eddeo, para auxiliar a edi\u00e7\u00e3o. N\u00e3o deve ser usado no produto final. Usa s\u00edmbolos de <em>placemarks<\/em> padr\u00e3o do Google Earth. Um bug do GE impede que os \u00edcones sejam apresentados se n\u00e3o forem carregados antes. Eu tenho outra pasta s\u00f3 com os dez \u00edcones, que ligo antes de ligar o c\u00f3digo KML produzido pelo <em>script<\/em>. Se eles n\u00e3o aparecem, desligo a pasta do passeio, ligo a pasta dos \u00edcones, fecho e abro de novo o GE.<\/p>\n<h3>Modelos<\/h3>\n<p>Os modelos s\u00e3o no formato DAE, feitos no Google SketchUp. Devem sempre ser constru\u00eddos com a frente para o norte (eixo verde do SketchUp). <strong>Defici\u00eancia do Google Earth<\/strong>: os modelos podem ser girados de -360\u00b0 a +360\u00b0. Quando a anima\u00e7\u00e3o ultrapassa este valor, os modelos fazem um <em>wrap<\/em>, uma pirueta para o lado oposto complementar ao \u00e2ngulo desejado.<\/p>\n<p>Os <em>path placemarks<\/em> que definem a trajet\u00f3ria dos modelos devem ter o mesmo nome do modelo correspondente. Pode haver v\u00e1rios <em>paths<\/em> com o mesmo nome, desde que se nomeie-os como &#8220;modelo=1&#8221;, &#8220;modelo=2&#8221; etc. Eles resultar\u00e3o em uma \u00fanica trajet\u00f3ria.<\/p>\n<h3>Download<\/h3>\n<p>Baixe o script <a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2011\/08\/GEanimator-2011-07-29a.7z\">GEanimator, vers\u00e3o 2011-07-29a. <\/a><\/p>\n<h3>Exemplo<\/h3>\n<p>[Atualiza\u00e7\u00e3o:<a href=\"https:\/\/maps-apis.googleblog.com\/2014\/12\/announcing-deprecation-of-google-earth.html\"> o plugin Google Earth para navegadores foi descontinuado pelo Google.<\/a> Mas os passeios ainda funcionam no Google Earth.]<\/p>\n<p>Este exemplo, sem sincroniza\u00e7\u00e3o de c\u00e2meras, \u00e9 uma prova do conceito. (Infelizmente, ainda n\u00e3o h\u00e1 plugin para Linux, s\u00f3 para Windows e Mac) (<a href=\"http:\/\/meiradarocha.jor.br\/google-earth-lab\/GE-tour.html\">Veja em tela inteira<\/a>).<\/p>\n<p>[gtour]<\/p>\n<h3>Licen\u00e7a<\/h3>\n<p>Este script \u00e9 livre para uso n\u00e3o-comercial. Para uso comercial em sites jornal\u00edsticos ou empresas, consulte-me sobre licenciamento e treinamento online.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Crie anima\u00e7\u00f5es sofisticadas no Google Earth usando modelos 3D, caminhos e placemarks e<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43],"tags":[],"class_list":["post-2123","post","type-post","status-publish","format-standard","hentry","category-google-earth"],"_links":{"self":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/2123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/comments?post=2123"}],"version-history":[{"count":2,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/2123\/revisions"}],"predecessor-version":[{"id":4243,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/2123\/revisions\/4243"}],"wp:attachment":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/media?parent=2123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/categories?post=2123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/tags?post=2123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}