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:49 - 1 réponse
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 18 septembre 2014 - 20:49
//////////////////////////////////////////////////////////////////////////////////////////
//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)
Membre enregistré
1 298 messages
Popularité : +20 (72 votes)
Posté le 21 septembre 2014 - 11:10
Bonjour Adriano,, Hola Adriano

Peux tu nous expliquer un peu ce que fait le code que tu nous partage

Puedes explicar nos le que hacer el codigo fuente que comparte con nosotros ?

Pour les francophile voici son code traduit en français

//Posté le 18 septembre 2014 - 20:49
//////////////////////////////////////////////////////////////////////////////////////////
//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

SI Origem <> "" ET Destino = "" ALORS
Destino = Origem
FIN

nVirgula est entier = 0

//VARIAIVEIS
nID_Numero est entier = 1
nID_Endereco est entier = 1
nID_Bairro01 est entier = 1
nID_Bairro02 est entier = 1
nID_Cidade01 est entier = 1
nID_Cidade02 est entier = 1
nID_Estado est entier = 1
nID_Pais est entier = 1
nID_CEP est entier = 1
nQTD_ADDRESS_COMPONENT est entier = 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 est chaîne = ""


//Destino
LocEnderecoDestino, LocEnderecoCurtoDestino, LocNumeroDestino, LocBairro01Destino, LocBairro02Destino, LocCidade01Destino, LocCidade02Destino, LocEstadoDestino, LocPaisDestino, LocCepDestino, LocLatitudeDestino, LocLongitudeDestino, LocLatitudeDestinoNorte, LocLongitudeDestinoNorte, LocLatitudeDestinoSul, LocLongitudeDestinoSul est chaîne = ""


ok est booléen = Faux

SI Origem <> "" ET Destino <> ""

ChangeAlphabet(alphabetOccidental) // SEM ACENTO

Origem = Remplace(Origem," ","+")

Origem = WS_RemoveAcentos(Origem)

Destino = Remplace(Destino," ","+")

Destino = WS_RemoveAcentos(Destino)

//Aceita endereço e lat e long na origem e destino
UrlRota est chaîne = "http://maps.googleapis.com/maps/api/directions/xml…"
//LOOP (3)
ok = HTTPRequête(UrlRota)
SI ok = Vrai ALORS
//BREAK
FIN
//END

//Rota
SI ok = Vrai ALORS

XmlResultado est chaîne = HTTPDonneRésultat(httpRésultat)

SI PositionOccurrence(XmlResultado,"<status>OK</status>",rangPremier,DepuisDébut) > 0 OU PositionOccurrence(XmlResultado,"<status>ok</status>",rangPremier,DepuisDébut) > 0

SI XmlResultado <> "" ALORS

sXmlResultadoRecorte est chaîne = XmlResultado

//Xml No final
XmlDoc01 est un XMLDocument
XmlDoc01 = XMLOuvre(sXmlResultadoRecorte,depuisChaîne)


//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 est entier = PositionOccurrence(XmlResultado,"</step>",rangDernier,DepuisDébut) + 7
XmlResultado = Milieu(XmlResultado,nInicio,Taille(XmlResultado))
XmlResultado = "<leg>"+XmlResultado

//Corta fim
nFim est entier = PositionOccurrence(XmlResultado,"</leg>",rangPremier,DepuisDébut) + 5
XmlResultado = Milieu(XmlResultado,1,nFim)
//////////////////////////////////////////////////////////////////////////////////////

//XML Leitura
XmlDoc02 est un XMLDocument
XmlDoc02 = XMLOuvre(XmlResultado,depuisChaîne)

//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
SI 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

FIN

//Destino
SI XmlDoc02.leg.end_location.lat < 0 ALORS

GloDestinoLatitude = XmlDoc02.leg.end_location.lat

GloDestinoLongitude = XmlDoc02.leg.end_location.lng

FIN



FIN


SINON
GloDestinoEndereco = ""
GloDestinoEnderecoLongo = ""

GloTempoDestino = ""
GloDistanciaDestino = ""
FIN

FIN


FIN

SI DebugSN = "S" OU GloDebugSN = "S" ALORS
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)
FIN

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

