return tabelaRuas;
}
public static Point getGeocodeSQL(int lf, int lt, int rf, int rt, String numero, String coords) {
LinePoint[] line;
Point pOrigem, pFim, pFinal = null;
String format = "0.00000";
Encrypt ce = new Encrypt();
if ((!(coords.indexOf(" ") > 0)) && (!(coords.indexOf(",") > 0)) && (!(coords.indexOf(";") > 0)))
coords = ce.Decode(coords);
// -2551100,-4924916,-118,59,42,103,-20,10,-115,58
if (!(coords.indexOf(';') > 0)) {
format = "0.0000000";
coords = convertFromDecarta(7, coords);
}
boolean blnPar, blnInverse, blnLeftPar = true;
int L_F_ADD, L_T_ADD, R_F_ADD, R_T_ADD, houseNumber = 0, to, from, intAux;
int i, z = 0;
double totalLenght = 0, percentLine = 0, angle;
if (!numero.equals(""))
houseNumber = Integer.parseInt(numero); // Atribui valor ao inteiro
if (houseNumber % 2 == 0)
blnPar = true;
else
blnPar = false; // Buscar por Par ou �mpar
L_F_ADD = lf;
L_T_ADD = lt;
R_F_ADD = rf;
R_T_ADD = rt;
to = L_T_ADD;
from = L_F_ADD;
if (coords.lastIndexOf(';') == coords.length())
coords = coords.substring(0, coords.length() - 1);
if (coords.substring(coords.length() - 1).equals(";"))
coords = coords.substring(0, coords.length() - 1);
// Qual lado � par - Left � default
if (L_F_ADD != 0) {
if (L_F_ADD % 2 != 0)
blnLeftPar = false;
}
if (R_F_ADD != 0) {
if (R_F_ADD % 2 == 0)
blnLeftPar = false;
}
// Atribu to / from caso necessario - to e from default left
if (blnPar) {
if (!blnLeftPar) {
to = R_T_ADD;
from = R_F_ADD;
}
} else {
if (blnLeftPar) {
to = R_T_ADD;
from = R_F_ADD;
}
}
// verifica leitura inversa
if (from > to) {
intAux = from;
from = to;
to = intAux;
blnInverse = true;
} else
blnInverse = false;
line = new LinePoint[coords.split(";").length];
// l� inversamente caso necess�rio
if (!blnInverse) {
for (i = 0; i < line.length; i++) {
line[i] = new LinePoint();
line[i].setPoint(new Point());
line[i].getPoint().setX(Double.parseDouble(coords.split(";")[i].split(" ")[0].toString()));
line[i].getPoint().setY(Double.parseDouble(coords.split(";")[i].split(" ")[1].toString()));
}
} else {
for (i = line.length - 1; i > -1; i--) {
line[z] = new LinePoint();
line[z].setPoint(new Point());
line[z].getPoint().setX(Double.parseDouble(coords.split(";")[i].split(" ")[0].toString()));
line[z].getPoint().setY(Double.parseDouble(coords.split(";")[i].split(" ")[1].toString()));
z++;
}
}
// Tamanho Total / Parcial
for (i = 0; i < line.length; i++) {
if (i + 1 < line.length) {
line[i].setLength(Math.sqrt(Math.pow((line[i].getPoint().getX() - line[i + 1].getPoint().getX()), 2)
+ Math.pow((line[i].getPoint().getY() - line[i + 1].getPoint().getY()), 2)));
totalLenght += line[i].getLength();
}
}
// Numero na linha
if (to - from != 0)
percentLine = ((houseNumber - from) * totalLenght) / (to - from);
// Escolhe o segmento
for (i = 0; i < line.length - 1; i++) {
if (line[i].getLength() >= percentLine)
break;
else
percentLine -= line[i].getLength();
}
// Caso de perda de precis�o
if (i == line.length - 1) {
i--;
percentLine += line[i].getLength();
}
pFinal = new Point();
pFinal.setX(0);
pFinal.setY(0);
pOrigem = line[i].getPoint();
pFim = line[i + 1].getPoint();
if ((pOrigem.getX() - pFim.getX()) == 0 || (pOrigem.getY() - pFim.getY()) == 0)
angle = 0;
else {
angle = Math.abs(Math.atan((pOrigem.getY() - pFim.getY()) / (pOrigem.getX() - pFim.getX())));
}
// 1 Quadrante
if (pOrigem.getX() < pFim.getX() && pOrigem.getY() < pFim.getY()) {
pFinal.setX(pOrigem.getX() + percentLine * Math.cos(angle));
pFinal.setY(pOrigem.getY() + percentLine * Math.sin(angle));
}
// 2 Quadrante
if (pOrigem.getX() > pFim.getX() && pOrigem.getY() < pFim.getY()) {
pFinal.setX(pOrigem.getX() - percentLine * Math.cos(angle));
pFinal.setY(pOrigem.getY() + percentLine * Math.sin(angle));
}
// 3 Quadrante
if (pOrigem.getX() > pFim.getX() && pOrigem.getY() > pFim.getY()) {
pFinal.setX(pOrigem.getX() - percentLine * Math.cos(angle));
pFinal.setY(pOrigem.getY() - percentLine * Math.sin(angle));
}
// 4 Quadrante
if (pOrigem.getX() < pFim.getX() && pOrigem.getY() > pFim.getY()) {
pFinal.setX(pOrigem.getX() + percentLine * Math.cos(angle));
pFinal.setY(pOrigem.getY() - percentLine * Math.sin(angle));
}
if (pFinal.getX() == 0 || pFinal.getY() == 0) {
// 0 ou 360 graus
if (pOrigem.getX() < pFim.getX() && pOrigem.getY() == pFim.getY()) {
pFinal.setX(pOrigem.getX() + percentLine);
pFinal.setY(pOrigem.getY());
}
// 90 graus
if (pOrigem.getX() == pFim.getX() && pOrigem.getY() < pFim.getY()) {
pFinal.setX(pOrigem.getX());
pFinal.setY(pOrigem.getY() + percentLine);
}
// 180 graus
if (pOrigem.getX() > pFim.getX() && pOrigem.getY() == pFim.getY()) {
pFinal.setX(pOrigem.getX() - percentLine);
pFinal.setY(pOrigem.getY());
}
// 270 graus
if (pOrigem.getX() == pFim.getX() && pOrigem.getY() > pFim.getY()) {
pFinal.setX(pOrigem.getX());
pFinal.setY(pOrigem.getY() - percentLine);
}
}
if (pFinal.getX() == 0 && pOrigem.getX() != 0) {
pFinal = pOrigem;
}
if (pFinal.getX() == 0 && pFim.getX() != 0) {
pFinal = pFim;