Altitudes no Google Earth

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

LinkWithin

Related Posts Plugin for WordPress, Blogger...