PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → Procedures GoogleMaps and Uteis
Procedures GoogleMaps and Uteis
Débuté par adrianoboller, 18 sep. 2014 20:54 - Aucune réponse
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 18 septembre 2014 - 20:54
//////////////////////////////////////////////////////////////////////////////////////////
//Desenvolvido por: Adriano Boller
//18/09/2014
//adrianoboller@gmail.com skype adrianoboller
//br.linkedin.com/in/adrianoboller
//////////////////////////////////////////////////////////////////////////////////////////

//Procedures GoogleMaps and Uteis

PROCEDURE WS_CEP_Rota(LOCAL Origem, LOCAL Destino, LOCAL DebugSN)

//dr+goulin+1699+curitiba+PR
//jose+lopacinsk+500+curitiba+PR

IF Origem <> "" AND Destino = "" THEN
Destino = Origem
END

nVirgula is int = 0

//VARIAIVEIS
nID_Numero is int = 1
nID_Endereco is int = 1
nID_Bairro01 is int = 1
nID_Bairro02 is int = 1
nID_Cidade01 is int = 1
nID_Cidade02 is int = 1
nID_Estado is int = 1
nID_Pais is int = 1
nID_CEP is int = 1
nQTD_ADDRESS_COMPONENT is int = 0

//Limpa variaveis
//Endereço de Origem
GloVoceEnderecoLongo = ""
GloDestinoEnderecoLongo = ""
GloVoceLatitude = 0
GloVoceLongitude = 0
GloDestinoLatitude = 0
GloDestinoLongitude = 0

//Norte
GloLatitudeNorte = ""
GloLongitudeNorte = ""

//Sul
GloLatitudeSul = ""
GloLongitudeSul = ""

//Tempo
GloTempoDestino = ""
GloTempoDestinoText = ""
GloTempoTaxi = ""

//Distancia
GloDistanciaDestino = ""
GloDistanciaDestinoText = ""
GloDistanciaTaxi = ""

//Rota
//GloDebugSN, GloVoceEnderecoLongo, GloVoceEndereco, GloDestinoEnderecoLongo, GloDestinoEndereco, GloTempoDestino, GloTempoDestinoText, GloTempoTaxi, GloDistanciaDestino, GloDistanciaDestinoText, GloDistanciaTaxi, GloVoceLatitude, GloVoceLongitude, GloDestinoLatitude, GloDestinoLongitude, GloLatitudeNorte, GloLongitudeNorte, GloLatitudeSul, GloLongitudeSul is string

//Origem
LocEnderecoOrigem, LocEnderecoCurtoOrigem, LocNumeroOrigem, LocBairro01Origem, LocBairro02Origem, LocCidade01Origem, LocCidade02Origem, LocEstadoOrigem, LocPaisOrigem, LocCepOrigem, LocLatitudeOrigem, LocLongitudeOrigem, LocLatitudeOrigemNorte, LocLongitudeOrigemNorte, LocLatitudeOrigemSul, LocLongitudeOrigemSul is string = ""


//Destino
LocEnderecoDestino, LocEnderecoCurtoDestino, LocNumeroDestino, LocBairro01Destino, LocBairro02Destino, LocCidade01Destino, LocCidade02Destino, LocEstadoDestino, LocPaisDestino, LocCepDestino, LocLatitudeDestino, LocLongitudeDestino, LocLatitudeDestinoNorte, LocLongitudeDestinoNorte, LocLatitudeDestinoSul, LocLongitudeDestinoSul is string = ""


ok is boolean = False

IF Origem <> "" AND Destino <> ""

ChangeCharset(charsetOccidental) // SEM ACENTO

Origem = Replace(Origem," ","+")

Origem = WS_RemoveAcentos(Origem)

Destino = Replace(Destino," ","+")

Destino = WS_RemoveAcentos(Destino)

//Aceita endereço e lat e long na origem e destino
UrlRota is string = "http://maps.googleapis.com/maps/api/directions/xml…"
//LOOP (3)
ok = HTTPRequest(UrlRota)
IF ok = True THEN
//BREAK
END
//END

//Rota
IF ok = True THEN

XmlResultado is string = HTTPGetResult(httpResult)

IF PositionOccurrence(XmlResultado,"<status>OK</status>",firstRank,FromBeginning) > 0 OR PositionOccurrence(XmlResultado,"<status>ok</status>",firstRank,FromBeginning) > 0