RENVOYER(GloVoceEnderecoLongo)




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

Procedure WS_ExtrairEndereco(Endereco)

SI GloDebugSN = "S" ALORS
TitreSuivant("Extrair Endereço")
Info("WS_ExtrairEndereco",Endereco)
FIN

sRua, sNumero, sBairro, sCidade, sEstado, sPais, sCep est chaîne = ""

SI Endereco <> ""

Endereco = Remplace(Endereco,"State Of", "")

//Separador - das 3 colunas
arrSplitArray est tableau de chaînes
ChaîneVersTableau(Endereco, arrSplitArray," - ")
//FOR EACH string sExtracColunn, nRank of endereco SEPAREE by " - "
//
//add(arrSplitArray, sExtracColunn)
//
//END

SI TableauOccurrence(arrSplitArray) = 3

//Separador , da rua e numero
arrSplitRuaNumeroArray est tableau de chaînes
ChaîneVersTableau(arrSplitArray[1], arrSplitRuaNumeroArray,",")
//FOR EACH STRING sExtracEnd, nRank of arrSplitArray[1] SEPAREE by ","
//
//Add(arrSplitRuaNumeroArray, sExtracEnd)
//
//END


SI TableauOccurrence(arrSplitRuaNumeroArray) = 1

sRua = arrSplitRuaNumeroArray[1];

sNumero = "0";

SINON SI TableauOccurrence(arrSplitRuaNumeroArray) = 2

sRua = arrSplitRuaNumeroArray[1];

SI PositionOccurrence(arrSplitRuaNumeroArray[2],"-",rangPremier) > 0 ALORS

arrSplitNumeroArray est tableau de chaînes
ChaîneVersTableau(arrSplitRuaNumeroArray[2], arrSplitNumeroArray,"-")

QUAND EXCEPTION DANS
Media est entier = (Val(arrSplitNumeroArray[1]) + Val(arrSplitNumeroArray[2])) / 2
FAIRE
sNumero = 0
SINON
sNumero = Media
FIN


SINON

sNumero = arrSplitRuaNumeroArray[2];

FIN

FIN


/////
//Separador , do bairro e cidade
arrSplitBairroCidadeArray est tableau de chaînes
ChaîneVersTableau(arrSplitArray[2], arrSplitBairroCidadeArray,",")
//FOR EACH STRING sExtracBairroCidade, nRank of arrSplitArray[2] SEPAREE by ","
//
//Add(arrSplitBairroCidadeArray, sExtracBairroCidade)
//
//END

SI TableauOccurrence(arrSplitBairroCidadeArray) = 2

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

SINON SI (TableauOccurrence(arrSplitBairroCidadeArray) = 3)

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

SINON

sBairro = "";
sCidade = "";

FIN

//Separador , do bairro e cidade
arrSplitEstadoCepPaisArray est tableau de chaînes
ChaîneVersTableau(arrSplitArray[3], arrSplitEstadoCepPaisArray,",")
//FOR EACH STRING sExtracEstadoCepPais, nRank of arrSplitArray[3] SEPAREE by ","
//
//Add(arrSplitEstadoCepPaisArray,sExtracEstadoCepPais)
//
//END

SI TableauOccurrence(arrSplitEstadoCepPaisArray) = 2

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

SINON SI TableauOccurrence(arrSplitEstadoCepPaisArray)= 3

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

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

FIN

FIN

FIN

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

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

FIN


arrResult est tableau de chaînes

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

SI GloDebugSN = "S" ALORS
TitreSuivant("Extrair Endereço")
Info(arrResult[1],arrResult[2],arrResult[3],arrResult[4],arrResult[5],arrResult[6],arrResult[7])
FIN

RENVOYER arrResult





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

Procedure WS_RemoveAcentos(LOCAL Texto)

ChangeAlphabet(alphabetOccidental) // SEM ACENTO

nTamanho est entier = Taille(Texto)

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

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

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

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

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

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

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

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

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

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

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

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

