Então, uns testes que estou fazendo aqui, se bem que até agora, obtive umas elevações bem "variadas" por assim dizer... O caso é o seguinte: a rotina a seguir deveria servir para isso: dadas as coordenadas geográficas de um ponto, ela abre o google earth e "pergunta" a ele qual a elevação do ponto na coordenada informada.. bom, deveria ser assim, mas até agora não encontrei uma confiável de de certificar-me que a imagem "estabilizou" na tela, para aí sim, "perguntar" a cota... se ela não estabiliza, o terreno não informa a cota corretamente, e o google earth não está sendo "modal" nos métodos que usei nele.. aos que pensarem que isso se deve a estar programado em lisp, digo que não tem nada a ver... faz o teste, rode a rotina para as coordenadas Lat: -21 e Lon:-48 por exemplo... põe o globo em movimento e rode a rotina pelo console... ela deverá informar cotas estranhas... e se deixar a imagem estabilizar nesta coordenada, ele passa a informar sempre o mesmo valor.. em fim... se estabilizar funciona!!!
imagine as utilidades!! para um anteprojeto de estradas por exemplo, já é um começo se você não tem topografia alguma, hehehe, eu mesmo estou usando este esquema até a topografia ser concluída, aliás, até o geométrico preliminar foi feito no google earth e exportado para o cad com o
expge. Se alguém quiser contribuir no desenvolvimento, ou tiver alguma dica, manda aí!!!
mais...;inicializa o google earth:
(defun getools:init ()
(if (setq ge:app (vlax-get-or-create-object "GoogleEarth.ApplicationGE")
kh:app (vlax-get-or-create-object "Keyhole.khInterface"))
(progn
(while (/= 1 (vlax-invoke-method ge:app "isinitialized")))
(while (/= 1 (vlax-invoke-method ge:app "isonline")))
t)
))
;calcula a elevação de um ponto na superficie do globo:
(defun getools:elevation-from-pt (lon lat / PointOnTerrain)
(if (not kh:app) (getools:init))
(vlax-invoke-method kh:app "setViewParams" lat lon 1000 0 0 5 5)
(setq PointOnTerrain nil)
(setvar "cmdecho" 0)
(while (/= PointOnTerrain
(setq PointOnTerrain
(caddr
(vlax-safearray->list
(vlax-invoke-method
kh:app
"GetPointOnTerrainFromScreenCoords"
0 0)))))
(command "delay" 500))
(setvar "cmdecho" 1)
PointOnTerrain)
;libera a memória:
(defun getools:restore ()
(if (equal 'vla-object (type ge:app)) (vlax-release-object ge:app))
(if (equal 'vla-object (type kh:app)) (vlax-release-object kh:app))
(setq ge:app nil kh:app nil))
Para usar é simples:
(getools:init)
(getools:elevation-from-pt lon lat)
(getools:restore)
onde lat e lon são as coordenadas geográficas do ponto, por exemplo
Lon = -48.5 ( 48º30' Oeste )
Lat = -21 ( 21º00' Sul )
Publicidade:
interneyshop