IF XmlResultado <> "" THEN

sXmlResultadoRecorte is string = XmlResultado

//Xml No final
XmlDoc01 is xmlDocument
XmlDoc01 = XMLOpen(sXmlResultadoRecorte,fromString)


//Norte
GloLatitudeNorte = XmlDoc01.DirectionsResponse.route.bounds.northeast.lat
GloLongitudeNorte = XmlDoc01.DirectionsResponse.route.bounds.northeast.lng

//Sul
GloLatitudeSul = XmlDoc01.DirectionsResponse.route.bounds.southwest.lat
GloLongitudeSul = XmlDoc01.DirectionsResponse.route.bounds.southwest.lng


//IMPORTANTE LIMPAR O XML
XmlResultado = WS_RemoveAcentos(XmlResultado) // retirou caracteres especiais
XmlResultado = WS_RemoveCaracteresRota(XmlResultado) // retirou os steps

//Corta inicio
//////////////////////////////////////////////////////////////////////////////////////
nInicio is int = PositionOccurrence(XmlResultado,"</step>",lastRank,FromBeginning) + 7
XmlResultado = Middle(XmlResultado,nInicio,Length(XmlResultado))
XmlResultado = "<leg>"+XmlResultado

//Corta fim
nFim is int = PositionOccurrence(XmlResultado,"</leg>",firstRank,FromBeginning) + 5
XmlResultado = Middle(XmlResultado,1,nFim)
//////////////////////////////////////////////////////////////////////////////////////

//XML Leitura
XmlDoc02 is xmlDocument
XmlDoc02 = XMLOpen(XmlResultado,fromString)

//Endereço de Origem
GloVoceEnderecoLongo = XmlDoc02.leg.start_address
GloVoceEnderecoLongo = Capitalize(GloVoceEnderecoLongo)

//Endereço de Destino
GloDestinoEnderecoLongo = XmlDoc02.leg.end_address
GloDestinoEnderecoLongo = Capitalize(GloDestinoEnderecoLongo)

//Tempo
GloTempoDestino = XmlDoc02.leg.duration.value
GloTempoDestinoText = XmlDoc02.leg.duration.text
GloTempoTaxi = GloTempoDestino

//Distancia
GloDistanciaDestino = XmlDoc02.leg.distance.value
GloDistanciaDestinoText = XmlDoc02.leg.distance.text
GloDistanciaTaxi = GloDistanciaDestino

//Origem
IF XmlDoc02.leg.start_location.lat < 0 //AND gnPlane = 1 THEN //nao pode alterar no plano 2

GloVoceLatitude = XmlDoc02.leg.start_location.lat
LocLatitudeOrigem = GloVoceLatitude

GloVoceLongitude = XmlDoc02.leg.start_location.lng
LocLongitudeOrigem = GloVoceLongitude

END

//Destino
IF XmlDoc02.leg.end_location.lat < 0 THEN

GloDestinoLatitude = XmlDoc02.leg.end_location.lat

GloDestinoLongitude = XmlDoc02.leg.end_location.lng

END



END


ELSE
GloDestinoEndereco = ""
GloDestinoEnderecoLongo = ""

GloTempoDestino = ""
GloDistanciaDestino = ""
END

END


END

IF DebugSN = "S" OR GloDebugSN = "S" THEN
Info("Origem:",GloVoceEnderecoLongo,GloVoceEndereco,"","Destino:",GloDestinoEnderecoLongo,GloDestinoEndereco,"","Tempo: "+GloTempoDestino,"Distancia: "+GloDistanciaDestino,"","Latitude Origem: "+GloVoceLatitude,"Longitute Origem: "+GloVoceLongitude,"","Latitude Destino: "+GloDestinoLatitude,"Longitude Destino: "+GloDestinoLongitude)
Info("Origem:", LocEnderecoOrigem,"", LocEnderecoCurtoOrigem, LocNumeroOrigem, LocBairro01Origem, LocBairro02Origem, LocCidade01Origem, LocCidade02Origem, LocEstadoOrigem, LocPaisOrigem, LocCepOrigem,"", LocLatitudeOrigem, LocLongitudeOrigem,"", LocLatitudeOrigemNorte, LocLongitudeOrigemNorte, LocLatitudeOrigemSul, LocLongitudeOrigemSul)
Info("Destino:", LocEnderecoDestino,"", LocEnderecoCurtoDestino, LocNumeroDestino, LocBairro01Destino, LocBairro02Destino, LocCidade01Destino, LocCidade02Destino, LocEstadoDestino, LocPaisDestino, LocCepDestino,"", LocLatitudeDestino, LocLongitudeDestino,"", LocLatitudeDestinoNorte, LocLongitudeDestinoNorte, LocLatitudeDestinoSul, LocLongitudeDestinoSul)
END