//Remove caracteres htmls
Texto = Remplace(Texto,"<","") //html
Texto = Remplace(Texto,">","") //html
Texto = Remplace(Texto,""","") //html
Texto = Remplace(Texto,"&","") //html
Texto = Remplace(Texto,"Œ","") //html
Texto = Remplace(Texto,"œ","") //html
Texto = Remplace(Texto,"Š","") //html
Texto = Remplace(Texto,"š","") //html
Texto = Remplace(Texto,"Ÿ","") //html
Texto = Remplace(Texto,"ˆ","") //html
Texto = Remplace(Texto,"˜","") //html
Texto = Remplace(Texto," ","") //html
Texto = Remplace(Texto," ","") //html
Texto = Remplace(Texto," ","") //html
Texto = Remplace(Texto,"‌","") //html
Texto = Remplace(Texto,"‍","") //html
Texto = Remplace(Texto,"‎","") //html
Texto = Remplace(Texto,"‏","") //html
Texto = Remplace(Texto,"–","") //html
Texto = Remplace(Texto,"—","") //html
Texto = Remplace(Texto,"‘","") //html
Texto = Remplace(Texto,"’","") //html
Texto = Remplace(Texto,"‚","") //html
Texto = Remplace(Texto,"“","") //html
Texto = Remplace(Texto,"”","") //html
Texto = Remplace(Texto,"„","") //html
Texto = Remplace(Texto,"†","") //html
Texto = Remplace(Texto,"‡","") //html
Texto = Remplace(Texto,"‰","") //html
Texto = Remplace(Texto,"‹","") //html
Texto = Remplace(Texto,"›","") //html
Texto = Remplace(Texto,"€","") //html

Texto = WS_RemoveCaractAscII(Texto)

Texto = Capitalize(Texto)

RENVOYER(Texto)



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

Procedure WS_RemoveCaractAscII(LOCAL Texto est chaîne)

nTotal est entier = Taille(Texto)
nPos01 est entier = 0
Busca est chaîne = ""

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

sAZ09 est chaîne = RC+"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[ ]0123456789'&*()_+=-,.!@#$%?>.<:{}|/\"+Caract(34)

Texto = Majuscule(Texto)

SI Texto <> "" ET sAZ09 <> Null ALORS

BOUCLE (nTotal)

nPos01 += 1

SI nPos01 > 0 ALORS

Busca = Texto[[nPos01]]

SI PositionOccurrence(sAZ09,Busca,rangPremier,DepuisDébut) = 0 ET sAZ09 <> Null ET Busca <> Null ALORS
Texto[[nPos01]] = ""
FIN

FIN

FIN

FIN

RENVOYER(Texto)


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

PROCEDURE Capitalize(LOCAL Texto)

ChangeAlphabet(alphabetOccidental) // SEM ACENTO

SI Texto <> Null ET Texto <> ""
Texto = SansAccent(Texto)

Texto = Minuscule(Texto)

Texto = Majuscule(Milieu(Texto,1,1)) + Milieu(Texto,2,Taille(Texto))

nEspaco01 est entier = PositionOccurrence(Texto," ",rangPremier,DepuisDébut) + 1
SI nEspaco01 > 1 ALORS
Texto = Milieu(Texto,1,nEspaco01-1) + Majuscule(Milieu(Texto,nEspaco01,1)) + Milieu(Texto,nEspaco01+1,Taille(Texto))
FIN


TOT est entier = 0
POS1, POS2, POS3 est entier = 0
TOT = Taille(Texto)
BOUCLE (TOT)
POS1 +=1
POS2 = POS1 + 1
POS3 = POS2 + 1
SI Milieu(Texto,POS1,1) = " " ET Milieu(Texto,POS2,1) <> " "
Texto = Milieu(Texto,1,POS1) + Majuscule(Milieu(Texto,POS2,1)) + Milieu(Texto,POS3,TOT)
FIN
FIN


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

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

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

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

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

FIN

RENVOYER(Texto)



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

Procedure Clip(LOCAL Texto)

Texto = SansEspace(Texto)

RENVOYER(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)

SI GloDebugSN = "S" ALORS
Info("WS_CEP_EnderecoDasCoordenadas")
DebugSN = "S"
FIN

TitreSuivant("Atenção")

ok est booléen = Faux

GloEnderecoOK = Faux

Endereco, RuaLatitude, RuaLongitude est chaîne = ""

SI pLatitude <> 0 ET pLogitude <> 0 ET pLatitude <> Null ET pLogitude <> Null

ExcedeuConsultas01 est chaîne = "ZERO_RESULTS"

ExcedeuConsultas02 est chaîne = "OVER_QUERY_LIMIT"

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

Url est chaîne = "http://maps.googleapis.com/maps/api/geocode/json…=" + pLatitude + "," + pLogitude + "&sensor=false"

SI DebugSN = "S"
Info("01",Url)
FIN

HTTPTimeOut(GloHTTPTimeOut)

//loop (3)
ok = HTTPRequête(Url)
SI ok = Vrai ALORS
//BREAK
FIN
//END

ChangeAlphabet(alphabetOccidental) // SEM ACENTO

RetJson est chaîne = HTTPDonneRésultat(httpRésultat)

SI DebugSN = "S"
Info(Url, pLatitude, pLogitude, RetJson)
FIN

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

SI PositionOccurrence(RetJson,ExcedeuConsultas01,rangPremier,SansCasse) > 0 OU...
PositionOccurrence(RetJson,ExcedeuConsultas02,rangPremier,SansCasse) > 0 OU...
PositionOccurrence(Majuscule(RetJson),"ZERO",rangPremier,SansCasse) > 0 OU...
PositionOccurrence(Majuscule(RetJson),"OVER",rangPremier,SansCasse) > 0

RetJson = "ERRO"
GloEnderecoOK = Faux

SINON SI RetJson <> "ERRO"

GloEnderecoOK = Vrai

TagEnd est chaîne = """formatted_address"" :"

i est entier = PositionOccurrence(RetJson, TagEnd, rangPremier, SansCasse ) + Taille(TagEnd)

//Pega endereço (entre duas aspas)

Endereco = ExtraitChaîne(RetJson[[i A]],2,"""")

Endereco = WS_RemoveAcentos(Endereco)




TagLat est chaîne = """lat"" :"

i = PositionOccurrence(RetJson, TagLat, rangPremier, SansCasse ) + Taille(TagLat)

RuaLatitude = ExtraitChaîne(RetJson[[i A]],2,"""")




Taglng est chaîne = """lng"" :"

i = PositionOccurrence(RetJson, Taglng, rangPremier, SansCasse ) + Taille(Taglng)

RuaLongitude = ExtraitChaîne(RetJson[[i A]],2,"""")


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

FIN


SI Endereco = "" OU RetJson = "ERRO" ALORS

//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"

SI DebugSN = "S"
Info("02",Url)
FIN

HTTPTimeOut(GloHTTPTimeOut)

//LOOP (3)
ok = HTTPRequête(Url)
SI ok = Vrai ALORS
//BREAK
FIN
//END

RetXml est chaîne = HTTPDonneRésultat(httpRésultat)

SI DebugSN = "S"
Info("Xml:",RetXml)
FIN

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

SI PositionOccurrence(RetXml,"<formatted_address>",rangPremier) > 0 ALORS

GloEnderecoOK = Vrai

//Endereço
nPosicaoInicial est entier = PositionOccurrence(RetXml,"<formatted_address>",rangPremier) + Taille("<formatted_address>")
nPosicaoFinal est entier = PositionOccurrence(RetXml,"</formatted_address>",rangPremier) + Taille("</formatted_address>")
nPosicaoFinal = nPosicaoFinal - nPosicaoInicial
Endereco = Milieu(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 )

SINON
GloEnderecoOK = Faux
RetJson = "ERRO"
FIN

FIN

SI Majuscule(Endereco) = "ERRO" ET ODT = "O" ALORS
GloEnderecoOK = Faux
RetJson = "ERRO"
FIN


FIN

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

SI DebugSN = "S"
Info("03",Endereco)
FIN

SI RetJson = "ERRO" ALORS
Popup(GloMsgSemInternet,"L")
FIN

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

RENVOYER (Endereco)




// Code de Adriano présenté en fonctions séparées





// Proposition de traduction


--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be