Coordenadas geográficas

Coordenadas geográficas

Postby jgabri » Sun Jun 07, 2020 4:15 pm

Hola grupo

Estoy buscando una función, que al pasarle una dirección me devuelva, la longitud y latitud geográfica, he estado haciendo pruebas con una función del master Navarro, funciona algunas veces y otra no, la dirección está bien, algo falla, me pueden ayudar ?

Function GeoCoordenadas( cPostal_Code, cStreet, cNumber, cLocality, cState)

Local cWeb := "http://maps.google.es/maps/place/"
local cMap
local cRet := ""
local oOle
local nPos1
local nPos2
local aCoor := { 0, 0, 0 }
local cNation:="Spain"


cPostal_Code := StrTran( AllTrim( cPostal_Code ), ' ', '+' )
cStreet := StrTran( AllTrim( cStreet ), ' ', '+' )
cNumber := StrTran( AllTrim( cNumber ), ' ', '+' )
cLocality := StrTran( AllTrim( cLocality ), ' ', '+' )
cState := StrTran( AllTrim( cState ), ' ', '+' )
cNation := StrTran( AllTrim( cNation ), ' ', '+' )
cMap := AllTrim( cPostal_Code ) + "+" + AllTrim( cStreet ) + "+" + ;
AllTrim( cNumber ) + "+" + AllTrim( cLocality ) + "+" + ;
AllTrim( cState ) + "+" + AllTrim( cNation )
oOle := CreateObject("Winhttp.WinHttpRequest.5.1")
oOle:Open( "GET", cWeb + AllTrim( cMap ), .F. )
oOle:Send()
cURL := oOle:ResponseText
nPos1 := At( "/@", cUrl )

Msginfo(cWeb + AllTrim( cMap ))



if !Empty( nPos1 )
nPos2 := At( "/data", cUrl )
cRet := Substr( cUrl, nPos1, nPos2 - nPos1 )
if !Empty( nPos2 )
cRet := StrTran( cRet, "/@", "" )
aCoor := hb_ATokens( cRet, "," )
endif
endif

aCoor := { aCoor[ 1 ], aCoor[ 2 ] }

// Msginfo( aCoor[ 1 ])
// Msginfo( aCoor[ 2 ])


Return aCoor

Un saludo,
Gabriel
jgabri
 
Posts: 19
Joined: Mon Jan 14, 2019 11:43 am

Re: Coordenadas geográficas

Postby jrestojeda » Mon Jun 08, 2020 12:58 pm

Hola, cómo estás?
Yo tengo el siguiente código que lo uso hace bastantes años, pero del mismo modo, no siempre me ubica las coordenadas.
Lo dejo así puedes probarlo.

Code: Select all  Expand view
// GEOLOCALIZACION DE DIRECCION //
Function ConsultoDireccion(Calle,Localidad,Provincia,Pais)

cCalle    :=STRTRAN(Calle    ," ","%20")
cLocalidad:=STRTRAN(Localidad," ","%20")
cProvincia:=STRTRAN(Provincia," ","%20")
cPais     :=STRTRAN(Pais     ," ","%20")

cCalle    :=ALLTRIM(cCalle)
cLocalidad:=ALLTRIM(cLocalidad)
cProvincia:=ALLTRIM(cProvincia)
cPais     :=ALLTRIM(cPais)

// URL Sin Key del API de google maps
cUrl:="https://maps.googleapis.com/maps/api/geocode/xml?address="+cCalle+" "+cLocalidad+" "+cProvincia+" "+cPais+"&sensor=false"

// URL Con Key del API de google maps
//cUrl:="https://maps.googleapis.com/maps/api/geocode/xml?address="+cCalle+" "+cLocalidad+" "+cProvincia+" "+cPais+"&sensor=false&key=AQUI_VA_LA_CLAVE"

aCoordenadas:={}

oFe:=CreateObject("MSXML2.ServerXmlHttp")
IF Hb_IsObject(oFe)
   oFe:Open("GET",cUrl,.F.)
   oFe:Send()
   cTexto1 := oFe:ResponseText

   Private oXmlDoc := TXmlDocument():New()
   Private oXmlNode

   oXMlDoc:READ(cTexto1)

   oXmlNode  := oXmlDoc:FindFirst("status")
   cValor    := oXmlNode:cData

   IF cValor="ZERO_RESULTS"
      MsgInfo("Atención: Dirección no encontrada, cambie los parámetros y vuelva a intentarlo.","Por favor verifique")
      Return aCoordenadas
   ENDIF

   IF cValor<>"OK"
      MsgInfo("Atención: Dirección no encontrada, cambie los parámetros y vuelva a intentarlo.","Por favor verifique")
      Return aCoordenadas
   ENDIF

   oXmlNode  := oXmlDoc:FindFirst("lat")
   cLatitud  := oXmlNode:cData

   oXmlNode  := oXmlDoc:FindFirst("lng")
   cLongitud := oXmlNode:cData

   AADD(aCoordenadas, cLatitud  )
   AADD(aCoordenadas, cLongitud )

ENDIF

Return aCoordenadas
//


Puede que google limite la cantidad de consultas permitidas. Para trabajar sin límite de consultas posiblemente tengas que generar una Key del Api de google maps.

Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 593
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Coordenadas geográficas

Postby jgabri » Fri Jun 12, 2020 3:00 pm

Gracias por la respuesta, pasa igual que con el código del master Navarro, algunas veces funciona y otras no, a ver si alguien nos puede ayudar ?

Un saludo,
Gabriel
jgabri
 
Posts: 19
Joined: Mon Jan 14, 2019 11:43 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 16 guests