//Exemplo: Curitiba - Parana --- ( - )
IF QtdeOccurrence(GloVoceEnderecoLongo," - ") = 1
GloVoceEndereco = ""
GloVoceNumero = ""
GloVoceEnderecoLongo = "ERRO"
END
IF QtdeOccurrence(GloDestinoEnderecoLongo," - ") = 1
GloDestinoEndereco = ""
GloDestinoNumero = ""
GloDestinoEnderecoLongo = "ERRO"
END
// if GloVoceEnderecoLongo = "ERRO" or GloDestinoEnderecoLongo = "ERRO"
// Info("Endereço inválido")
// END

RESULT(GloVoceEnderecoLongo)





--------------------------------------------------------------
--------------------------------------------------------------
--------------------------------------------------------------
//Desenvolvido por: Adriano Boller
//18/09/2014
//adrianoboller@gmail.com skype adrianoboller
//br.linkedin.com/in/adrianoboller

PROCEDURE WS_ExtrairEndereco(endereco)

IF GloDebugSN = "S" THEN
NextTitle("Extrair Endereço")
Info("WS_ExtrairEndereco",endereco)
END

sRua, sNumero, sBairro, sCidade, sEstado, sPais, sCep is string = ""

IF endereco <> ""

endereco = Replace(endereco,"State Of", "")

//Separador - das 3 colunas
arrSplitArray is array of strings
StringToArray(endereco, arrSplitArray," - ")
// FOR EACH string sExtracColunn, nRank of endereco SEPAREE by " - "
//
// add(arrSplitArray, sExtracColunn)
//
// END

IF ArrayCount(arrSplitArray) = 3

//Separador , da rua e numero
arrSplitRuaNumeroArray is array of strings
StringToArray(arrSplitArray[1], arrSplitRuaNumeroArray,",")
// FOR EACH STRING sExtracEnd, nRank of arrSplitArray[1] SEPAREE by ","
//
// Add(arrSplitRuaNumeroArray, sExtracEnd)
//
// END


IF ArrayCount(arrSplitRuaNumeroArray) = 1

sRua = arrSplitRuaNumeroArray[1];

sNumero = "0";

ELSE IF ArrayCount(arrSplitRuaNumeroArray) = 2

sRua = arrSplitRuaNumeroArray[1];

IF PositionOccurrence(arrSplitRuaNumeroArray[2],"-",firstRank) > 0 THEN

arrSplitNumeroArray is array of strings
StringToArray(arrSplitRuaNumeroArray[2], arrSplitNumeroArray,"-")

WHEN EXCEPTION IN
Media is int = (Val(arrSplitNumeroArray[1]) + Val(arrSplitNumeroArray[2])) / 2
DO
sNumero = 0
ELSE
sNumero = Media
END


ELSE

sNumero = arrSplitRuaNumeroArray[2];

END

END


/////
//Separador , do bairro e cidade
arrSplitBairroCidadeArray is array of strings
StringToArray(arrSplitArray[2], arrSplitBairroCidadeArray,",")
// FOR EACH STRING sExtracBairroCidade, nRank of arrSplitArray[2] SEPAREE by ","
//
// Add(arrSplitBairroCidadeArray, sExtracBairroCidade)
//
// END

IF ArrayCount(arrSplitBairroCidadeArray) = 2

sBairro =arrSplitBairroCidadeArray[1];
sCidade = arrSplitBairroCidadeArray[2];

ELSE IF (ArrayCount(arrSplitBairroCidadeArray) = 3)

sBairro = arrSplitBairroCidadeArray[1];
sCidade = arrSplitBairroCidadeArray[3];

ELSE

sBairro = "";
sCidade = "";

END

//Separador , do bairro e cidade
arrSplitEstadoCepPaisArray is array of strings
StringToArray(arrSplitArray[3], arrSplitEstadoCepPaisArray,",")
// FOR EACH STRING sExtracEstadoCepPais, nRank of arrSplitArray[3] SEPAREE by ","
//
// Add(arrSplitEstadoCepPaisArray,sExtracEstadoCepPais)
//
// END

IF ArrayCount(arrSplitEstadoCepPaisArray) = 2

sEstado = arrSplitEstadoCepPaisArray[1];
sPais = arrSplitEstadoCepPaisArray[2];
sCep = ""

ELSE IF ArrayCount(arrSplitEstadoCepPaisArray)= 3

sEstado = arrSplitEstadoCepPaisArray[1];
sCep = arrSplitEstadoCepPaisArray[2];
sPais = arrSplitEstadoCepPaisArray[3];
ELSE

sEstado = ""
sCep = ""
sPais = ""

END

END

END

//Replace Estado
sEstado = Capitalize(Clip(sEstado))
IF sEstado <> ""

IF sEstado = "Acre" THEN
sEstado = "AC"
ELSE IF sEstado = "Alagoas" THEN
sEstado = "AL"
ELSE IF sEstado = "Amazonas" THEN
sEstado = "AM"
ELSE IF sEstado = "Amapa" THEN
sEstado = "AP"
ELSE IF sEstado = "Bahia" THEN
sEstado = "BA"
ELSE IF sEstado = "Ceara" THEN
sEstado = "CE"
ELSE IF sEstado = "Distrito Federal" THEN
sEstado = "DF"
ELSE IF sEstado = "Espirito Santo" THEN
sEstado = "ES"
ELSE IF sEstado = "Goias" THEN
sEstado = "GO"
ELSE IF sEstado = "Maranhao" THEN
sEstado = "MA"
ELSE IF sEstado = "Minas Gerais" THEN
sEstado = "MG"
ELSE IF sEstado = "Mato Grosso do Sul" THEN
sEstado = "MS"
ELSE IF sEstado = "Mato Grosso" THEN
sEstado = "MT"
ELSE IF sEstado = "Parana" THEN
sEstado = "PR"
ELSE IF sEstado = "Para" THEN
sEstado = "PA"
ELSE IF sEstado = "Paraiba" THEN
sEstado = "PB"
ELSE IF sEstado = "Pernambuco" THEN
sEstado = "PE"
ELSE IF sEstado = "Piaui" THEN
sEstado = "PI"
ELSE IF sEstado = "Rio de Janeiro" THEN
sEstado = "RJ"
ELSE IF sEstado = "Rio Grande DO Norte" THEN
sEstado = "RN"
ELSE IF sEstado = "Rondonia" THEN
sEstado = "RO"
ELSE IF sEstado = "Roraima" THEN
sEstado = "RR"
ELSE IF sEstado = "Rio Grande DO Sul" THEN
sEstado = "RS"
ELSE IF sEstado = "Santa Catarina" THEN
sEstado = "SC"
ELSE IF sEstado = "Sergipe" THEN
sEstado = "SE"
ELSE IF sEstado = "Sao Paulo" THEN
sEstado = "SP"
ELSE IF sEstado = "Tocantins" THEN
sEstado = "TO"
END

END


arrResult is array of strings

Add(arrResult, Capitalize(Clip(sRua)))
Add(arrResult, Clip(sNumero))
Add(arrResult, Capitalize(Clip(sBairro)))
Add(arrResult, Capitalize(Clip(sCidade)))
Add(arrResult, Capitalize(Clip(sEstado)))
Add(arrResult, Clip(sCep))
Add(arrResult, Capitalize(Clip(sPais)))

IF GloDebugSN = "S" THEN
NextTitle("Extrair Endereço")
Info(arrResult[1],arrResult[2],arrResult[3],arrResult[4],arrResult[5],arrResult[6],arrResult[7])
END

RESULT arrResult


-------------------------------------------------------------------
-------------------------------------------------------------------
-------------------------------------------------------------------
//Desenvolvido por: Adriano Boller
//18/09/2014
//adrianoboller@gmail.com skype adrianoboller
//br.linkedin.com/in/adrianoboller

PROCEDURE WS_RemoveAcentos(LOCAL Texto)

ChangeCharset(charsetOccidental) // SEM ACENTO

nTamanho is int = Length(Texto)

//VERIFICA
Texto = Replace(Texto,"ã","a")
Texto = Replace(Texto,"á","a")
Texto = Replace(Texto,"é","e")
Texto = Replace(Texto,"ê","e")
Texto = Replace(Texto,"Ê","e")
Texto = Replace(Texto,"A","A")
Texto = Replace(Texto,"A£","A")
Texto = Replace(Texto,"á","A")
Texto = Replace(Texto,"â","A")
Texto = Replace(Texto,"Ã","A")
Texto = Replace(Texto,"Ê","E")
Texto = Replace(Texto,"é","E")
Texto = Replace(Texto,"ê","E")
Texto = Replace(Texto,"í","I")
Texto = Replace(Texto,"ô","O")
Texto = Replace(Texto,"Aµ","O")
Texto = Replace(Texto,"ó","O")
Texto = Replace(Texto,"A“","O")
Texto = Replace(Texto,"Aº","U")
Texto = Replace(Texto,"ç","C")
Texto = Replace(Texto,"Ç","C")
Texto = Replace(Texto,"ãO","AO")
Texto = Replace(Texto,"É","E")
Texto = Replace(Texto,"Ã%","E")
Texto = Replace(Texto,"A£","a")
Texto = Replace(Texto,"£","")
Texto = Replace(Texto,"","")
Texto = Replace(Texto,"¡","")
Texto = Replace(Texto,"¢","")
Texto = Replace(Texto,"õ","O")
Texto = Replace(Texto,"µ","O")
Texto = Replace(Texto,"Áº","u")
Texto = Replace(Texto,"Aº","u")
Texto = Replace(Texto,"º","u")

Texto = Replace(Texto,"ã","a")
Texto = Replace(Texto,"á","a")
Texto = Replace(Texto,"à","a")
Texto = Replace(Texto,"â","a")
Texto = Replace(Texto,"ä","a")

Texto = Replace(Texto,"~e","e")
Texto = Replace(Texto,"é","e")
Texto = Replace(Texto,"è","e")
Texto = Replace(Texto,"ê","e")
Texto = Replace(Texto,"ë","e")

Texto = Replace(Texto,"~i","i")
Texto = Replace(Texto,"í","i")
Texto = Replace(Texto,"ì","i")
Texto = Replace(Texto,"î","i")
Texto = Replace(Texto,"ï","i")

Texto = Replace(Texto,"õ","o")
Texto = Replace(Texto,"ó","o")
Texto = Replace(Texto,"ò","o")
Texto = Replace(Texto,"ô","o")
Texto = Replace(Texto,"ö","o")

Texto = Replace(Texto,"~u","u")
Texto = Replace(Texto,"ú","u")
Texto = Replace(Texto,"ù","u")
Texto = Replace(Texto,"û","u")
Texto = Replace(Texto,"ü","u")

Texto = Replace(Texto,"ç","c")
Texto = Replace(Texto,"Ç","C")

Texto = Replace(Texto,"Ã","A")
Texto = Replace(Texto,"Á","A")
Texto = Replace(Texto,"À","A")
Texto = Replace(Texto,"Â","A")
Texto = Replace(Texto,"Ä","A")

Texto = Replace(Texto,"~E","E")
Texto = Replace(Texto,"É","E")
Texto = Replace(Texto,"È","E")
Texto = Replace(Texto,"Ê","E")
Texto = Replace(Texto,"Ë","E")

Texto = Replace(Texto,"~I","I")
Texto = Replace(Texto,"Í","I")
Texto = Replace(Texto,"Ì","I")
Texto = Replace(Texto,"Î","I")
Texto = Replace(Texto,"Ï","I")

Texto = Replace(Texto,"Õ","O")
Texto = Replace(Texto,"Ó","O")
Texto = Replace(Texto,"Ò","O")
Texto = Replace(Texto,"Ô","O")
Texto = Replace(Texto,"Ö","O")

Texto = Replace(Texto,"~U","U")
Texto = Replace(Texto,"Ú","U")
Texto = Replace(Texto,"Ù","U")
Texto = Replace(Texto,"Û","U")
Texto = Replace(Texto,"Ü","U")

//Remove caracteres htmls
Texto = Replace(Texto,"&lt;","") //html
Texto = Replace(Texto,"&gt;","") //html
Texto = Replace(Texto,"&quot;","") //html
Texto = Replace(Texto,"&amp;","") //html
Texto = Replace(Texto,"&OElig;","") //html
Texto = Replace(Texto,"&oelig;","") //html
Texto = Replace(Texto,"&Scaron;","") //html
Texto = Replace(Texto,"&scaron;","") //html
Texto = Replace(Texto,"&Yuml;","") //html
Texto = Replace(Texto,"&circ;","") //html
Texto = Replace(Texto,"&tilde;","") //html
Texto = Replace(Texto,"&ensp;","") //html
Texto = Replace(Texto,"&emsp;","") //html
Texto = Replace(Texto,"&thinsp;","") //html
Texto = Replace(Texto,"&zwnj;","") //html
Texto = Replace(Texto,"&zwj;","") //html
Texto = Replace(Texto,"&lrm;","") //html
Texto = Replace(Texto,"&rlm;","") //html
Texto = Replace(Texto,"&ndash;","") //html
Texto = Replace(Texto,"&mdash;","") //html
Texto = Replace(Texto,"&lsquo;","") //html
Texto = Replace(Texto,"&rsquo;","") //html
Texto = Replace(Texto,"&sbquo;","") //html
Texto = Replace(Texto,"&ldquo;","") //html
Texto = Replace(Texto,"&rdquo;","") //html
Texto = Replace(Texto,"&bdquo;","") //html
Texto = Replace(Texto,"&dagger;","") //html
Texto = Replace(Texto,"&Dagger;","") //html
Texto = Replace(Texto,"&permil;","") //html
Texto = Replace(Texto,"&lsaquo;","") //html
Texto = Replace(Texto,"&rsaquo;","") //html
Texto = Replace(Texto,"&euro;","") //html

Texto = WS_RemoveCaractAscII(Texto)

Texto = Capitalize(Texto)

RESULT(Texto)


-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
//Desenvolvido por: Adriano Boller
//18/09/2014
//adrianoboller@gmail.com skype adrianoboller
//br.linkedin.com/in/adrianoboller

PROCEDURE WS_RemoveCaractAscII(LOCAL Texto is string)

nTotal is int = Length(Texto)
nPos01 is int = 0
Busca is string = ""

Texto = Replace(Texto,"<?xml version="+Charact(34)+"1.0"+Charact(34)+" encoding="+Charact(34)+"utf-8"+Charact(34)+"?>","<?xml version="+Charact(34)+"1.0"+Charact(34)+"?>")

sAZ09 is string = CR+"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[ ]0123456789'&*()_+=-,.!@#$%?>.<:{}|/\"+Charact(34)

Texto = Upper(Texto)

IF Texto <> "" AND sAZ09 <> Null THEN

LOOP (nTotal)

nPos01 += 1

IF nPos01 > 0 THEN

Busca = Texto[[nPos01]]

IF PositionOccurrence(sAZ09,Busca,firstRank,FromBeginning) = 0 AND sAZ09 <> Null AND Busca <> Null THEN
Texto[[nPos01]] = ""
END

END

END

END

RESULT(Texto)


--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
//Desenvolvido por: Adriano Boller
//18/09/2014
//adrianoboller@gmail.com skype adrianoboller
//br.linkedin.com/in/adrianoboller

PROCEDURE Capitalize(LOCAL Texto)

ChangeCharset(charsetOccidental) // SEM ACENTO

IF Texto <> Null AND Texto <> ""
Texto = NoAccent(Texto)

Texto = Lower(Texto)

Texto = Upper(Middle(Texto,1,1)) + Middle(Texto,2,Length(Texto))

nEspaco01 is int = PositionOccurrence(Texto," ",firstRank,FromBeginning) + 1
IF nEspaco01 > 1 THEN
Texto = Middle(Texto,1,nEspaco01-1) + Upper(Middle(Texto,nEspaco01,1)) + Middle(Texto,nEspaco01+1,Length(Texto))
END


TOT is int = 0
POS1, POS2, POS3 is int = 0
TOT = Length(Texto)
LOOP (TOT)
POS1 +=1
POS2 = POS1 + 1
POS3 = POS2 + 1
IF Middle(Texto,POS1,1) = " " AND Middle(Texto,POS2,1) <> " "
Texto = Middle(Texto,1,POS1) + Upper(Middle(Texto,POS2,1)) + Middle(Texto,POS3,TOT)
END
END


Texto = Replace(Texto," Da ", " da ")

Texto = Replace(Texto," Das ", " das ")

Texto = Replace(Texto," De ", " de ")

Texto = Replace(Texto," Do ", " do ")

Texto = Replace(Texto," Dos ", " dos ")

END

RESULT(Texto)


-------------------------------------------------------------------------
-------------------------------------------------------------------------
-------------------------------------------------------------------------
//Desenvolvido por: Adriano Boller
//18/09/2014
//adrianoboller@gmail.com skype adrianoboller
//br.linkedin.com/in/adrianoboller

PROCEDURE Clip(LOCAL Texto)

Texto = NoSpace(Texto)

RESULT(Texto)

-------------------------------------------------------------------------
-------------------------------------------------------------------------
-------------------------------------------------------------------------
//Desenvolvido por: Adriano Boller
//18/09/2014
//adrianoboller@gmail.com skype adrianoboller
//br.linkedin.com/in/adrianoboller

PROCEDURE WS_CEP_EnderecoDasCoordenadas(LOCAL pLatitude, LOCAL pLogitude, LOCAL ODT, LOCAL DebugSN)

IF GloDebugSN = "S" THEN
Info("WS_CEP_EnderecoDasCoordenadas")
DebugSN = "S"
END

NextTitle("Atenção")

ok is boolean = False

GloEnderecoOK = False

Endereco, RuaLatitude, RuaLongitude is string = ""

IF pLatitude <> 0 AND pLogitude <> 0 AND pLatitude <> Null AND pLogitude <> Null

ExcedeuConsultas01 is string = "ZERO_RESULTS"

ExcedeuConsultas02 is string = "OVER_QUERY_LIMIT"

//Url is string = "http://maps.googleapis.com/maps/api/geocode/json…=" + pLatitude + "," + pLogitude + "&sensor=true"

Url is string = "http://maps.googleapis.com/maps/api/geocode/json…=" + pLatitude + "," + pLogitude + "&sensor=false"

IF DebugSN = "S"
Info("01",Url)
END

HTTPTimeOut(GloHTTPTimeOut)

//loop (3)
ok = HTTPRequest(Url)
IF ok = True THEN
//BREAK
END
//END

ChangeCharset(charsetOccidental) // SEM ACENTO

RetJson is string = HTTPGetResult(httpResult)

IF DebugSN = "S"
Info(Url, pLatitude, pLogitude, RetJson)
END

// fSaveText("c:\json.txt",RetJson)
// Erro01 = PositionOccurrence(RetJson,ExcedeuConsultas01,firstRank,IgnoreCase)
// Erro02 = PositionOccurrence(RetJson,ExcedeuConsultas02,firstRank,IgnoreCase)
// Erro03 = PositionOccurrence(RetJson,ExcedeuConsultas03,firstRank,IgnoreCase)

IF PositionOccurrence(RetJson,ExcedeuConsultas01,firstRank,IgnoreCase) > 0 OR...
PositionOccurrence(RetJson,ExcedeuConsultas02,firstRank,IgnoreCase) > 0 OR...
PositionOccurrence(Upper(RetJson),"ZERO",firstRank,IgnoreCase) > 0 OR...
PositionOccurrence(Upper(RetJson),"OVER",firstRank,IgnoreCase) > 0

RetJson = "ERRO"
GloEnderecoOK = False

ELSE IF RetJson <> "ERRO"

GloEnderecoOK = True

TagEnd is string = """formatted_address"" :"

i is int = PositionOccurrence(RetJson, TagEnd, firstRank, IgnoreCase ) + Length(TagEnd)

//Pega endereço (entre duas aspas)

Endereco = ExtractString(RetJson[[i TO]],2,"""")

Endereco = WS_RemoveAcentos(Endereco)




TagLat is string = """lat"" :"

i = PositionOccurrence(RetJson, TagLat, firstRank, IgnoreCase ) + Length(TagLat)

RuaLatitude = ExtractString(RetJson[[i TO]],2,"""")




Taglng is string = """lng"" :"

i = PositionOccurrence(RetJson, Taglng, firstRank, IgnoreCase ) + Length(Taglng)

RuaLongitude = ExtractString(RetJson[[i TO]],2,"""")


//info("Json",Endereco, RuaLatitude + "," + RuaLongitude , pLatitude + "," + pLogitude )

END


IF Endereco = "" OR RetJson = "ERRO" THEN

//Url = "http://maps.googleapis.com/maps/api/geocode/xml…=" + pLatitude + "," + pLogitude + "&sensor=true"
Url = "http://maps.googleapis.com/maps/api/geocode/xml…=" + pLatitude + "," + pLogitude + "&sensor=false"

IF DebugSN = "S"
Info("02",Url)
END

HTTPTimeOut(GloHTTPTimeOut)

//LOOP (3)
ok = HTTPRequest(Url)
IF ok = True THEN
//BREAK
END
//END

RetXml is string = HTTPGetResult(httpResult)

IF DebugSN = "S"
Info("Xml:",RetXml)
END

//<formatted_address>Rua Professora Antonia Reginato Vianna, 442 - Capão da Imbuia, Cajuru, Curitiba - PR, 82810-300, Brasil</formatted_address>

IF PositionOccurrence(RetXml,"<formatted_address>",firstRank) > 0 THEN

GloEnderecoOK = True

//Endereço
nPosicaoInicial is int = PositionOccurrence(RetXml,"<formatted_address>",firstRank) + Length("<formatted_address>")
nPosicaoFinal is int = PositionOccurrence(RetXml,"</formatted_address>",firstRank) + Length("</formatted_address>")
nPosicaoFinal = nPosicaoFinal - nPosicaoInicial
Endereco = Middle(RetXml,nPosicaoInicial,nPosicaoFinal)

// //Latitude da Rua
// nPosicaoInicial2 is int = PositionOccurrence(RetXml,"<lat>",firstRank) + Length("<lat>")
// nPosicaoFinal2 is int = PositionOccurrence(RetXml,"</lat>",firstRank) + Length("</lat>")
// nPosicaoFinal = nPosicaoFinal2 - nPosicaoInicial2
// RuaLatitude = Middle(RetXml,nPosicaoInicial2,nPosicaoFinal2)
//
// //Latitude da Rua
// nPosicaoInicial3 is int = PositionOccurrence(RetXml,"<lng>",firstRank) + Length("<lng>")
// nPosicaoFinal3 is int = PositionOccurrence(RetXml,"</lng>",firstRank) + Length("</lng>")
// nPosicaoFinal = nPosicaoFinal3 - nPosicaoInicial3
// RuaLongitude = Middle(RetXml,nPosicaoInicial3,nPosicaoFinal3)
//
// Info("Xml",Endereco, RuaLatitude + "," + RuaLongitude , pLatitude + "," + pLogitude )

ELSE
GloEnderecoOK = False
RetJson = "ERRO"
END

END

IF Upper(Endereco) = "ERRO" AND ODT = "O" THEN
GloEnderecoOK = False
RetJson = "ERRO"
END


END

IF RetJson <> "ERRO"
IF ODT = "O"
GloVoceEnderecoLongo = Endereco
GloVoceEndereco = Endereco
// GloVocelatitude = RuaLatitude
// GloVoceLongitude = RuaLongitude
ELSE IF ODT = "D"
GloDestinoEnderecoLongo = Endereco
GloDestinoEndereco = Endereco
// GloDestinoLatitude = RuaLatitude
// GloDestinoLongitude = RuaLongitude
ELSE IF ODT = "T"
GloTaxiEnderecoLongo = Endereco
GloTaxiEndereco = Endereco
// GloDestinoLatitude = RuaLatitude
// GloDestinoLongitude = RuaLongitude
END
END

IF DebugSN = "S"
Info("03",Endereco)
END

IF RetJson = "ERRO" THEN
Popup(GloMsgSemInternet,"L")
END

//Endereço inválido
//Exemplo: Curitiba - Parana --- ( - )
IF QtdeOccurrence(GloVoceEnderecoLongo," - ") = 1
Endereco = ""
GloVoceEnderecoLongo = "ERRO"
GloVoceEndereco = "ERRO"
GloVoceNumero = 0
//Info("Endereço inválido",GloVoceEnderecoLongo)
END
IF QtdeOccurrence(GloDestinoEnderecoLongo," - ") = 1
Endereco = ""
GloDestinoEnderecoLongo = "ERRO"
GloDestinoEndereco = "ERRO"
GloDestinoNumero = 0
//Info("Endereço inválido",GloDestinoEnderecoLongo)
END

RESULT (Endereco)