PageRenderTime 42ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 1ms

/src/main/com/lbslocal/cc/core/CommonRoute.java

https://bitbucket.org/fabiosarmento/api-java-com-maven-antiga
Java | 3934 lines | 3759 code | 147 blank | 28 comment | 128 complexity | 795e479a7bac7f0b1943e127c359f444 MD5 | raw file
  1. package com.lbslocal.cc.core;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.FileReader;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.OutputStream;
  10. import java.sql.Connection;
  11. import java.sql.ResultSet;
  12. import java.sql.SQLException;
  13. import java.sql.Statement;
  14. import java.util.ArrayList;
  15. import java.util.Calendar;
  16. import java.util.Collections;
  17. import java.util.Comparator;
  18. import java.util.List;
  19. import java.util.Scanner;
  20. import java.util.regex.Pattern;
  21. import com.lbslocal.cc.common.Functions;
  22. import com.lbslocal.cc.common.SegAux;
  23. import com.lbslocal.cc.common.TCPClientDecarta;
  24. import com.lbslocal.cc.common.TollFeeAux;
  25. import com.lbslocal.cc.common.dataBase;
  26. import com.lbslocal.cc.objects.v0.common.City;
  27. import com.lbslocal.cc.objects.v0.common.Extent;
  28. import com.lbslocal.cc.objects.v0.common.MapInfo;
  29. import com.lbslocal.cc.objects.v0.common.MapOptions;
  30. import com.lbslocal.cc.objects.v0.common.MapSize;
  31. import com.lbslocal.cc.objects.v0.common.Point;
  32. import com.lbslocal.cc.objects.v0.common.ShapeDetect;
  33. import com.lbslocal.cc.objects.v3.route.POIDetails;
  34. import com.lbslocal.cc.objects.v3.route.RoadType;
  35. import com.lbslocal.cc.objects.v3.route.RouteArray;
  36. import com.lbslocal.cc.objects.v3.route.RouteProximityInfo;
  37. import com.lbslocal.cc.objects.v3.route.RouteProximityOptions;
  38. import com.lbslocal.cc.objects.v3.route.RouteStop;
  39. import com.lbslocal.cc.objects.v3.route.RouteSummary;
  40. import com.lbslocal.cc.objects.v3.route.RouteTotals;
  41. import com.lbslocal.cc.objects.v3.route.SegmentDescription;
  42. import com.lbslocal.cc.objects.v3.route.TollFeeDetails;
  43. import com.lbslocal.master.common.ConfigurationManager;
  44. import com.lbslocal.master.common.Utils;
  45. import com.vividsolutions.jts.geom.Coordinate;
  46. import com.vividsolutions.jts.geom.Geometry;
  47. import com.vividsolutions.jts.geom.GeometryFactory;
  48. import com.vividsolutions.jts.io.ParseException;
  49. import com.vividsolutions.jts.io.WKTReader;
  50. import com.vividsolutions.jts.operation.buffer.BufferOp;
  51. public class CommonRoute {
  52. private String _maquina;
  53. private String _server;
  54. private int _port;
  55. private String _output;
  56. private String _dns;
  57. private String _dataSource;
  58. private String _dataSourceMapa;
  59. public static int _getRoute = 15;
  60. public static int _getRouteDescription = 18;
  61. public static int _getRouteSummary = 16;
  62. public static int _getRouteTotals = 19;
  63. public static int _getRouteWithMap = 17;
  64. // estrutura do poiRoute
  65. String poiID;
  66. String poiFieldList;
  67. String poiSource;
  68. String poiSegSource;
  69. String poiDataBase;
  70. Extent gExt = new Extent();
  71. public CommonRoute(String maquina, String server, int port, String output, String dns, String dataSource, String dataSourceMapa) {
  72. this._maquina = maquina;
  73. this._server = server;
  74. this._port = port;
  75. this._dns = dns;
  76. this._output = output;
  77. this._dataSource = dataSource;
  78. this._dataSourceMapa = dataSourceMapa;
  79. File fileDir = new File(_output);
  80. if (!fileDir.exists())
  81. fileDir.mkdirs();
  82. gExt.setXMax(0);
  83. gExt.setXMin(0);
  84. gExt.setYMax(0);
  85. gExt.setYMin(0);
  86. }
  87. public CommonRoute(String maquina, String server, int port, String output, String dns, String dataSource, String dataSourceMapa,
  88. String outputLinux) {
  89. this._maquina = maquina;
  90. this._server = server;
  91. this._port = port;
  92. this._dns = dns;
  93. this._output = output;
  94. this._dataSource = dataSource;
  95. this._dataSourceMapa = dataSourceMapa;
  96. gExt.setXMax(0);
  97. gExt.setXMin(0);
  98. gExt.setYMax(0);
  99. gExt.setYMin(0);
  100. }
  101. private RouteSummary[] getSummary(SegmentDescription[] segmentDescription, RouteStop[] rs, RouteProximityOptions ro) throws Exception {
  102. RouteSummary[] summary = new RouteSummary[rs.length];
  103. try {
  104. int parada = 1;
  105. // origem
  106. summary[0] = new RouteSummary();
  107. summary[0].setDistance(0);
  108. summary[0].setDescription(rs[0].getDescription());
  109. summary[0].getPoint().setX(Functions.formatDouble(rs[0].getPoint().getX(), "0.00000"));
  110. summary[0].getPoint().setY(Functions.formatDouble(rs[0].getPoint().getY(), "0.00000"));
  111. summary[0].setTime("");
  112. String comandoFimDaRota = "Fim da rota";
  113. if (ro.getLanguage().equals("espanhol"))
  114. comandoFimDaRota = "Fin de la ruta";
  115. // paradas
  116. double distanciaAcumulada = 0;
  117. String LastStop = "";
  118. for (int x = 0; x < segmentDescription.length; x++) {
  119. if (segmentDescription[x].getCommand().toUpperCase().indexOf("PARADA") >= 0
  120. || segmentDescription[x].getCommand().toUpperCase().indexOf(comandoFimDaRota.toUpperCase()) >= 0) {
  121. if (!LastStop.equals(segmentDescription[x].getCommand())) {
  122. try {
  123. summary[parada] = new RouteSummary();
  124. summary[parada].setDistance(Functions.formatDouble(segmentDescription[x].getCumulativeDistance(), "0.00")
  125. - Functions.formatDouble(distanciaAcumulada, "0.00"));
  126. summary[parada].setDescription(segmentDescription[x].getDescription());
  127. summary[parada].getPoint().setX(Functions.formatDouble(segmentDescription[x].getPoint().getX(), "0.00000"));
  128. summary[parada].getPoint().setY(Functions.formatDouble(segmentDescription[x].getPoint().getY(), "0.00000"));
  129. summary[parada].setTime(getTotalTime(summary[parada].getDistance(), ro.getVehicle().getAverageSpeed()));
  130. distanciaAcumulada = Functions.formatDouble(segmentDescription[x].getCumulativeDistance(), "0.00");
  131. } catch (Exception e) {
  132. e.printStackTrace();
  133. }
  134. parada++;
  135. LastStop = segmentDescription[x].getCommand();
  136. }
  137. }
  138. }
  139. } catch (Exception ex) {
  140. throw (new Exception("Problemas ao gerar o sum?rio da rota."));
  141. }
  142. return summary;
  143. }
  144. private static Comparator<RouteSummary> COMPARATOR = new Comparator<RouteSummary>() {
  145. // This is where the sorting happens.
  146. public int compare(RouteSummary o1, RouteSummary o2) {
  147. return (int) (o1.getDistance() - o2.getDistance());
  148. }
  149. };
  150. double totalPedagios = 0;
  151. public Object[] addPedagio(String vr, RouteProximityOptions ro, SegAux segAux, List<TollFeeAux> pedagioList, int nroParadas) throws IOException {
  152. Object[] obj = new Object[2];
  153. TCPClientDecarta tcpDecarta = new TCPClientDecarta(_server, _port);
  154. String dataSourcePOI = "lbslocal_pedagio";
  155. if (!Functions.IsNullOrEmpty(ro.getDataSource())) {
  156. if (ro.getDataSource().toUpperCase().equals("BR"))
  157. dataSourcePOI = "lbslocal_postos_rod_pedagio";
  158. }
  159. String response = tcpDecarta.Send("PNB0|%" + vr + "%RAD=m7|%M=500%PLL%S2%DS=" + dataSourcePOI + "||");
  160. if (!response.contains("No records found")) {
  161. String[] partMasterPOI = response.split(Pattern.quote("|"));
  162. for (int w = 0; w < partMasterPOI.length; w++) {
  163. if (partMasterPOI[w].indexOf("POI_") >= 0) {
  164. TollFeeAux pedagio = new TollFeeAux();
  165. pedagio.xy = "#"
  166. + partMasterPOI[w].substring(partMasterPOI[w].indexOf(",") + 1)
  167. + "~"
  168. + partMasterPOI[w].substring(partMasterPOI[w].indexOf("PLL") + 4, (partMasterPOI[w].indexOf("PLL") + 4)
  169. + partMasterPOI[w].substring(partMasterPOI[w].indexOf("PLL") + 4).indexOf(",")) + "#";
  170. ;
  171. pedagio.ID = partMasterPOI[w].substring(partMasterPOI[w].indexOf("POI_") + 6,
  172. (partMasterPOI[w].indexOf("POI_") + 6) + (partMasterPOI[w].indexOf("PLL") - 7) - partMasterPOI[w].indexOf("POI_"))
  173. .toLowerCase();
  174. if (pedagioList.size() > 0) {
  175. if ((pedagioList.get(pedagioList.size() - 1).ID != pedagio.ID) || nroParadas >= 3) {
  176. pedagioList.add(pedagio);
  177. TollFeeDetails tollFeeDetails = new TollFeeDetails();
  178. tollFeeDetails.setName(pedagio.ID);
  179. totalPedagios += tollFeeDetails.getPrice();
  180. segAux.seg.setTollFee("S");
  181. segAux.seg.setTollFeeDetails(tollFeeDetails);
  182. segAux.seg.getPoint().setX(
  183. Double.parseDouble((pedagio.xy.substring(pedagio.xy.indexOf("#") + 1,
  184. (pedagio.xy.indexOf("#") + 1) + pedagio.xy.indexOf("~") - 1))));
  185. segAux.seg.getPoint().setY(
  186. Double.parseDouble((pedagio.xy.substring(pedagio.xy.indexOf("~") + 1,
  187. (pedagio.xy.indexOf("~") + 1) + (pedagio.xy.lastIndexOf("#") - pedagio.xy.indexOf("~")) - 1))));
  188. }
  189. } else {
  190. pedagioList.add(pedagio);
  191. TollFeeDetails tollFeeDetails = new TollFeeDetails();
  192. tollFeeDetails.setName(pedagio.ID);
  193. totalPedagios += tollFeeDetails.getPrice();
  194. segAux.seg.setTollFee("S");
  195. segAux.seg.setTollFeeDetails(tollFeeDetails);
  196. segAux.seg.getPoint().setX(
  197. Double.parseDouble((pedagio.xy.substring(pedagio.xy.indexOf("#") + 1,
  198. (pedagio.xy.indexOf("#") + 1) + pedagio.xy.indexOf("~") - 1))));
  199. segAux.seg.getPoint().setY(
  200. Double.parseDouble((pedagio.xy.substring(pedagio.xy.indexOf("~") + 1,
  201. (pedagio.xy.indexOf("~") + 1) + (pedagio.xy.lastIndexOf("#") - pedagio.xy.indexOf("~")) - 1))));
  202. }
  203. }
  204. }
  205. }
  206. obj[0] = segAux;
  207. obj[1] = pedagioList;
  208. return obj;
  209. }
  210. public Object[] addPOI(String[] poiRoutes, String vr, RouteProximityOptions ro, SegAux segAux, List<POIDetails> poiList) throws IOException {
  211. Object[] obj = new Object[2];
  212. TCPClientDecarta tcpDecarta = new TCPClientDecarta(_server, _port);
  213. for (int x = 0; x < poiRoutes.length; x++) {
  214. if (!Functions.IsNullOrEmpty(poiRoutes[x])) {
  215. String response = tcpDecarta.Send("PNB0|%" + vr + "%RAD=m7|%M=500%PLL%S2%DS=" + poiRoutes[x] + "||");
  216. String[] partMasterPOI = response.split(Pattern.quote("|"));
  217. if (!response.contains("No records found")) {
  218. for (int w = 0; w < partMasterPOI.length; w++) {
  219. if (partMasterPOI[w].indexOf("POI_") >= 0) {
  220. POIDetails poi = new POIDetails();
  221. poi.setClientID(partMasterPOI[w].substring(partMasterPOI[w].indexOf("POI_") + 4, (partMasterPOI[w].indexOf("POI_") + 4)
  222. + partMasterPOI[w].substring(partMasterPOI[w].indexOf("POI_") + 4).indexOf('%')));
  223. if (Functions.isNumeric(poi.getClientID().substring(0, poi.getClientID().indexOf(':')))) {
  224. poiList.add(poi);
  225. segAux.seg.setPoiRoute("S");
  226. segAux.seg.setPoiRouteDetails(poiList.toArray(new POIDetails[0]));
  227. }
  228. }
  229. }
  230. }
  231. }
  232. }
  233. obj[0] = segAux;
  234. obj[1] = poiList;
  235. return obj;
  236. }
  237. public Object[] addPOIsRota(String vr, RouteProximityOptions ro, SegAux segAux, List<TollFeeAux> pedagioList, List<POIDetails> poiList,
  238. int nroParadas, int[] poiRouteIDs) throws IOException {
  239. Object[] obj = new Object[3];
  240. TCPClientDecarta tcpDecarta = new TCPClientDecarta(_server, _port);
  241. String dataSourcePOI = "lbslocal_postos";
  242. if (!Functions.IsNullOrEmpty(ro.getDataSource())) {
  243. if (ro.getDataSource().toUpperCase().equals("BR"))
  244. dataSourcePOI = "lbslocal_postos_rod";
  245. }
  246. String response = tcpDecarta.Send("PNB0|%" + vr + "%RAD=m7|%EXTIME%M=500%PLL%S2%DS=" + dataSourcePOI + "||");
  247. String[] partMasterPOI = response.split(Pattern.quote("|"));
  248. if (!response.contains("No records found")) {
  249. for (int w = 0; w < partMasterPOI.length; w++) {
  250. if (partMasterPOI[w].indexOf("POI_") >= 0) {
  251. if (!partMasterPOI[w].contains("POI_P:")) {
  252. if (ro.getRouteDetails().getPoiRoute() != null) {
  253. for (int i = 0; i < poiRouteIDs.length; i++) {
  254. POIDetails poi = new POIDetails();
  255. poi.setClientID(partMasterPOI[w].substring(partMasterPOI[w].indexOf("POI_") + 4,
  256. (partMasterPOI[w].indexOf("POI_") + 4)
  257. + partMasterPOI[w].substring(partMasterPOI[w].indexOf("POI_") + 4).indexOf('%')));
  258. if (poi.getClientID().substring(0, poi.getClientID().indexOf(':')) == String.valueOf(poiRouteIDs[i])) {
  259. if (Functions.isNumeric(poi.getClientID().substring(0, poi.getClientID().indexOf(':')))) {
  260. poiList.add(poi);
  261. segAux.seg.setPoiRoute("S");
  262. segAux.seg.setPoiRouteDetails(poiList.toArray(new POIDetails[0]));
  263. }
  264. }
  265. }
  266. }
  267. } else {
  268. if (ro.getVehicle().getTollFeeCat() > 0) {
  269. TollFeeAux pedagio = new TollFeeAux();
  270. pedagio.xy = "#"
  271. + partMasterPOI[w].substring(partMasterPOI[w].indexOf(",") + 1)
  272. + "~"
  273. + partMasterPOI[w].substring(partMasterPOI[w].indexOf("PLL") + 4, (partMasterPOI[w].indexOf("PLL") + 4)
  274. + partMasterPOI[w].substring(partMasterPOI[w].indexOf("PLL") + 4).indexOf(",")) + "#";
  275. ;
  276. pedagio.ID = partMasterPOI[w]
  277. .substring(
  278. partMasterPOI[w].indexOf("POI_") + 6,
  279. (partMasterPOI[w].indexOf("POI_") + 6) + (partMasterPOI[w].indexOf("PLL") - 7)
  280. - partMasterPOI[w].indexOf("POI_")).toLowerCase();
  281. if (pedagioList.size() > 0) {
  282. if ((pedagioList.get(pedagioList.size() - 1).ID != pedagio.ID) || nroParadas >= 3) {
  283. pedagioList.add(pedagio);
  284. TollFeeDetails tollFeeDetails = new TollFeeDetails();
  285. tollFeeDetails.setName(pedagio.ID);
  286. totalPedagios += tollFeeDetails.getPrice();
  287. segAux.seg.setTollFee("S");
  288. segAux.seg.setTollFeeDetails(tollFeeDetails);
  289. segAux.seg.getPoint().setX(
  290. Double.parseDouble((pedagio.xy.substring(pedagio.xy.indexOf("#") + 1, (pedagio.xy.indexOf("#") + 1)
  291. + pedagio.xy.indexOf("~") - 1))));
  292. segAux.seg.getPoint().setY(
  293. Double.parseDouble((pedagio.xy.substring(pedagio.xy.indexOf("~") + 1, (pedagio.xy.indexOf("~") + 1)
  294. + (pedagio.xy.lastIndexOf("#") - pedagio.xy.indexOf("~")) - 1))));
  295. }
  296. } else {
  297. pedagioList.add(pedagio);
  298. TollFeeDetails tollFeeDetails = new TollFeeDetails();
  299. tollFeeDetails.setName(pedagio.ID);
  300. totalPedagios += tollFeeDetails.getPrice();
  301. segAux.seg.setTollFee("S");
  302. segAux.seg.setTollFeeDetails(tollFeeDetails);
  303. segAux.seg.getPoint().setX(
  304. Double.parseDouble((pedagio.xy.substring(pedagio.xy.indexOf("#") + 1, (pedagio.xy.indexOf("#") + 1)
  305. + pedagio.xy.indexOf("~") - 1))));
  306. segAux.seg.getPoint().setY(
  307. Double.parseDouble((pedagio.xy.substring(pedagio.xy.indexOf("~") + 1, (pedagio.xy.indexOf("~") + 1)
  308. + (pedagio.xy.lastIndexOf("#") - pedagio.xy.indexOf("~")) - 1))));
  309. }
  310. }
  311. }
  312. }
  313. }
  314. }
  315. obj[0] = segAux;
  316. obj[1] = pedagioList;
  317. obj[2] = poiList;
  318. return obj;
  319. }
  320. private int[] getPoiRouteCurrentIDs(String[] poiRoute) {
  321. int[] poiRouteIDs = null;
  322. if (poiRoute != null) {
  323. String sql = "";
  324. String pois = "";
  325. poiRouteIDs = new int[poiRoute.length];
  326. try {
  327. for (int x = 0; x < poiRoute.length; x++) {
  328. if (!Functions.IsNullOrEmpty(poiRoute[x])) {
  329. if (x > 0)
  330. pois += ",'" + poiRoute[x] + "'";
  331. else
  332. pois += "'" + poiRoute[x] + "'";
  333. }
  334. }
  335. if (!Functions.IsNullOrEmpty(pois)) {
  336. Connection con = dataBase.getConnection("DADOS_WEBSERVICES");
  337. Statement st = con.createStatement();
  338. sql = "SELECT ID ";
  339. sql += " FROM TB_POIROUTE";
  340. sql += " WHERE poiRoute in (" + pois + ")";
  341. ResultSet rr = st.executeQuery(sql.toUpperCase());
  342. int i = 0;
  343. while (rr.next()) {
  344. poiRouteIDs[i] = (rr.getInt("ID"));
  345. i++;
  346. }
  347. }
  348. } catch (Exception ex) {
  349. // throw (new
  350. // Exception("Problemas ao buscar estrutra poiRoute."));
  351. }
  352. }
  353. return poiRouteIDs;
  354. }
  355. @SuppressWarnings("unchecked")
  356. public SegmentDescription[] getSegmentDescriptionAlternative(String _response, int tollFeeCat, RouteProximityOptions ro, RouteStop[] rs,
  357. String dataSource, int idLicenca) throws Exception {
  358. List<SegAux> segmentList = new ArrayList<SegAux>();
  359. List<POIDetails> poiList = new ArrayList<POIDetails>();
  360. SegmentDescription[] ret = null;
  361. boolean proximity = false;
  362. String clientDataSource = "";
  363. int[] poiRouteIDs = null;
  364. if (dataSource.toLowerCase().contains("lbslocal_rodoviaria"))
  365. ro.setDataSource("BR");
  366. String comandoFimDaRota = "Fim da rota";
  367. String comandoInicio = "In�cio da rota";
  368. String comandoContinue = "Continue";
  369. if (ro.getLanguage().equals("espanhol")) {
  370. comandoFimDaRota = "Fin de la ruta";
  371. comandoInicio = "Inicio de la ruta";
  372. comandoContinue = "Sigue";
  373. }
  374. SegAux segTemp = new SegAux();
  375. segTemp.seg = new SegmentDescription();
  376. segTemp.seg.setDistance(0);
  377. segTemp.seg.setCity(new City());
  378. segTemp.seg.getCity().setName("");
  379. segTemp.seg.getCity().setState("");
  380. segTemp.seg.setCumulativeDistance(0);
  381. segTemp.segPosition = 0;
  382. segTemp.seg.setCommand(comandoInicio);
  383. segTemp.seg.setDescription(rs[0].getDescription());
  384. segTemp.seg.setPoint(new Point());
  385. segTemp.seg.getPoint().setX(Functions.formatDouble(rs[0].getPoint().getX(), "0.00000"));
  386. segTemp.seg.getPoint().setY(Functions.formatDouble(rs[0].getPoint().getY(), "0.00000"));
  387. segmentList.add(segTemp);
  388. poiRouteIDs = getPoiRouteCurrentIDs(ro.getRouteDetails().getPoiRoute());
  389. Connection con = dataBase.getConnection("DADOS_WEBSERVICES");
  390. TCPClientDecarta tcpDecarta = new TCPClientDecarta(_server, _port);
  391. try {
  392. Statement st = con.createStatement();
  393. ResultSet rr = st.executeQuery(" SELECT * FROM TB_DADOS_ROUTEPROXIMITY WHERE ID_LICENCA = " + idLicenca);
  394. while (rr.next()) {
  395. clientDataSource = rr.getString("DS_DECARTA");
  396. proximity = true;
  397. if (ro.getRadius() == 0)
  398. ro.setRadius(10);
  399. if (ro.getRouteDetails().getRouteType() == 12 || ro.getRouteDetails().getRouteType() == 13)
  400. proximity = false;
  401. }
  402. st.close();
  403. rr.close();
  404. } catch (Exception ex) {
  405. // throw ex;
  406. } finally {
  407. con.close();
  408. }
  409. List<String> poiRoutes = new ArrayList<String>();
  410. try {
  411. if (ro.getRouteDetails().getPoiRoute() != null) {
  412. for (int c = 0; c < ro.getRouteDetails().getPoiRoute().length; c++) {
  413. String poiRoute = ro.getRouteDetails().getPoiRoute()[c];
  414. con = dataBase.getConnection("DADOS_WEBSERVICES");
  415. Statement st = con.createStatement();
  416. ResultSet rr = st.executeQuery("SELECT * FROM TB_POIROUTE WHERE poiRoute = '" + poiRoute + "'");
  417. while (rr.next()) {
  418. if (!Functions.IsNullOrEmpty(ro.getDataSource())) {
  419. if (ro.getDataSource().toUpperCase().equals("BR"))
  420. poiRoutes.add(rr.getString("decartaRodSource"));
  421. else
  422. poiRoutes.add(rr.getString("decartaSource"));
  423. } else
  424. poiRoutes.add(rr.getString("decartaSource"));
  425. }
  426. st.close();
  427. rr.close();
  428. }
  429. }
  430. } catch (Exception ex) {
  431. } finally {
  432. con.close();
  433. }
  434. RouteStop[] rStopSelect = removeRouteStop(rs, 0);
  435. try {
  436. String[] partMaster = _response.split(Pattern.quote("|"));
  437. double cumulativeDistance = 0;
  438. int paradas = 1;
  439. List<TollFeeAux> pedagioList = new ArrayList<TollFeeAux>();
  440. for (int x = 0; x < partMaster.length; x++) {
  441. if (partMaster[x].indexOf("S2=") >= 0) {
  442. poiList.clear();
  443. String[] part = partMaster[x].split(Pattern.quote("%"));
  444. SegAux segAux = new SegAux();
  445. segAux.seg = new SegmentDescription();
  446. for (int z = 0; z < part.length; z++) {
  447. if (part[z].indexOf("DIST=K") >= 0) {
  448. cumulativeDistance += Functions.formatDouble(part[z].replace("DIST=K", ""), "0.00");
  449. segAux.seg.setCumulativeDistance(Functions.formatDouble(cumulativeDistance, "0.00"));
  450. segAux.seg.setDistance(Functions.formatDouble(part[z].replace("DIST=K", ""), "0.00"));
  451. segAux.seg.setDistance(segAux.seg.getDistance());
  452. }
  453. if (part[z].indexOf("TIME=") >= 0) {
  454. segAux.seg.setTime(part[z].replace("TIME=", ""));
  455. }
  456. if (part[z].indexOf("AC=") >= 0) {
  457. if (part[z].contains("21")) {
  458. if (Functions.IsNullOrEmpty(segAux.seg.getCity().getName())) {
  459. segAux.seg.setCity(new City());
  460. segAux.seg.getCity().setName(Functions.CamelCase(part[z + 1].replace("S2=", "").split(Pattern.quote("\\"))[1]));
  461. segAux.seg.getCity().setState(part[z + 1].replace("S2=", "").split(Pattern.quote("\\"))[4]);
  462. }
  463. }
  464. if (part[z].contains("71")) {
  465. if (Functions.IsNullOrEmpty(segAux.seg.getDescription())) {
  466. if (part[z + 1].indexOf("#") >= 0)
  467. segAux.seg.setDescription(Functions.CamelCase(part[z + 1].substring(0, part[z + 1].indexOf("#")).replace(
  468. "S2=", "")));
  469. else
  470. segAux.seg.setDescription(Functions.CamelCase(part[z + 1].replace("S2=", "")));
  471. try {
  472. segAux.seg.setRoadType(part[z + 1].split(Pattern.quote("_"))[1].replace("T:", ""));
  473. } catch (Exception ex) {
  474. segAux.seg.setRoadType(part[z + 1].substring(part[z + 1].indexOf("T:") + 2, 2).replace("_", ""));
  475. }
  476. }
  477. }
  478. }
  479. if (part[z].indexOf("TURN=") >= 0)
  480. segAux.seg.setCommand(Translate(part[z].replace("TURN=", ""), ro.getLanguage()));
  481. if (part[z].indexOf("LL=") >= 0) {
  482. if (segAux.seg.getPoint().getX() == 0) {
  483. segAux.seg.setPoint(new Point());
  484. segAux.seg.getPoint()
  485. .setX(Double.parseDouble(part[z].replace("LL=", "").split(Pattern.quote(","))[1].replace("|", "").replace(
  486. "%", "")));
  487. segAux.seg.getPoint()
  488. .setY(Double.parseDouble(part[z].replace("LL=", "").split(Pattern.quote(","))[0].replace("|", "").replace(
  489. "%", "")));
  490. }
  491. }
  492. if (part[z].indexOf("VR7=") >= 0) {
  493. segAux.vr = part[z].replace("VR7=", "").substring(part[z].replace("VR7=", "").indexOf(",") + 1);
  494. // if (ro.getVehicle().getTollFeeCat() > 0)
  495. // {
  496. // Object[] obj = addPedagio(part[z], ro, segAux,
  497. // pedagioList, rs.length);
  498. // segAux = (SegAux) obj[0];
  499. // pedagioList = (List<TollFeeAux>) obj[1];
  500. // }
  501. //
  502. // if (ro.getRouteDetails().getPoiRoute() != null)
  503. // {
  504. // Object[] obj = addPOI(poiRoutes.toArray(new
  505. // String[0]), part[z], ro, segAux, poiList);
  506. // segAux = (SegAux) obj[0];
  507. // poiList = (List<POIDetails>) obj[1];
  508. // }
  509. if (ro.getVehicle().getTollFeeCat() > 0 || ro.getRouteDetails().getPoiRoute() != null) {
  510. Object[] obj = addPOIsRota(part[z], ro, segAux, pedagioList, poiList, rs.length, poiRouteIDs);
  511. segAux = (SegAux) obj[0];
  512. pedagioList = (List<TollFeeAux>) obj[1];
  513. poiList = (List<POIDetails>) obj[2];
  514. }
  515. if (proximity) {
  516. if (ro.getRouteDetails().getRouteType() == 12) {
  517. String response = tcpDecarta.Send("PNB0|%" + part[z] + "%RAD=M2|%M=1000%LL%S2%S1%DS=telefonica_rotas||");
  518. String[] partMasterPOI = response.split(Pattern.quote("|"));
  519. for (int w = 0; w < partMasterPOI.length; w++) {
  520. POIDetails poi = new POIDetails();
  521. if (partMasterPOI[w].indexOf("S1") >= 0) {
  522. try {
  523. String[] p = partMasterPOI[w].replace("%", "").replace("S2", "").replace("S1", "").replace("LL", "")
  524. .split(Pattern.quote("="));
  525. int ind = p[1].lastIndexOf("\\");
  526. poi.setClientID(p[2].substring(0, p[2].indexOf("\\")) + "|" + p[1].substring(ind).replace("\\", ""));
  527. poi.getPoint().setX(Double.parseDouble(p[3].split(Pattern.quote(","))[1]));
  528. poi.getPoint().setY(Double.parseDouble(p[3].split(Pattern.quote(","))[0]));
  529. poiList.add(poi);
  530. segAux.seg.setPoiRoute("S");
  531. segAux.seg.setPoiRouteDetails((POIDetails[]) poiList.toArray());
  532. } catch (Exception ex) {
  533. }
  534. }
  535. }
  536. } else {
  537. if (ro.getRouteDetails().getRouteType() == 13) {
  538. String response = tcpDecarta.Send("PNB0|%" + part[z] + "%RAD=M2|%M=1000%LL%S2%S1%DS=telefonica_pf||");
  539. String[] partMasterPOI = response.split(Pattern.quote("|"));
  540. for (int w = 0; w < partMasterPOI.length; w++) {
  541. POIDetails poi = new POIDetails();
  542. if (partMasterPOI[w].indexOf("S1") >= 0) {
  543. try {
  544. String[] p = partMasterPOI[w].replace("%", "").replace("S2", "").replace("S1", "")
  545. .replace("LL", "").split(Pattern.quote("="));
  546. int ind = p[1].lastIndexOf("\\");
  547. poi.setClientID(p[2].substring(0, p[2].indexOf("\\")) + "|"
  548. + p[1].substring(ind).replace("\\", ""));
  549. poi.getPoint().setX(Double.parseDouble(p[3].split(Pattern.quote(","))[1]));
  550. poi.getPoint().setY(Double.parseDouble(p[3].split(Pattern.quote(","))[0]));
  551. poiList.add(poi);
  552. segAux.seg.setPoiRoute("S");
  553. segAux.seg.setPoiRouteDetails((POIDetails[]) poiList.toArray());
  554. } catch (Exception ex) {
  555. }
  556. }
  557. }
  558. } else {
  559. String response = tcpDecarta.Send("PNB0|%" + part[z] + "%RAD=m" + ro.getRadius() + "|%M=1000%LL%S2%S1%DS="
  560. + clientDataSource + "||");
  561. String[] partMasterPOI = response.split(Pattern.quote("|"));
  562. for (int w = 0; w < partMasterPOI.length; w++) {
  563. POIDetails poi = new POIDetails();
  564. if (partMasterPOI[w].indexOf("S1") >= 0) {
  565. try {
  566. String[] p = partMasterPOI[w].replace("%", "").replace("S2", "").replace("S1", "")
  567. .replace("LL", "").split(Pattern.quote("="));
  568. int ind = p[1].lastIndexOf("\\");
  569. try {
  570. poi.setClientID(p[2].substring(0, p[2].indexOf("\\")) + "|"
  571. + p[1].substring(ind).replace("\\", ""));
  572. } catch (Exception ex) {
  573. poi.setClientID(p[2]);
  574. try {
  575. poi.setSource(p[1].substring(ind + 1));
  576. } catch (Exception ex1) {
  577. }
  578. ;
  579. }
  580. poi.getPoint().setX(Double.parseDouble(p[3].split(Pattern.quote(","))[1]));
  581. poi.getPoint().setY(Double.parseDouble(p[3].split(Pattern.quote(","))[0]));
  582. poiList.add(poi);
  583. segAux.seg.setPoiRoute("S");
  584. segAux.seg.setPoiRouteDetails((POIDetails[]) poiList.toArray());
  585. } catch (Exception ex) {
  586. }
  587. }
  588. }
  589. }
  590. }
  591. }
  592. }
  593. }
  594. if (Functions.IsNullOrEmpty(segAux.seg.getCommand())) {
  595. if (rs.length > 2) {
  596. if (paradas < rs.length - 1) {
  597. if (ro.getRouteDetails().isOptimizeRoute()) {
  598. if (rs.length >= 10) {
  599. segAux.seg.setCommand(comandoContinue);
  600. SegAux seg = new SegAux();
  601. seg.seg = segAux.seg;
  602. seg.seg.setDescription(rs[paradas].getDescription());
  603. seg.seg.setCommand("Parada " + paradas);
  604. seg.seg.setDistance(0);
  605. seg.seg.getPoint().setX(rs[paradas].getPoint().getX());
  606. seg.seg.getPoint().setY(rs[paradas].getPoint().getY());
  607. seg.vr = "";
  608. seg.vrPosition = 0;
  609. paradas++;
  610. segmentList.add(segAux);
  611. segmentList.add(seg);
  612. } else {
  613. segAux.seg.setCommand(comandoContinue);
  614. SegAux seg = new SegAux();
  615. seg.seg.setCommand(comandoContinue);
  616. for (int z = 0; z < rStopSelect.length; z++) {
  617. if (String.format("0.00000", rStopSelect[z].getPoint().getX()).equals(
  618. String.format("0.00000", segAux.seg.getPoint().getX()))
  619. && String.format("0.00000", segAux.seg.getPoint().getY()).equals(
  620. String.format("0.00000", rStopSelect[z].getPoint().getY()))) {
  621. seg.seg = segAux.seg;
  622. seg.seg.setDescription(rStopSelect[z].getDescription());
  623. seg.seg.setCommand("Parada " + paradas);
  624. seg.seg.setDistance(0);
  625. seg.seg.getPoint().setX(rStopSelect[z].getPoint().getX());
  626. seg.seg.getPoint().setY(rStopSelect[z].getPoint().getY());
  627. seg.vr = "";
  628. seg.vrPosition = 0;
  629. rStopSelect = removeRouteStop(rStopSelect, z);
  630. break;
  631. }
  632. }
  633. if (seg.seg.getCommand().toLowerCase().indexOf("parada") < 0) {
  634. List<RouteSummary> rsList = new ArrayList<RouteSummary>();
  635. for (int z = 0; z < rStopSelect.length; z++) {
  636. RouteSummary r = new RouteSummary();
  637. r.setDistance(Math.sqrt(Math
  638. .pow((rStopSelect[z].getPoint().getX() - segAux.seg.getPoint().getX()), 2)
  639. + Math.pow((rStopSelect[z].getPoint().getY() - segAux.seg.getPoint().getY()), 2)));
  640. r.setDescription(String.valueOf(z));
  641. rsList.add(r);
  642. }
  643. Collections.sort(rsList, COMPARATOR);
  644. /*
  645. * rsList.Sort(delegate(RouteSummary
  646. * p1, RouteSummary p2) { return
  647. * (Double
  648. * .parseDouble(p1.distance).
  649. * CompareTo (
  650. * Double.parseDouble(p2.distance)))
  651. * ; });
  652. */
  653. seg.seg = segAux.seg;
  654. seg.seg.setDescription(rStopSelect[Integer.parseInt(rsList.get(0).getDescription())].getDescription());
  655. seg.seg.setCommand("Parada " + paradas);
  656. seg.seg.setDistance(0);
  657. seg.seg.getPoint().setX(rStopSelect[Integer.parseInt(rsList.get(0).getDescription())].getPoint().getX());
  658. seg.seg.getPoint().setY(rStopSelect[Integer.parseInt(rsList.get(0).getDescription())].getPoint().getY());
  659. seg.vr = "";
  660. seg.vrPosition = 0;
  661. rStopSelect = removeRouteStop(rStopSelect, Integer.parseInt(rsList.get(0).getDescription()));
  662. }
  663. paradas++;
  664. segmentList.add(segAux);
  665. segmentList.add(seg);
  666. }
  667. } else {
  668. segAux.seg.setCommand(comandoContinue);
  669. SegAux seg = new SegAux();
  670. seg.seg = segAux.seg;
  671. seg.seg.setDescription(rs[paradas].getDescription());
  672. seg.seg.setCommand("Parada " + paradas);
  673. seg.seg.setDistance(0);
  674. seg.seg.getPoint().setX(rs[paradas].getPoint().getX());
  675. seg.seg.getPoint().setY(rs[paradas].getPoint().getY());
  676. seg.vr = "";
  677. seg.vrPosition = 0;
  678. paradas++;
  679. segmentList.add(segAux);
  680. segmentList.add(seg);
  681. }
  682. } else {
  683. segAux.seg.setCommand(comandoContinue);
  684. if (Functions.IsNullOrEmpty(segAux.seg.getCity().getName()) && segmentList.size() > 0)
  685. segAux.seg.setCity(segmentList.get(segmentList.size() - 1).seg.getCity());
  686. segmentList.add(segAux);
  687. }
  688. } else {
  689. segAux.seg.setCommand(comandoContinue);
  690. if (Functions.IsNullOrEmpty(segAux.seg.getCity().getName()) && segmentList.size() > 0)
  691. segAux.seg.setCity(segmentList.get(segmentList.size() - 1).seg.getCity());
  692. segmentList.add(segAux);
  693. }
  694. } else {
  695. if (Functions.IsNullOrEmpty(segAux.seg.getCity().getName()) && segmentList.size() > 0)
  696. segAux.seg.setCity(segmentList.get(segmentList.size() - 1).seg.getCity());
  697. segmentList.add(segAux);
  698. }
  699. }
  700. }
  701. SegAux segFim = new SegAux();
  702. segFim.seg = new SegmentDescription();
  703. segFim.seg.setDistance(0);
  704. segFim.seg.setCity(new City());
  705. segFim.seg.getCity().setName("");
  706. segFim.seg.getCity().setState("");
  707. segFim.seg.setCumulativeDistance(segmentList.get(segmentList.size() - 1).seg.getCumulativeDistance());
  708. segFim.segPosition = segmentList.size() + 1;
  709. segFim.seg.setCommand(comandoFimDaRota);
  710. segFim.seg.setDescription(rs[rs.length - 1].getDescription());
  711. segFim.seg.setPoint(new Point());
  712. segFim.seg.getPoint().setX(Functions.formatDouble(rs[rs.length - 1].getPoint().getX(), "0.00000"));
  713. segFim.seg.getPoint().setY(Functions.formatDouble(rs[rs.length - 1].getPoint().getY(), "0.00000"));
  714. segmentList.add(segFim);
  715. ret = new SegmentDescription[segmentList.size()];
  716. for (int cont = 0; cont < segmentList.size(); cont++)
  717. ret[cont] = segmentList.get(cont).seg;
  718. cumulativeDistance = 0;
  719. for (int x = 0; x < ret.length; x++) {
  720. cumulativeDistance += ret[x].getDistance();
  721. ret[x].setCumulativeDistance(cumulativeDistance);
  722. }
  723. ret = setToolFeeDB(ret, pedagioList, tollFeeCat);
  724. if (ro.getRouteDetails().getPoiRoute() != null)
  725. ret = setPoiRouteDB(ret, ro.getRouteDetails().getPoiRoute());
  726. List<SegmentDescription> segList = new ArrayList<SegmentDescription>();
  727. segList.add(ret[0]);
  728. // Verificar aqui
  729. if (ro.getRouteDetails().getDescriptionType() == 1) {
  730. double totalTime = 0;
  731. // totalTime = 0;
  732. // for (int x = 0; x < ret.length; x++) {
  733. // if (!ret[x].getTime().equals(""))
  734. // totalTime += Double.parseDouble(ret[x].getTime().substring(0,ret[x].getTime().indexOf(' ')));
  735. // }
  736. for (int x = 0; x < ret.length; x++) {
  737. if ( ret[x].getDescription().toUpperCase().indexOf("ROD.") >= 0 ||
  738. ret[x].getDescription().toUpperCase().indexOf("ESTR.") >= 0
  739. || !Functions.IsNullOrEmpty(ret[x].getTollFee()) || ret[x].getCommand().toLowerCase().contains("parada")
  740. || ret[x].getCommand().toLowerCase().contains("fim da")) {
  741. SegmentDescription seg = new SegmentDescription();
  742. if (!ret[x].getTime().equals(""))
  743. totalTime += Double.parseDouble(ret[x].getTime().substring(0,ret[x].getTime().indexOf(' ')));
  744. seg = ret[x];
  745. seg.setTime(totalTime + " sec");
  746. segList.add(seg);
  747. totalTime = 0;
  748. }else
  749. if (!ret[x].getTime().equals(""))
  750. totalTime += Double.parseDouble(ret[x].getTime().substring(0,ret[x].getTime().indexOf(' ')));
  751. }
  752. segList.add(ret[ret.length - 1]);
  753. ret = new SegmentDescription[segList.size()];
  754. ret = segList.toArray(new SegmentDescription[0]);
  755. for (int x = 1; x < ret.length - 2; x++) {
  756. if (!(ret[x].getCommand().toLowerCase().indexOf("parada") >= 0))
  757. ret[x].setCommand("Continue");
  758. if ((ret[x].getCommand().toLowerCase().indexOf("parada") >= 0))
  759. ret[x].setRoadType(ret[x - 1].getRoadType());
  760. }
  761. int qtdSeg = ret.length;
  762. SegmentDescription[] retAux = new SegmentDescription[qtdSeg];
  763. retAux = ret;
  764. // totalTime = 0;
  765. // for (int x = 0; x < ret.length; x++) {
  766. // if (!ret[x].getTime().equals(""))
  767. // totalTime += Double.parseDouble(ret[x].getTime().substring(0,ret[x].getTime().indexOf(' ')));
  768. // }
  769. Object[] obj = removeDuplicates(12, qtdSeg, retAux, ret, ro);
  770. ret = new SegmentDescription[0];
  771. ret = (SegmentDescription[]) obj[1];
  772. // totalTime = 0;
  773. // for (int x = 0; x < ret.length; x++) {
  774. // if (!ret[x].getTime().equals(""))
  775. // totalTime += Double.parseDouble(ret[x].getTime().substring(0,ret[x].getTime().indexOf(' ')));
  776. // }
  777. qtdSeg = (Integer) obj[0] + 1;
  778. ret = new SegmentDescription[0];
  779. ret = (SegmentDescription[]) obj[1];
  780. retAux = new SegmentDescription[qtdSeg];
  781. // String lastCity = "";
  782. for (int x = 0; x < qtdSeg; x++) {
  783. retAux[x] = new SegmentDescription();
  784. retAux[x].setCity(new City());
  785. if (x == 0) {
  786. // if (!Functions.IsNullOrEmpty(ret[x +
  787. // 1].getCity().getName()))
  788. // lastCity = ret[x + 1].getCity().getName();
  789. retAux[x].getCity().setName(ret[x + 1].getCity().getName());
  790. retAux[x].getCity().setState(ret[x + 1].getCity().getState());
  791. }
  792. retAux[x].getCity().setName(ret[x].getCity().getName());
  793. retAux[x].getCity().setState(ret[x].getCity().getState());
  794. retAux[x].setCommand(ret[x].getCommand());
  795. retAux[x].setCumulativeDistance(ret[x].getCumulativeDistance());
  796. retAux[x].setTime(ret[x].getTime());
  797. if (ret[x].getDescription().indexOf("passando") > 0)
  798. retAux[x].setDescription(ret[x].getDescription().substring(0, ret[x].getDescription().indexOf("passando") - 1));
  799. else
  800. retAux[x].setDescription(ret[x].getDescription());
  801. retAux[x].setDistance(ret[x].getDistance());
  802. retAux[x].setPoint(new Point());
  803. retAux[x].getPoint().setX(ret[x].getPoint().getX());
  804. retAux[x].getPoint().setY(ret[x].getPoint().getY());
  805. retAux[x].setRoadType(ret[x].getRoadType());
  806. retAux[x].setTollFee(ret[x].getTollFee());
  807. retAux[x].setTollFeeDetails(new TollFeeDetails());
  808. retAux[x].getTollFeeDetails().setAddress(ret[x].getTollFeeDetails().getAddress());
  809. retAux[x].getTollFeeDetails().setConcession(ret[x].getTollFeeDetails().getConcession());
  810. retAux[x].getTollFeeDetails().setDirection(ret[x].getTollFeeDetails().getDirection());
  811. retAux[x].getTollFeeDetails().setName(ret[x].getTollFeeDetails().getName());
  812. retAux[x].getTollFeeDetails().setPhone(ret[x].getTollFeeDetails().getPhone());
  813. retAux[x].getTollFeeDetails().setPrice(ret[x].getTollFeeDetails().getPrice());
  814. retAux[x].getTollFeeDetails().setPricePerAxle(ret[x].getTollFeeDetails().getPricePerAxle());
  815. retAux[x].getTollFeeDetails().setState(ret[x].getTollFeeDetails().getState());
  816. retAux[x].setPoiRoute(ret[x].getPoiRoute());
  817. if (ret[x].getPoiRouteDetails() != null) {
  818. retAux[x].setPoiRouteDetails(new POIDetails[ret[x].getPoiRouteDetails().length]);
  819. for (int z = 0; z < ret[x].getPoiRouteDetails().length; z++) {
  820. retAux[x].getPoiRouteDetails()[z] = new POIDetails();
  821. retAux[x].getPoiRouteDetails()[z].setAddressInfo(ret[x].getPoiRouteDetails()[z].getAddressInfo());
  822. retAux[x].getPoiRouteDetails()[z].setClientID(ret[x].getPoiRouteDetails()[z].getClientID());
  823. retAux[x].getPoiRouteDetails()[z].setName(ret[x].getPoiRouteDetails()[z].getName());
  824. retAux[x].getPoiRouteDetails()[z].setPoint(new Point());
  825. retAux[x].getPoiRouteDetails()[z].getPoint().setX(ret[x].getPoiRouteDetails()[z].getPoint().getX());
  826. retAux[x].getPoiRouteDetails()[z].getPoint().setY(ret[x].getPoiRouteDetails()[z].getPoint().getY());
  827. retAux[x].getPoiRouteDetails()[z].setSource(ret[x].getPoiRouteDetails()[z].getSource());
  828. }
  829. }
  830. }
  831. ret = new SegmentDescription[qtdSeg];
  832. ret = retAux;
  833. ret[0].setRoadType("O");
  834. ret[ret.length - 1].setRoadType("D");
  835. }
  836. if (ro.getRouteDetails().getDescriptionType() == 2) {
  837. }
  838. if (ro.getRouteDetails().getDescriptionType() == 10) {
  839. for (int x = 0; x < ret.length; x++) {
  840. ret[x].setDescription(ret[x].getDescription().replace(" Pista Lateral", "").replace(" - Pista Lateral", "")
  841. .replace("Ac. P/ ", "").replace("Rod ", "Rod. ").replace(" -", ""));
  842. }
  843. SegmentDescription[] _segmentDescriptionAux = ret;
  844. SegmentDescription[] _segmentDescription = ret;
  845. int qtdSeg = ret.length;
  846. Object[] obj = removeDuplicates(1, qtdSeg, _segmentDescriptionAux, _segmentDescription, ro);
  847. qtdSeg = (Integer) obj[0] + 1;
  848. _segmentDescription = new SegmentDescription[0];
  849. _segmentDescription = (SegmentDescription[]) obj[1];
  850. _segmentDescriptionAux = new SegmentDescription[qtdSeg];
  851. for (int x = 0; x < qtdSeg; x++) {
  852. _segmentDescriptionAux[x] = new SegmentDescription();
  853. _segmentDescriptionAux[x].setCity(new City());
  854. _segmentDescriptionAux[x].getCity().setName(_segmentDescription[x].getCity().getName());
  855. _segmentDescriptionAux[x].getCity().setState(_segmentDescription[x].getCity().getState());
  856. _segmentDescriptionAux[x].setCommand(_segmentDescription[x].getCommand());
  857. _segmentDescriptionAux[x].setCumulativeDistance(_segmentDescription[x].getCumulativeDistance());
  858. _segmentDescriptionAux[x].setDescription(_segmentDescription[x].getDescription());
  859. _segmentDescriptionAux[x].setDistance(_segmentDescription[x].getDistance());
  860. _segmentDescriptionAux[x].setPoint(new Point());
  861. _segmentDescriptionAux[x].getPoint().setX(_segmentDescription[x].getPoint().getX());
  862. _segmentDescriptionAux[x].getPoint().setY(_segmentDescription[x].getPoint().getY());
  863. _segmentDescriptionAux[x].setRoadType(_segmentDescription[x].getRoadType());
  864. _segmentDescriptionAux[x].setTollFee(_segmentDescription[x].getTollFee());
  865. _segmentDescriptionAux[x].setTollFeeDetails(new TollFeeDetails());
  866. _segmentDescriptionAux[x].getTollFeeDetails().setAddress(_segmentDescription[x].getTollFeeDetails().getAddress());
  867. _segmentDescriptionAux[x].getTollFeeDetails().setConcession(_segmentDescription[x].getTollFeeDetails().getConcession());
  868. _segmentDescriptionAux[x].getTollFeeDetails().setDirection(_segmentDescription[x].getTollFeeDetails().getDirection());
  869. _segmentDescriptionAux[x].getTollFeeDetails().setName(_segmentDescription[x].getTollFeeDetails().getName());
  870. _segmentDescriptionAux[x].getTollFeeDetails().setPhone(_segmentDescription[x].getTollFeeDetails().getPhone());
  871. _segmentDescriptionAux[x].getTollFeeDetails().setPrice(_segmentDescription[x].getTollFeeDetails().getPrice());
  872. _segmentDescriptionAux[x].getTollFeeDetails().setPricePerAxle(_segmentDescription[x].getTollFeeDetails().getPricePerAxle());
  873. _segmentDescriptionAux[x].getTollFeeDetails().setState(_segmentDescription[x].getTollFeeDetails().getState());
  874. _segmentDescriptionAux[x].setPoiRoute(_segmentDescription[x].getPoiRoute());
  875. if (_segmentDescription[x].getPoiRouteDetails() != null) {
  876. _segmentDescriptionAux[x].setPoiRouteDetails(new POIDetails[_segmentDescription[x].getPoiRouteDetails().length]);
  877. for (int z = 0; z < _segmentDescription[x].getPoiRouteDetails().length; z++) {
  878. _segmentDescriptionAux[x].getPoiRouteDetails()[z] = new POIDetails();
  879. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setAddressInfo(_segmentDescription[x].getPoiRouteDetails()[z]
  880. .getAddressInfo());
  881. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setClientID(_segmentDescription[x].getPoiRouteDetails()[z]
  882. .getClientID());
  883. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setName(_segmentDescription[x].getPoiRouteDetails()[z].getName());
  884. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setPoint(new Point());
  885. _segmentDescriptionAux[x].getPoiRouteDetails()[z].getPoint().setX(
  886. _segmentDescription[x].getPoiRouteDetails()[z].getPoint().getX());
  887. _segmentDescriptionAux[x].getPoiRouteDetails()[z].getPoint().setY(
  888. _segmentDescription[x].getPoiRouteDetails()[z].getPoint().getY());
  889. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setSource(_segmentDescription[x].getPoiRouteDetails()[z].getSource());
  890. }
  891. }
  892. }
  893. _segmentDescription = new SegmentDescription[qtdSeg];
  894. _segmentDescription = _segmentDescriptionAux;
  895. Object[] obj1 = removeDuplicates(4, qtdSeg, _segmentDescriptionAux, _segmentDescription, ro);
  896. qtdSeg = (Integer) obj1[0] + 1;
  897. _segmentDescription = new SegmentDescription[0];
  898. _segmentDescription = (SegmentDescription[]) obj1[1];
  899. _segmentDescriptionAux = new SegmentDescription[qtdSeg];
  900. for (int x = 0; x < qtdSeg; x++) {
  901. _segmentDescriptionAux[x] = new SegmentDescription();
  902. _segmentDescriptionAux[x].setCity(new City());
  903. if (_segmentDescription[x].getCity().getName().contains("_"))
  904. _segmentDescriptionAux[x].getCity().setName(
  905. _segmentDescription[x].getCity().getName().substring(0, _segmentDescription[x].getCity().getName().length() - 1));
  906. else
  907. _segmentDescriptionAux[x].getCity().setName(_segmentDescription[x].getCity().getName());
  908. _segmentDescriptionAux[x].getCity().setState(_segmentDescription[x].getCity().getState());
  909. _segmentDescriptionAux[x].setCommand(_segmentDescription[x].getCommand());
  910. _segmentDescriptionAux[x].setCumulativeDistance(_segmentDescription[x].getCumulativeDistance());
  911. _segmentDescriptionAux[x].setDescription(_segmentDescription[x].getDescription());
  912. _segmentDescriptionAux[x].setDistance(_segmentDescription[x].getDistance());
  913. _segmentDescriptionAux[x].setPoint(new Point());
  914. _segmentDescriptionAux[x].getPoint().setX(_segmentDescription[x].getPoint().getX());
  915. _segmentDescriptionAux[x].getPoint().setY(_segmentDescription[x].getPoint().getY());
  916. _segmentDescriptionAux[x].setRoadType(_segmentDescription[x].getRoadType());
  917. _segmentDescriptionAux[x].setTollFee(_segmentDescription[x].getTollFee());
  918. _segmentDescriptionAux[x].setTollFeeDetails(new TollFeeDetails());
  919. _segmentDescriptionAux[x].getTollFeeDetails().setAddress(_segmentDescription[x].getTollFeeDetails().getAddress());
  920. _segmentDescriptionAux[x].getTollFeeDetails().setConcession(_segmentDescription[x].getTollFeeDetails().getConcession());
  921. _segmentDescriptionAux[x].getTollFeeDetails().setDirection(_segmentDescription[x].getTollFeeDetails().getDirection());
  922. _segmentDescriptionAux[x].getTollFeeDetails().setName(_segmentDescription[x].getTollFeeDetails().getName());
  923. _segmentDescriptionAux[x].getTollFeeDetails().setPhone(_segmentDescription[x].getTollFeeDetails().getPhone());
  924. _segmentDescriptionAux[x].getTollFeeDetails().setPrice(_segmentDescription[x].getTollFeeDetails().getPrice());
  925. _segmentDescriptionAux[x].getTollFeeDetails().setPricePerAxle(_segmentDescription[x].getTollFeeDetails().getPricePerAxle());
  926. _segmentDescriptionAux[x].getTollFeeDetails().setState(_segmentDescription[x].getTollFeeDetails().getState());
  927. _segmentDescriptionAux[x].setPoiRoute(_segmentDescription[x].getPoiRoute());
  928. if (_segmentDescription[x].getPoiRouteDetails() != null) {
  929. _segmentDescriptionAux[x].setPoiRouteDetails(new POIDetails[_segmentDescription[x].getPoiRouteDetails().length]);
  930. for (int z = 0; z < _segmentDescription[x].getPoiRouteDetails().length; z++) {
  931. _segmentDescriptionAux[x].getPoiRouteDetails()[z] = new POIDetails();
  932. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setAddressInfo(_segmentDescription[x].getPoiRouteDetails()[z]
  933. .getAddressInfo());
  934. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setClientID(_segmentDescription[x].getPoiRouteDetails()[z]
  935. .getClientID());
  936. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setName(_segmentDescription[x].getPoiRouteDetails()[z].getName());
  937. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setPoint(new Point());
  938. _segmentDescriptionAux[x].getPoiRouteDetails()[z].getPoint().setX(
  939. _segmentDescription[x].getPoiRouteDetails()[z].getPoint().getX());
  940. _segmentDescriptionAux[x].getPoiRouteDetails()[z].getPoint().setY(
  941. _segmentDescription[x].getPoiRouteDetails()[z].getPoint().getY());
  942. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setSource(_segmentDescription[x].getPoiRouteDetails()[z].getSource());
  943. }
  944. }
  945. }
  946. ret = null;
  947. ret = _segmentDescriptionAux;
  948. segList = new ArrayList<SegmentDescription>();
  949. SegmentDescription seg = new SegmentDescription();
  950. String rodoviaAnterior = "";
  951. double distanciaRodovia = 0;
  952. int posicaoRodovia = 0;
  953. for (int x = 0; x < ret.length; x++) {
  954. if ((!ret[x].getDescription().toLowerCase().contains("rod.") && !ret[x].getDescription().toLowerCase().contains("rod ") && !ret[x]
  955. .getDescription().toLowerCase().contains("estr."))) {
  956. if (ret[x].getCommand().toLowerCase().contains("in�cio") || ret[x].getCommand().toLowerCase().contains("fim")
  957. || ret[x].getDescription().toLowerCase().contains("retorno") || ret[x].getCommand().toLowerCase().contains("parada")) {
  958. seg = ret[x];
  959. segList.add(seg);
  960. seg = new SegmentDescription();
  961. } else {
  962. if (!Functions.IsNullOrEmpty(ret[x].getTollFee())) {
  963. seg = ret[x];
  964. segList.add(seg);
  965. seg = new SegmentDescription();
  966. } else {
  967. // seg = ret[x];
  968. seg.setDescription("Per�metro Urbano");
  969. seg.setCumulativeDistance(ret[x].getCumulativeDistance());
  970. seg.setDistance(seg.getDistance() + ret[x].getDistance());
  971. seg.setCity(ret[x].getCity());
  972. seg.setCommand("Continue");
  973. seg.setPoint(ret[x].getPoint());
  974. seg.setRoadType("P");
  975. if (!Functions.IsNullOrEmpty(seg.getPoiRoute()))
  976. seg.setPoiRoute(ret[x].getPoiRoute());
  977. if (ret[x].getPoiRouteDetails() != null) {
  978. if (seg.getPoiRouteDetails() == null) {
  979. seg.setPoiRouteDetails(new POIDetails[ret[x].getPoiRouteDetails().length]);
  980. for (int z = 0; z < ret[x].getPoiRouteDetails().length; z++) {
  981. seg.getPoiRouteDetails()[z] = new POIDetails();
  982. seg.getPoiRouteDetails()[z].setAddressInfo(ret[x].getPoiRouteDetails()[z].getAddressInfo());
  983. seg.getPoiRouteDetails()[z].setClientID(ret[x].getPoiRouteDetails()[z].getClientID());
  984. seg.getPoiRouteDetails()[z].setName(ret[x].getPoiRouteDetails()[z].getName());
  985. seg.getPoiRouteDetails()[z].setPoint(new Point());
  986. seg.getPoiRouteDetails()[z].getPoint().setX(ret[x].getPoiRouteDetails()[z].getPoint().getX());
  987. seg.getPoiRouteDetails()[z].getPoint().setY(ret[x].getPoiRouteDetails()[z].getPoint().getY());
  988. seg.getPoiRouteDetails()[z].setSource(ret[x].getPoiRouteDetails()[z].getSource());
  989. }
  990. } else {
  991. }
  992. }
  993. if (x + 1 < ret.length) {
  994. if (ret[x + 1].getDescription().toLowerCase().contains("rod.")
  995. || ret[x + 1].getDescription().toLowerCase().contains("estr.")
  996. || !Functions.IsNullOrEmpty(ret[x + 1].getTollFee())
  997. || ret[x + 1].getCommand().toLowerCase().contains("parada")
  998. || ret[x + 1].getCommand().toLowerCase().contains("in�cio")
  999. || ret[x + 1].getDescription().toLowerCase().contains("retorno")
  1000. || ret[x + 1].getCommand().toLowerCase().contains("fim")) {
  1001. segList.add(seg);
  1002. seg = new SegmentDescription();
  1003. }
  1004. }
  1005. }
  1006. }
  1007. } else {
  1008. if (!Functions.IsNullOrEmpty(ret[x].getTollFee())) {
  1009. seg = ret[x];
  1010. segList.add(seg);
  1011. seg = new SegmentDescription();
  1012. distanciaRodovia += ret[x].getDistance();
  1013. } else {
  1014. if (Functions.IsNullOrEmpty(rodoviaAnterior)) {
  1015. rodoviaAnterior = ret[x].getDescription().replace(" Pista Lateral", "").replace(" - Pista Lateral", "")
  1016. .replace("Ac. P/ ", "");
  1017. // seg = ret[x];
  1018. seg.setCity(new City());
  1019. seg.setDescription("#Siga pela " + rodoviaAnterior);
  1020. seg.setCumulativeDistance(0);
  1021. seg.setCommand("");
  1022. seg.setPoint(ret[x].getPoint());
  1023. seg.setDistance(ret[x].getDistance());
  1024. distanciaRodovia = ret[x].getDistance();
  1025. segList.add(seg);
  1026. seg = new SegmentDescription();
  1027. posicaoRodovia = segList.size() - 1;
  1028. segList.add(ret[x]);
  1029. } else {
  1030. if ((rodoviaAnterior.equals(ret[x].getDescription()) || rodoviaAnterior.contains(ret[x].getDescription()) || ret[x]
  1031. .getDescription().contains(rodoviaAnterior))) {
  1032. distanciaRodovia += ret[x].getDistance();
  1033. segList.add(ret[x]);
  1034. if (x + 1 < ret.length) {
  1035. if ((!ret[x + 1].getDescription().toLowerCase().contains("rod ")
  1036. && !ret[x + 1].getDescription().toLowerCase().contains("rod.") && !ret[x + 1].getDescription()
  1037. .toLowerCase().contains("estr."))) {
  1038. // segList.Add(seg);
  1039. SegmentDescription[] segAux = new SegmentDescription[segList.size()];
  1040. for (int c = 0; c < segList.size(); c++)
  1041. segAux[c] = (SegmentDescription) segList.get(c);
  1042. segAux[posicaoRodovia].setDistance(distanciaRodovia);
  1043. segList.clear();
  1044. for (int w = 0; w < segAux.length; w++)
  1045. segList.add(segAux[w]);
  1046. rodoviaAnterior = "";
  1047. distanciaRodovia = 0;
  1048. }
  1049. }
  1050. } else {
  1051. SegmentDescription[] segAux = new SegmentDescription[segList.size()];
  1052. for (int c = 0; c < segList.size(); c++)
  1053. segAux[c] = (SegmentDescription) segList.get(c);
  1054. segAux[posicaoRodovia].setDistance(distanciaRodovia);
  1055. segList.clear();
  1056. for (int w = 0; w < segAux.length; w++)
  1057. segList.add(segAux[w]);
  1058. rodoviaAnterior = ret[x].getDescription().replace(" Pista Lateral", "").replace(" - Pista Lateral", "")
  1059. .replace("Ac. P/ ", "");
  1060. // seg = ret[x];
  1061. seg.setCity(new City());
  1062. seg.setDescription("#Siga pela " + rodoviaAnterior);
  1063. seg.setCumulativeDistance(0);
  1064. seg.setCommand("");
  1065. seg.setPoint(ret[x].getPoint());
  1066. seg.setDistance(ret[x].getDistance());
  1067. distanciaRodovia = ret[x].getDistance();
  1068. segList.add(seg);
  1069. seg = new SegmentDescription();
  1070. posicaoRodovia = segList.size() - 1;
  1071. segList.add(ret[x]);
  1072. }
  1073. }
  1074. }
  1075. }
  1076. }
  1077. ret = null;
  1078. ret = new SegmentDescription[segList.size()];
  1079. for (int c = 0; c < segList.size(); c++)
  1080. ret[c] = (SegmentDescription) segList.get(c);
  1081. }
  1082. if (ro.getRouteDetails().getDescriptionType() == 3) {
  1083. SegmentDescription[] _segmentDescriptionAux = ret;
  1084. SegmentDescription[] _segmentDescription = ret;
  1085. int qtdSeg = ret.length;
  1086. Object[] obj1 = removeDuplicates(1, qtdSeg, _segmentDescriptionAux, _segmentDescription, ro);
  1087. qtdSeg = (Integer) obj1[0] + 1;
  1088. _segmentDescription = new SegmentDescription[0];
  1089. _segmentDescription = (SegmentDescription[]) obj1[1];
  1090. _segmentDescriptionAux = new SegmentDescription[qtdSeg];
  1091. for (int x = 0; x < qtdSeg; x++) {
  1092. _segmentDescriptionAux[x] = new SegmentDescription();
  1093. _segmentDescriptionAux[x].setCity(new City());
  1094. _segmentDescriptionAux[x].getCity().setName(_segmentDescription[x].getCity().getName());
  1095. _segmentDescriptionAux[x].getCity().setState(_segmentDescription[x].getCity().getState());
  1096. _segmentDescriptionAux[x].setCommand(_segmentDescription[x].getCommand());
  1097. _segmentDescriptionAux[x].setCumulativeDistance(_segmentDescription[x].getCumulativeDistance());
  1098. _segmentDescriptionAux[x].setDescription(_segmentDescription[x].getDescription());
  1099. _segmentDescriptionAux[x].setDistance(_segmentDescription[x].getDistance());
  1100. _segmentDescriptionAux[x].setPoint(new Point());
  1101. _segmentDescriptionAux[x].getPoint().setX(_segmentDescription[x].getPoint().getX());
  1102. _segmentDescriptionAux[x].getPoint().setY(_segmentDescription[x].getPoint().getY());
  1103. _segmentDescriptionAux[x].setRoadType(_segmentDescription[x].getRoadType());
  1104. _segmentDescriptionAux[x].setTollFee(_segmentDescription[x].getTollFee());
  1105. _segmentDescriptionAux[x].setTollFeeDetails(new TollFeeDetails());
  1106. _segmentDescriptionAux[x].getTollFeeDetails().setAddress(_segmentDescription[x].getTollFeeDetails().getAddress());
  1107. _segmentDescriptionAux[x].getTollFeeDetails().setConcession(_segmentDescription[x].getTollFeeDetails().getConcession());
  1108. _segmentDescriptionAux[x].getTollFeeDetails().setDirection(_segmentDescription[x].getTollFeeDetails().getDirection());
  1109. _segmentDescriptionAux[x].getTollFeeDetails().setName(_segmentDescription[x].getTollFeeDetails().getName());
  1110. _segmentDescriptionAux[x].getTollFeeDetails().setPhone(_segmentDescription[x].getTollFeeDetails().getPhone());
  1111. _segmentDescriptionAux[x].getTollFeeDetails().setPrice(_segmentDescription[x].getTollFeeDetails().getPrice());
  1112. _segmentDescriptionAux[x].getTollFeeDetails().setPricePerAxle(_segmentDescription[x].getTollFeeDetails().getPricePerAxle());
  1113. _segmentDescriptionAux[x].getTollFeeDetails().setState(_segmentDescription[x].getTollFeeDetails().getState());
  1114. _segmentDescriptionAux[x].setPoiRoute(_segmentDescription[x].getPoiRoute());
  1115. if (_segmentDescription[x].getPoiRouteDetails() != null) {
  1116. _segmentDescriptionAux[x].setPoiRouteDetails(new POIDetails[_segmentDescription[x].getPoiRouteDetails().length]);
  1117. for (int z = 0; z < _segmentDescription[x].getPoiRouteDetails().length; z++) {
  1118. _segmentDescriptionAux[x].getPoiRouteDetails()[z] = new POIDetails();
  1119. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setAddressInfo(_segmentDescription[x].getPoiRouteDetails()[z]
  1120. .getAddressInfo());
  1121. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setClientID(_segmentDescription[x].getPoiRouteDetails()[z]
  1122. .getClientID());
  1123. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setName(_segmentDescription[x].getPoiRouteDetails()[z].getName());
  1124. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setPoint(new Point());
  1125. _segmentDescriptionAux[x].getPoiRouteDetails()[z].getPoint().setX(
  1126. _segmentDescription[x].getPoiRouteDetails()[z].getPoint().getX());
  1127. _segmentDescriptionAux[x].getPoiRouteDetails()[z].getPoint().setY(
  1128. _segmentDescription[x].getPoiRouteDetails()[z].getPoint().getY());
  1129. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setSource(_segmentDescription[x].getPoiRouteDetails()[z].getSource());
  1130. }
  1131. }
  1132. }
  1133. _segmentDescription = new SegmentDescription[qtdSeg];
  1134. _segmentDescription = _segmentDescriptionAux;
  1135. Object[] obj11 = removeDuplicates(4, qtdSeg, _segmentDescriptionAux, _segmentDescription, ro);
  1136. qtdSeg = (Integer) obj11[0] + 1;
  1137. _segmentDescription = new SegmentDescription[0];
  1138. _segmentDescription = (SegmentDescription[]) obj11[1];
  1139. _segmentDescriptionAux = new SegmentDescription[qtdSeg];
  1140. for (int x = 0; x < qtdSeg; x++) {
  1141. _segmentDescriptionAux[x] = new SegmentDescription();
  1142. _segmentDescriptionAux[x].setCity(new City());
  1143. if (_segmentDescription[x].getCity().getName().contains("_"))
  1144. _segmentDescriptionAux[x].getCity().setName(
  1145. _segmentDescription[x].getCity().getName().substring(0, _segmentDescription[x].getCity().getName().length() - 1));
  1146. else
  1147. _segmentDescriptionAux[x].getCity().setName(_segmentDescription[x].getCity().getName());
  1148. _segmentDescriptionAux[x].getCity().setState(_segmentDescription[x].getCity().getState());
  1149. _segmentDescriptionAux[x].setCommand(_segmentDescription[x].getCommand());
  1150. _segmentDescriptionAux[x].setCumulativeDistance(_segmentDescription[x].getCumulativeDistance());
  1151. _segmentDescriptionAux[x].setDescription(_segmentDescription[x].getDescription());
  1152. _segmentDescriptionAux[x].setDistance(_segmentDescription[x].getDistance());
  1153. _segmentDescriptionAux[x].setPoint(new Point());
  1154. _segmentDescriptionAux[x].getPoint().setX(_segmentDescription[x].getPoint().getX());
  1155. _segmentDescriptionAux[x].getPoint().setY(_segmentDescription[x].getPoint().getY());
  1156. _segmentDescriptionAux[x].setRoadType(_segmentDescription[x].getRoadType());
  1157. _segmentDescriptionAux[x].setTollFee(_segmentDescription[x].getTollFee());
  1158. _segmentDescriptionAux[x].setTollFeeDetails(new TollFeeDetails());
  1159. _segmentDescriptionAux[x].getTollFeeDetails().setAddress(_segmentDescription[x].getTollFeeDetails().getAddress());
  1160. _segmentDescriptionAux[x].getTollFeeDetails().setConcession(_segmentDescription[x].getTollFeeDetails().getConcession());
  1161. _segmentDescriptionAux[x].getTollFeeDetails().setDirection(_segmentDescription[x].getTollFeeDetails().getDirection());
  1162. _segmentDescriptionAux[x].getTollFeeDetails().setName(_segmentDescription[x].getTollFeeDetails().getName());
  1163. _segmentDescriptionAux[x].getTollFeeDetails().setPhone(_segmentDescription[x].getTollFeeDetails().getPhone());
  1164. _segmentDescriptionAux[x].getTollFeeDetails().setPrice(_segmentDescription[x].getTollFeeDetails().getPrice());
  1165. _segmentDescriptionAux[x].getTollFeeDetails().setPricePerAxle(_segmentDescription[x].getTollFeeDetails().getPricePerAxle());
  1166. _segmentDescriptionAux[x].getTollFeeDetails().setState(_segmentDescription[x].getTollFeeDetails().getState());
  1167. _segmentDescriptionAux[x].setPoiRoute(_segmentDescription[x].getPoiRoute());
  1168. if (_segmentDescription[x].getPoiRouteDetails() != null) {
  1169. _segmentDescriptionAux[x].setPoiRouteDetails(new POIDetails[_segmentDescription[x].getPoiRouteDetails().length]);
  1170. for (int z = 0; z < _segmentDescription[x].getPoiRouteDetails().length; z++) {
  1171. _segmentDescriptionAux[x].getPoiRouteDetails()[z] = new POIDetails();
  1172. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setAddressInfo(_segmentDescription[x].getPoiRouteDetails()[z]
  1173. .getAddressInfo());
  1174. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setClientID(_segmentDescription[x].getPoiRouteDetails()[z]
  1175. .getClientID());
  1176. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setName(_segmentDescription[x].getPoiRouteDetails()[z].getName());
  1177. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setPoint(new Point());
  1178. _segmentDescriptionAux[x].getPoiRouteDetails()[z].getPoint().setX(
  1179. _segmentDescription[x].getPoiRouteDetails()[z].getPoint().getX());
  1180. _segmentDescriptionAux[x].getPoiRouteDetails()[z].getPoint().setY(
  1181. _segmentDescription[x].getPoiRouteDetails()[z].getPoint().getY());
  1182. _segmentDescriptionAux[x].getPoiRouteDetails()[z].setSource(_segmentDescription[x].getPoiRouteDetails()[z].getSource());
  1183. }
  1184. }
  1185. }
  1186. ret = null;
  1187. ret = _segmentDescriptionAux;
  1188. }
  1189. } catch (Exception ex) {
  1190. ex.printStackTrace();
  1191. }
  1192. if (!Functions.IsNullOrEmpty(ro.getDataSource())) {
  1193. if (ro.getDataSource().toUpperCase().equals("BR")) {
  1194. for (int x = 1; x < ret.length - 1; x++) {
  1195. if (!(ret[x].getCommand().toLowerCase().indexOf("parada") >= 0))
  1196. ret[x].setCommand("Continue");
  1197. if ((ret[x].getCommand().toLowerCase().indexOf("parada") >= 0))
  1198. ret[x].setRoadType(ret[x - 1].getRoadType());
  1199. }
  1200. int qtdSeg = ret.length;
  1201. SegmentDescription[] retAux = new SegmentDescription[qtdSeg];
  1202. retAux = ret;
  1203. Object[] obj11 = removeDuplicates(10, qtdSeg, retAux, ret, ro);
  1204. qtdSeg = (Integer) obj11[0] + 1;
  1205. ret = new SegmentDescription[0];
  1206. ret = (SegmentDescription[]) obj11[1];
  1207. retAux = new SegmentDescription[qtdSeg];
  1208. String lastCity = "";
  1209. for (int x = 0; x < qtdSeg; x++) {
  1210. retAux[x] = new SegmentDescription();
  1211. retAux[x].setCity(new City());
  1212. if (x == 0) {
  1213. if (!Functions.IsNullOrEmpty(ret[x + 1].getCity().getName()))
  1214. lastCity = ret[x + 1].getCity().getName();
  1215. // retAux[x].city.name = ret[x + 1].city.name;
  1216. // retAux[x].city.state = ret[x + 1].city.state;
  1217. }
  1218. if (x > 0) {
  1219. if ((ret[x].getCity().getName().toLowerCase().equals(lastCity.toLowerCase()))) {
  1220. retAux[x].getCity().setName("");
  1221. retAux[x].getCity().setState(ret[x].getCity().getState());
  1222. } else {
  1223. if (!Functions.IsNullOrEmpty(ret[x].getCity().getName()))
  1224. lastCity = ret[x].getCity().getName();
  1225. retAux[x].getCity().setName(ret[x].getCity().getName());
  1226. retAux[x].getCity().setState(ret[x].getCity().getState());
  1227. }
  1228. }
  1229. retAux[x].setCommand(ret[x].getCommand());
  1230. retAux[x].setCumulativeDistance(ret[x].getCumulativeDistance());
  1231. if (ret[x].getDescription().indexOf("passando") > 0)
  1232. retAux[x].setDescription(ret[x].getDescription().substring(0, ret[x].getDescription().indexOf("passando") - 1));
  1233. else
  1234. retAux[x].setDescription(ret[x].getDescription());
  1235. retAux[x].setDistance(ret[x].getDistance());
  1236. retAux[x].setPoint(new Point());
  1237. retAux[x].getPoint().setX(ret[x].getPoint().getX());
  1238. retAux[x].getPoint().setY(ret[x].getPoint().getY());
  1239. retAux[x].setRoadType(ret[x].getRoadType());
  1240. retAux[x].setTollFee(ret[x].getTollFee());
  1241. retAux[x].setTollFeeDetails(new TollFeeDetails());
  1242. retAux[x].getTollFeeDetails().setAddress(ret[x].getTollFeeDetails().getAddress());
  1243. retAux[x].getTollFeeDetails().setConcession(ret[x].getTollFeeDetails().getConcession());
  1244. retAux[x].getTollFeeDetails().setDirection(ret[x].getTollFeeDetails().getDirection());
  1245. retAux[x].getTollFeeDetails().setName(ret[x].getTollFeeDetails().getName());
  1246. retAux[x].getTollFeeDetails().setPhone(ret[x].getTollFeeDetails().getPhone());
  1247. retAux[x].getTollFeeDetails().setPrice(ret[x].getTollFeeDetails().getPrice());
  1248. retAux[x].getTollFeeDetails().setPricePerAxle(ret[x].getTollFeeDetails().getPricePerAxle());
  1249. retAux[x].getTollFeeDetails().setState(ret[x].getTollFeeDetails().getState());
  1250. retAux[x].setPoiRoute(ret[x].getPoiRoute());
  1251. if (ret[x].getPoiRouteDetails() != null) {
  1252. retAux[x].setPoiRouteDetails(new POIDetails[ret[x].getPoiRouteDetails().length]);
  1253. for (int z = 0; z < ret[x].getPoiRouteDetails().length; z++) {
  1254. retAux[x].getPoiRouteDetails()[z] = new POIDetails();
  1255. retAux[x].getPoiRouteDetails()[z].setAddressInfo(ret[x].getPoiRouteDetails()[z].getAddressInfo());
  1256. retAux[x].getPoiRouteDetails()[z].setClientID(ret[x].getPoiRouteDetails()[z].getClientID());
  1257. retAux[x].getPoiRouteDetails()[z].setName(ret[x].getPoiRouteDetails()[z].getName());
  1258. retAux[x].getPoiRouteDetails()[z].setPoint(new Point());
  1259. retAux[x].getPoiRouteDetails()[z].getPoint().setX(ret[x].getPoiRouteDetails()[z].getPoint().getX());
  1260. retAux[x].getPoiRouteDetails()[z].getPoint().setY(ret[x].getPoiRouteDetails()[z].getPoint().getY());
  1261. retAux[x].getPoiRouteDetails()[z].setSource(ret[x].getPoiRouteDetails()[z].getSource());
  1262. }
  1263. }
  1264. }
  1265. ret = new SegmentDescription[qtdSeg];
  1266. ret = retAux;
  1267. ret[0].setRoadType("O");
  1268. ret[ret.length - 1].setRoadType("D");
  1269. for (int x = 1; x < ret.length - 1; x++)
  1270. ret[x].setRoadType(ret[x].getRoadType() + "-" + ret[x + 1].getRoadType());
  1271. }
  1272. }
  1273. for (int x = 1; x < ret.length - 1; x++) {
  1274. try {
  1275. ret[x].setDistance(Functions.formatDouble(ret[x].getDistance(), "0.00"));
  1276. ret[x].setCumulativeDistance(Functions.formatDouble(ret[x].getCumulativeDistance(), "0.00"));
  1277. } catch (Exception e) {
  1278. System.out.println(e.getMessage());
  1279. }
  1280. }
  1281. return ret;
  1282. }
  1283. private Object[] removeDuplicates(int type, int qtdSeg, SegmentDescription[] _segmentDescriptionAux, SegmentDescription[] _segmentDescription,
  1284. RouteProximityOptions ro) {
  1285. double _cumulativeDistance = 0;
  1286. int cont = 0;
  1287. // type:
  1288. // 1 - remove duplicados
  1289. // 2 - ignora troca de piso
  1290. // 3 - ignora troca de cidade
  1291. // 4 - agrupamento de cidades
  1292. // 10 - remove duplicados BR
  1293. String fim, parada;
  1294. parada = "parada";
  1295. fim = "fim";
  1296. if (ro.getLanguage().equals("spanish")) {
  1297. parada = "parada";
  1298. fim = "fin";
  1299. }
  1300. if (ro.getLanguage().equals("portuguese")) {
  1301. parada = "parada";
  1302. fim = "fim";
  1303. }
  1304. if (ro.getLanguage().equals("english")) {
  1305. parada = "stop";
  1306. fim = "arrive";
  1307. }
  1308. if (ro.getLanguage().equals("espanhol")) {
  1309. parada = "parada";
  1310. fim = "fin";
  1311. }
  1312. if (ro.getLanguage().equals("portugues")) {
  1313. parada = "parada";
  1314. fim = "fim";
  1315. }
  1316. if (ro.getLanguage().equals("ingles")) {
  1317. parada = "stop";
  1318. fim = "arrive";
  1319. }
  1320. if (ro.getLanguage().equals("alemao")) {
  1321. parada = "parada";
  1322. fim = "fim";
  1323. }
  1324. for (int i = 0; i < qtdSeg; i++) {
  1325. if (type != 12) {
  1326. _cumulativeDistance += _segmentDescriptionAux[i].getDistance();
  1327. _segmentDescriptionAux[i].setDistance(_segmentDescriptionAux[i].getDistance());
  1328. _segmentDescriptionAux[i].setCumulativeDistance(_cumulativeDistance);
  1329. } else {
  1330. _segmentDescriptionAux[i].setDistance(_segmentDescriptionAux[i].getDistance());
  1331. _segmentDescriptionAux[i].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1332. }
  1333. if (_segmentDescriptionAux[i].getDescription() == null)
  1334. _segmentDescriptionAux[i].setDescription("");
  1335. if (_segmentDescriptionAux[i].getCity().getName() == null)
  1336. _segmentDescriptionAux[i].getCity().setName("");
  1337. if (i > 0) {
  1338. switch (type) {
  1339. case 1: {
  1340. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1341. cont++;
  1342. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1343. break;
  1344. }
  1345. if (_segmentDescriptionAux[i].getTollFee() != null && _segmentDescription[cont].getTollFee() != null) {
  1346. cont++;
  1347. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1348. break;
  1349. }
  1350. if (_segmentDescriptionAux[i].getPoiRoute() != null && _segmentDescription[cont].getPoiRoute() != null) {
  1351. cont++;
  1352. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1353. break;
  1354. }
  1355. if (_segmentDescriptionAux[i].getDescription().equals(_segmentDescription[cont].getDescription())
  1356. && _segmentDescriptionAux[i].getRoadType().equals(_segmentDescription[cont].getRoadType())
  1357. && _segmentDescriptionAux[i].getCity().getName().equals(_segmentDescription[cont].getCity().getName())) {
  1358. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1359. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance() + _segmentDescriptionAux[i].getDistance());
  1360. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1361. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1362. _segmentDescription[cont].setTollFee(_segmentDescriptionAux[i].getTollFee());
  1363. _segmentDescription[cont].setTollFeeDetails(_segmentDescriptionAux[i].getTollFeeDetails());
  1364. _segmentDescription[cont].setPoint(_segmentDescriptionAux[i].getPoint());
  1365. }
  1366. if (_segmentDescriptionAux[i].getPoiRoute() != null) {
  1367. _segmentDescription[cont].setPoiRoute(_segmentDescriptionAux[i].getPoiRoute());
  1368. _segmentDescription[cont].setPoiRouteDetails(_segmentDescriptionAux[i].getPoiRouteDetails());
  1369. }
  1370. } else {
  1371. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1372. _segmentDescription[cont].setTollFee(_segmentDescriptionAux[i].getTollFee());
  1373. _segmentDescription[cont].setTollFeeDetails(_segmentDescriptionAux[i].getTollFeeDetails());
  1374. _segmentDescription[cont].setPoint(_segmentDescriptionAux[i].getPoint());
  1375. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance()
  1376. + _segmentDescriptionAux[i].getDistance());
  1377. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1378. }
  1379. if (_segmentDescriptionAux[i].getPoiRoute() != null) {
  1380. _segmentDescription[cont].setPoiRoute(_segmentDescriptionAux[i].getPoiRoute());
  1381. _segmentDescription[cont].setPoiRouteDetails(_segmentDescriptionAux[i].getPoiRouteDetails());
  1382. }
  1383. }
  1384. } else {
  1385. try {
  1386. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1387. cont++;
  1388. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1389. } else {
  1390. if (_segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(fim) >= 0
  1391. || _segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(parada) >= 0
  1392. || _segmentDescriptionAux[i].getTollFee() != null || _segmentDescriptionAux[i].getPoiRoute() != null) {
  1393. cont++;
  1394. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1395. }
  1396. }
  1397. } catch (Exception ex) {
  1398. cont++;
  1399. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1400. }
  1401. }
  1402. }
  1403. break;
  1404. case 2: {
  1405. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1406. cont++;
  1407. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1408. break;
  1409. }
  1410. if (_segmentDescriptionAux[i].getTollFee() != null && _segmentDescription[cont].getTollFee() != null) {
  1411. cont++;
  1412. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1413. break;
  1414. }
  1415. if (_segmentDescriptionAux[i].getPoiRoute() != null && _segmentDescription[cont].getPoiRoute() != null) {
  1416. cont++;
  1417. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1418. break;
  1419. }
  1420. if (_segmentDescriptionAux[i].getDescription().equals(_segmentDescription[cont].getDescription())
  1421. && _segmentDescriptionAux[i].getCity().getName().equals(_segmentDescription[cont].getCity().getName())) {
  1422. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1423. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance() + _segmentDescriptionAux[i].getDistance());
  1424. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1425. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1426. _segmentDescription[cont].setTollFee(_segmentDescriptionAux[i].getTollFee());
  1427. _segmentDescription[cont].setTollFeeDetails(_segmentDescriptionAux[i].getTollFeeDetails());
  1428. }
  1429. if (_segmentDescriptionAux[i].getPoiRoute() != null) {
  1430. _segmentDescription[cont].setPoiRoute(_segmentDescriptionAux[i].getPoiRoute());
  1431. _segmentDescription[cont].setPoiRouteDetails(_segmentDescriptionAux[i].getPoiRouteDetails());
  1432. }
  1433. } else {
  1434. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1435. _segmentDescription[cont].setTollFee(_segmentDescriptionAux[i].getTollFee());
  1436. _segmentDescription[cont].setTollFeeDetails(_segmentDescriptionAux[i].getTollFeeDetails());
  1437. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance()
  1438. + _segmentDescriptionAux[i].getDistance());
  1439. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1440. }
  1441. if (_segmentDescriptionAux[i].getPoiRoute() != null) {
  1442. _segmentDescription[cont].setPoiRoute(_segmentDescriptionAux[i].getPoiRoute());
  1443. _segmentDescription[cont].setPoiRouteDetails(_segmentDescriptionAux[i].getPoiRouteDetails());
  1444. }
  1445. }
  1446. } else {
  1447. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1448. cont++;
  1449. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1450. } else {
  1451. if (_segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(fim) >= 0
  1452. || _segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(parada) >= 0
  1453. || _segmentDescriptionAux[i].getTollFee() != null || _segmentDescriptionAux[i].getPoiRoute() != null) {
  1454. cont++;
  1455. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1456. }
  1457. }
  1458. }
  1459. }
  1460. break;
  1461. case 3: {
  1462. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1463. cont++;
  1464. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1465. break;
  1466. }
  1467. if (_segmentDescriptionAux[i].getTollFee() != null && _segmentDescription[cont].getTollFee() != null) {
  1468. cont++;
  1469. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1470. break;
  1471. }
  1472. if (_segmentDescriptionAux[i].getPoiRoute() != null && _segmentDescription[cont].getPoiRoute() != null) {
  1473. cont++;
  1474. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1475. break;
  1476. }
  1477. if (_segmentDescriptionAux[i].getDescription().equals(_segmentDescription[cont].getDescription())) {
  1478. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1479. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance() + _segmentDescriptionAux[i].getDistance());
  1480. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1481. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1482. _segmentDescription[cont].setTollFee(_segmentDescriptionAux[i].getTollFee());
  1483. _segmentDescription[cont].setTollFeeDetails(_segmentDescriptionAux[i].getTollFeeDetails());
  1484. }
  1485. if (_segmentDescriptionAux[i].getPoiRoute() != null) {
  1486. _segmentDescription[cont].setPoiRoute(_segmentDescriptionAux[i].getPoiRoute());
  1487. _segmentDescription[cont].setPoiRouteDetails(_segmentDescriptionAux[i].getPoiRouteDetails());
  1488. }
  1489. } else {
  1490. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1491. _segmentDescription[cont].setTollFee(_segmentDescriptionAux[i].getTollFee());
  1492. _segmentDescription[cont].setTollFeeDetails(_segmentDescriptionAux[i].getTollFeeDetails());
  1493. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance()
  1494. + _segmentDescriptionAux[i].getDistance());
  1495. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1496. }
  1497. if (_segmentDescriptionAux[i].getPoiRoute() != null) {
  1498. _segmentDescription[cont].setPoiRoute(_segmentDescriptionAux[i].getPoiRoute());
  1499. _segmentDescription[cont].setPoiRouteDetails(_segmentDescriptionAux[i].getPoiRouteDetails());
  1500. }
  1501. }
  1502. } else {
  1503. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1504. cont++;
  1505. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1506. } else {
  1507. if (_segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(fim) >= 0
  1508. || _segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(parada) >= 0
  1509. || _segmentDescriptionAux[i].getTollFee() != null || _segmentDescriptionAux[i].getPoiRoute() != null) {
  1510. cont++;
  1511. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1512. }
  1513. }
  1514. }
  1515. }
  1516. break;
  1517. case 10: {
  1518. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1519. cont++;
  1520. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1521. break;
  1522. }
  1523. if (_segmentDescriptionAux[i].getTollFee() != null && _segmentDescription[cont].getTollFee() != null) {
  1524. cont++;
  1525. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1526. break;
  1527. }
  1528. if (_segmentDescriptionAux[i].getPoiRoute() != null && _segmentDescription[cont].getPoiRoute() != null) {
  1529. cont++;
  1530. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1531. break;
  1532. }
  1533. if (_segmentDescriptionAux[i].getDescription().equals(_segmentDescription[cont].getDescription())
  1534. && _segmentDescriptionAux[i].getRoadType().equals(_segmentDescription[cont].getRoadType())
  1535. && (_segmentDescriptionAux[i].getCity().getName().equals(_segmentDescription[cont].getCity().getName()) || (_segmentDescriptionAux[i]
  1536. .getCity().getName().equals("") || _segmentDescription[cont].getCity().getName().equals("")))) {
  1537. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1538. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance() + _segmentDescriptionAux[i].getDistance());
  1539. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1540. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1541. _segmentDescription[cont].setTollFee(_segmentDescriptionAux[i].getTollFee());
  1542. _segmentDescription[cont].setTollFeeDetails(_segmentDescriptionAux[i].getTollFeeDetails());
  1543. }
  1544. if (_segmentDescriptionAux[i].getPoiRoute() != null) {
  1545. _segmentDescription[cont].setPoiRoute(_segmentDescriptionAux[i].getPoiRoute());
  1546. _segmentDescription[cont].setPoiRouteDetails(_segmentDescriptionAux[i].getPoiRouteDetails());
  1547. }
  1548. } else {
  1549. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1550. _segmentDescription[cont].setTollFee(_segmentDescriptionAux[i].getTollFee());
  1551. _segmentDescription[cont].setTollFeeDetails(_segmentDescriptionAux[i].getTollFeeDetails());
  1552. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance()
  1553. + _segmentDescriptionAux[i].getDistance());
  1554. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1555. }
  1556. if (_segmentDescriptionAux[i].getPoiRoute() != null) {
  1557. _segmentDescription[cont].setPoiRoute(_segmentDescriptionAux[i].getPoiRoute());
  1558. _segmentDescription[cont].setPoiRouteDetails(_segmentDescriptionAux[i].getPoiRouteDetails());
  1559. }
  1560. }
  1561. } else {
  1562. try {
  1563. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1564. cont++;
  1565. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1566. } else {
  1567. if (_segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(fim) >= 0
  1568. || _segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(parada) >= 0
  1569. || _segmentDescriptionAux[i].getTollFee() != null || _segmentDescriptionAux[i].getPoiRoute() != null) {
  1570. cont++;
  1571. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1572. }
  1573. }
  1574. } catch (Exception ex) {
  1575. cont++;
  1576. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1577. }
  1578. }
  1579. }
  1580. break;
  1581. case 12: {
  1582. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1583. cont++;
  1584. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1585. break;
  1586. }
  1587. if (_segmentDescriptionAux[i].getTollFee() != null && _segmentDescription[cont].getTollFee() != null) {
  1588. cont++;
  1589. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1590. break;
  1591. }
  1592. if (_segmentDescriptionAux[i].getPoiRoute() != null && _segmentDescription[cont].getPoiRoute() != null) {
  1593. cont++;
  1594. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1595. break;
  1596. }
  1597. if (_segmentDescriptionAux[i].getDescription().equals(_segmentDescription[cont].getDescription())
  1598. && _segmentDescriptionAux[i].getRoadType().equals(_segmentDescription[cont].getRoadType())
  1599. && (_segmentDescriptionAux[i].getCity().getName().equals(_segmentDescription[cont].getCity().getName()) || (_segmentDescriptionAux[i]
  1600. .getCity().getName().equals("") || _segmentDescription[cont].getCity().getName().equals("")))) {
  1601. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1602. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance() + _segmentDescriptionAux[i].getDistance());
  1603. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1604. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1605. _segmentDescription[cont].setTollFee(_segmentDescriptionAux[i].getTollFee());
  1606. _segmentDescription[cont].setTollFeeDetails(_segmentDescriptionAux[i].getTollFeeDetails());
  1607. }
  1608. if (_segmentDescriptionAux[i].getPoiRoute() != null) {
  1609. _segmentDescription[cont].setPoiRoute(_segmentDescriptionAux[i].getPoiRoute());
  1610. _segmentDescription[cont].setPoiRouteDetails(_segmentDescriptionAux[i].getPoiRouteDetails());
  1611. }
  1612. } else {
  1613. if (_segmentDescriptionAux[i].getTollFee() != null) {
  1614. _segmentDescription[cont].setTollFee(_segmentDescriptionAux[i].getTollFee());
  1615. _segmentDescription[cont].setTollFeeDetails(_segmentDescriptionAux[i].getTollFeeDetails());
  1616. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance()
  1617. + _segmentDescriptionAux[i].getDistance());
  1618. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1619. }
  1620. if (_segmentDescriptionAux[i].getPoiRoute() != null) {
  1621. _segmentDescription[cont].setPoiRoute(_segmentDescriptionAux[i].getPoiRoute());
  1622. _segmentDescription[cont].setPoiRouteDetails(_segmentDescriptionAux[i].getPoiRouteDetails());
  1623. }
  1624. }
  1625. } else {
  1626. try {
  1627. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1628. cont++;
  1629. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1630. } else {
  1631. if (_segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(fim) >= 0
  1632. || _segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(parada) >= 0
  1633. || _segmentDescriptionAux[i].getTollFee() != null || _segmentDescriptionAux[i].getPoiRoute() != null) {
  1634. cont++;
  1635. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1636. }
  1637. }
  1638. } catch (Exception ex) {
  1639. cont++;
  1640. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1641. }
  1642. }
  1643. }
  1644. break;
  1645. case 4: {
  1646. String cities = "";
  1647. if (_segmentDescriptionAux[i].getDescription().equals(_segmentDescription[cont].getDescription())
  1648. && _segmentDescriptionAux[i].getRoadType().equals(_segmentDescription[cont].getRoadType())) {
  1649. if (_segmentDescriptionAux[i].getTollFee() != "" || _segmentDescriptionAux[i].getPoiRoute() != ""
  1650. || _segmentDescription[cont].getPoiRoute() != "" || _segmentDescription[cont].getTollFee() != "") {
  1651. cont++;
  1652. cities = "";
  1653. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1654. } else {
  1655. if ((cities.indexOf(_segmentDescriptionAux[i].getCity().getName()) > -1 || cities.indexOf(_segmentDescription[cont]
  1656. .getCity().getName()) > -1)) {
  1657. String[] info = cities.split(Pattern.quote("_"));
  1658. for (int x = 0; x < info.length; x++) {
  1659. if (!Functions.IsNullOrEmpty(_segmentDescriptionAux[i].getCity().getName())) {
  1660. if (info[x].indexOf(_segmentDescriptionAux[i].getCity().getName().replace("_", "")) > -1) {
  1661. double km = Double.parseDouble(info[x].split(Pattern.quote("|"))[1])
  1662. + _segmentDescriptionAux[i].getDistance();
  1663. cities = cities.replace(info[x], _segmentDescriptionAux[i].getCity().getName().replace("_", "") + "|"
  1664. + km);
  1665. }
  1666. }
  1667. }
  1668. info = cities.split(Pattern.quote("_"));
  1669. for (int x = 0; x < info.length; x++) {
  1670. if (info[x].indexOf(_segmentDescription[cont].getCity().getName().replace("_", "")) > -1) {
  1671. double km = Double.parseDouble(info[x].split(Pattern.quote("|"))[1])
  1672. + _segmentDescription[cont].getDistance();
  1673. cities = cities.replace(info[x], _segmentDescription[cont].getCity().getName().replace("_", "") + "|" + km);
  1674. }
  1675. }
  1676. } else {
  1677. if (_segmentDescriptionAux[i].getCity().getName() != _segmentDescription[cont].getCity().getName()) {
  1678. if (_segmentDescription[cont].getCity().getName().split(Pattern.quote("_")).length > 2)
  1679. cities += _segmentDescription[cont].getCity().getName() + _segmentDescriptionAux[i].getCity().getName() + ";"
  1680. + _segmentDescriptionAux[i].getCity().getState() + "|" + _segmentDescriptionAux[i].getDistance()
  1681. + "_";
  1682. else
  1683. cities += _segmentDescription[cont].getCity().getName() + ";"
  1684. + _segmentDescription[cont].getCity().getState() + "|" + _segmentDescription[cont].getDistance()
  1685. + "_" + _segmentDescriptionAux[i].getCity().getName() + ";"
  1686. + _segmentDescriptionAux[i].getCity().getState() + "|" + _segmentDescriptionAux[i].getDistance()
  1687. + "_";
  1688. } else {
  1689. if (cities != "")
  1690. cities += _segmentDescriptionAux[i].getCity().getName() + ";"
  1691. + _segmentDescriptionAux[i].getCity().getState() + "|"
  1692. + (_segmentDescriptionAux[i].getDistance() + _segmentDescription[cont].getDistance()) + "_";
  1693. }
  1694. }
  1695. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1696. _segmentDescription[cont].setDistance(_segmentDescription[cont].getDistance()
  1697. + _segmentDescriptionAux[i].getDistance());
  1698. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1699. if (cities != "")
  1700. _segmentDescription[cont].getCity().setName(cities);
  1701. } else {
  1702. if (_segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(fim) >= 0
  1703. || _segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(parada) >= 0
  1704. || _segmentDescriptionAux[i].getTollFee() != "" || _segmentDescriptionAux[i].getPoiRoute() != "") {
  1705. cont++;
  1706. cities = "";
  1707. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1708. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1709. }
  1710. }
  1711. }
  1712. } else {
  1713. if (_segmentDescriptionAux[i].getTollFee() != "" || _segmentDescriptionAux[i].getPoiRoute() != ""
  1714. || _segmentDescription[cont].getPoiRoute() != "" || _segmentDescription[cont].getTollFee() != "") {
  1715. cont++;
  1716. cities = "";
  1717. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1718. } else {
  1719. if (_segmentDescriptionAux[i].getDistance() > 0) {
  1720. cont++;
  1721. cities = "";
  1722. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1723. } else {
  1724. if (_segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(fim) >= 0
  1725. || _segmentDescriptionAux[i].getCommand().toLowerCase().indexOf(parada) >= 0
  1726. || _segmentDescriptionAux[i].getTollFee() != "" || _segmentDescriptionAux[i].getPoiRoute() != "") {
  1727. cont++;
  1728. cities = "";
  1729. _segmentDescription[cont].setCumulativeDistance(_segmentDescriptionAux[i].getCumulativeDistance());
  1730. _segmentDescription[cont] = _segmentDescriptionAux[i];
  1731. }
  1732. }
  1733. }
  1734. }
  1735. }
  1736. break;
  1737. }
  1738. } else {
  1739. _segmentDescription[i] = _segmentDescriptionAux[i];
  1740. }
  1741. }
  1742. Object[] obj = new Object[2];
  1743. obj[0] = cont;
  1744. obj[1] = _segmentDescription;
  1745. return obj;
  1746. }
  1747. RouteStop[] removeRouteStop(RouteStop[] routeStop, int index) {
  1748. int add = 0;
  1749. RouteStop[] rs = new RouteStop[routeStop.length - 1];
  1750. for (int i = 0; i < routeStop.length; i++) {
  1751. if (i != index) {
  1752. rs[add] = routeStop[i];
  1753. add++;
  1754. }
  1755. }
  1756. return rs;
  1757. }
  1758. /*
  1759. * public Point[] convertFromDecarta(int precision, String coords) {
  1760. * List<Point> ptList = new List<Point>(); List<System.Drawing.Point>
  1761. * ptListP = new List<System.Drawing.Point>();
  1762. *
  1763. * int y = 0;
  1764. *
  1765. * String format = "0.";
  1766. *
  1767. * for (int x = 0; x < precision; x++) format += "0";
  1768. *
  1769. * String[] co = coords.split(Pattern.quote(",");
  1770. *
  1771. * for (int z = 0; z < co.length; z++) { if ((Convert.ToInt64(co[z +
  1772. * 1]).ToString().replace("|", "").length < (precision + 2))) { Point pt =
  1773. * new Point(); pt.y =
  1774. * Double.parseDouble(((Convert.ToInt64(ptList[y].y.ToString
  1775. * (format).replace(",", "").replace(".", "")) + Convert.ToInt64(co[z])) *
  1776. * Math.Pow(10, -precision)).ToString(format)); pt.x =
  1777. * Double.parseDouble(((Convert
  1778. * .ToInt64(ptList[y].x.ToString(format).replace(",", "").replace(".", ""))
  1779. * + Convert.ToInt64(co[z + 1])) * Math.Pow(10,
  1780. * -precision)).ToString(format));
  1781. *
  1782. * ptList.Add(pt);
  1783. *
  1784. * y++; } else { Point pt = new Point(); pt.y =
  1785. * Double.parseDouble((Convert.ToInt64(co[z]) * Math.Pow(10,
  1786. * -precision)).ToString(format)); pt.x =
  1787. * Double.parseDouble((Convert.ToInt64(co[z + 1]) * Math.Pow(10,
  1788. * -precision)).ToString(format));
  1789. *
  1790. * ptList.Add(pt); }
  1791. *
  1792. * z++; }
  1793. *
  1794. * return ptList.ToArray(); }
  1795. */
  1796. public String Translate(String text, String language) {
  1797. // ActionStay = se quede en la
  1798. // ActionGo = sigue
  1799. // ActionStraight = delante
  1800. // ActionBear = se quede en la
  1801. // ActionTurn = doble a la
  1802. // ActionMakeSharp = hace fuerte curva a la
  1803. // ActionContinue = sigue
  1804. // ActionBack = vuelte
  1805. // ActionSideRight = derecha
  1806. // ActionSideLeft = izquierda
  1807. // ActionTakeRamp = sube la rampa
  1808. // ActionOntoRamp = en la rampa
  1809. if (language.equals("espanhol")) {
  1810. if (text.toLowerCase().equals("make a left hand loop"))
  1811. text = "Doble a la izquierda";
  1812. if (text.toLowerCase().equals("make a u-turn"))
  1813. text = "Coge el retorno";
  1814. if (text.toLowerCase().equals("turn hard left"))
  1815. text = "Hace fuerte curva a la izquierda";
  1816. if (text.toLowerCase().equals("turn left"))
  1817. text = "Doble a la izquierda";
  1818. if (text.toLowerCase().equals("bear left"))
  1819. text = "Se quede en la izquierda";
  1820. if (text.toLowerCase().equals("continue"))
  1821. text = "Sigue";
  1822. if (text.toLowerCase().equals("bear right"))
  1823. text = "Se quede en la derecha";
  1824. if (text.toLowerCase().equals("turn right"))
  1825. text = "Doble a la derecha";
  1826. if (text.toLowerCase().equals("turn hard right"))
  1827. text = "Hace fuerte curva a la derecha";
  1828. if (text.toLowerCase().equals("make a right u-turn"))
  1829. text = "Coge el retorno derecha";
  1830. if (text.toLowerCase().equals("make a right hand loop"))
  1831. text = "Doble a la direita";
  1832. if (text.toLowerCase().equals("merge"))
  1833. text = "Sigue en la unificaci?n";
  1834. }
  1835. if (language.equals("portugues") || Functions.IsNullOrEmpty(language)) {
  1836. if (text.toLowerCase().equals("make a left hand loop"))
  1837. text = "Vire � esquerda";
  1838. if (text.toLowerCase().equals("make a u-turn"))
  1839. text = "Pegue o retorno";
  1840. if (text.toLowerCase().equals("turn hard left"))
  1841. text = "Fa�a curva acentuada � esquerda";
  1842. if (text.toLowerCase().equals("turn left"))
  1843. text = "Vire � esquerda";
  1844. if (text.toLowerCase().equals("bear left"))
  1845. text = "Permane�a � esquerda";
  1846. if (text.toLowerCase().equals("continue"))
  1847. text = "Continue";
  1848. if (text.toLowerCase().equals("bear right"))
  1849. text = "Permane�a � direita";
  1850. if (text.toLowerCase().equals("turn right"))
  1851. text = "Vire � direita";
  1852. if (text.toLowerCase().equals("turn hard right"))
  1853. text = "Fa�a curva acentuada � direita";
  1854. if (text.toLowerCase().equals("make a right u-turn"))
  1855. text = "Pegue o retorno da direita";
  1856. if (text.toLowerCase().equals("make a right hand loop"))
  1857. text = "Vire � direita";
  1858. if (text.toLowerCase().equals("merge"))
  1859. text = "Siga na unifica��o";
  1860. }
  1861. return text;
  1862. }
  1863. /*
  1864. * public String convertToDecarta(int precision, String coords) { String
  1865. * coordsDecarta = "";
  1866. *
  1867. * if (!Functions.IsNullOrEmpty(coords)) { String[] coord;
  1868. *
  1869. * if (coords.substring(coords.length - 1, 1) == ";") coords =
  1870. * coords.Remove(coords.length - 1, 1);
  1871. *
  1872. * coord = coords.split(Pattern.quote(";"); Int64 lngInt, latInt, lngIntNew,
  1873. * latIntNew; double lng, lat, pow; pow = Math.Pow(10, precision); lng =
  1874. * double.Parse(coord[0].ToString().split(Pattern.quote(" ")[0].replace('.',
  1875. * ',")); lat =
  1876. * double.Parse(coord[0].ToString().split(Pattern.quote(" ")[1].replace('.',
  1877. * ',")); lngInt = Convert.ToInt64(lng * pow); latInt = Convert.ToInt64(lat
  1878. * * pow);
  1879. *
  1880. * coordsDecarta = latInt + "," + lngInt;
  1881. *
  1882. * for (int x = 1; x < coord.length; x++) { lng =
  1883. * double.Parse(coord[x].ToString().split(Pattern.quote(" ")[0].replace('.',
  1884. * ',")); lat =
  1885. * double.Parse(coord[x].ToString().split(Pattern.quote(" ")[1].replace('.',
  1886. * ',")); lngIntNew = Convert.ToInt64(lng * pow); latIntNew =
  1887. * Convert.ToInt64(lat * pow); coordsDecarta += "," + (latIntNew - latInt) +
  1888. * "," + (lngIntNew - lngInt); lngInt = lngIntNew; latInt = latIntNew; } }
  1889. *
  1890. * return coordsDecarta; }
  1891. */
  1892. public SegmentDescription[] setToolFeeDB(SegmentDescription[] ret, List<TollFeeAux> pedagioList, int tollFeeCat) {
  1893. totalPedagios = 0;
  1894. try {
  1895. if (pedagioList.size() > 0) {
  1896. String pedList = "";
  1897. for (int w = 0; w < pedagioList.size(); w++)
  1898. pedList += pedagioList.get(w).getID() + ",";
  1899. pedList = pedList.substring(0, pedList.length() - 1);
  1900. String sql = "SELECT X, Y, ID_ESTABELECIMENTO_EXTERNO, NOME, SENTIDO, ENDERECO, CONCESSION, TELEFONE, ESTADO, VALOR, (TIPO"
  1901. + tollFeeCat + ") as VALORCAT";
  1902. sql += " From TB_MAPLINKRODOVIAS_TODAS_PEDAGIOS";
  1903. sql += " WHERE ID_ESTABELECIMENTO_EXTERNO IN (" + pedList + ")";
  1904. // busca no banco de dados as informa??es dos municipio, ped?gio
  1905. // e info clientes
  1906. Connection con = dataBase.getConnection("DADOS_WEBSERVICES");
  1907. try {
  1908. Statement st = con.createStatement();
  1909. ResultSet rr = st.executeQuery(sql.toUpperCase());
  1910. while (rr.next()) {
  1911. for (int w = 0; w < ret.length; w++) {
  1912. if (!Functions.IsNullOrEmpty(ret[w].getTollFee())) {
  1913. if (ret[w].getTollFeeDetails().getName().equals(rr.getString("ID_ESTABELECIMENTO_EXTERNO"))) {
  1914. TollFeeDetails tollFeeDetails = new TollFeeDetails();
  1915. tollFeeDetails.setName(rr.getString("NOME"));
  1916. tollFeeDetails.setName(tollFeeDetails.getName().replace("=", ""));
  1917. tollFeeDetails.setDirection(rr.getString("SENTIDO"));
  1918. tollFeeDetails.setAddress(rr.getString("ENDERECO"));
  1919. tollFeeDetails.setConcession(rr.getString("CONCESSION"));
  1920. tollFeeDetails.setPhone(rr.getString("TELEFONE"));
  1921. tollFeeDetails.setState(rr.getString("ESTADO"));
  1922. tollFeeDetails.setPricePerAxle(Double.parseDouble(rr.getString("VALOR").replace(",", ".")));
  1923. tollFeeDetails.setPrice(Double.parseDouble(rr.getString("VALORCAT").replace(",", ".")));
  1924. totalPedagios += tollFeeDetails.getPrice();
  1925. ret[w].setTollFeeDetails(tollFeeDetails);
  1926. }
  1927. }
  1928. }
  1929. }
  1930. rr.close();
  1931. st.close();
  1932. } catch (SQLException e1) {
  1933. } finally {
  1934. con.close();
  1935. }
  1936. }
  1937. } catch (Exception ex) {
  1938. }
  1939. return ret;
  1940. }
  1941. private boolean ValidaCitiesTaxiFare(String[] City) {
  1942. boolean retorno = false;
  1943. String anterior = City[0];
  1944. try {
  1945. for (int x = 0; x < City.length; x++) {
  1946. if (City[x].equals(anterior)) {
  1947. anterior = City[x];
  1948. } else
  1949. return retorno;
  1950. }
  1951. Connection con = dataBase.getConnection("DADOS_WEBSERVICES");
  1952. try {
  1953. Statement st = con.createStatement();
  1954. ResultSet rr = st.executeQuery("SELECT * FROM TB_TAXIFARE WHERE NOME IN ('" + City[0].toUpperCase() + "')");
  1955. if (rr.next()) {
  1956. retorno = true;
  1957. }
  1958. rr.close();
  1959. st.close();
  1960. } catch (Exception ex) {
  1961. } finally {
  1962. con.close();
  1963. }
  1964. } catch (Exception ex) {
  1965. }
  1966. return retorno;
  1967. }
  1968. private SegmentDescription[] setPoiRouteDB(SegmentDescription[] segmentDescription, String[] poiRoute) {
  1969. String sql = "";
  1970. List<POIDetails> poiDetailsList = new ArrayList<POIDetails>();
  1971. boolean avaiable;
  1972. try {
  1973. for (int i = 0; i < segmentDescription.length; i++) {
  1974. if (!Functions.IsNullOrEmpty(segmentDescription[i].getPoiRoute())) {
  1975. poiDetailsList.clear();
  1976. for (int x = 0; x < segmentDescription[i].getPoiRouteDetails().length; x++) {
  1977. avaiable = false;
  1978. getPoiRouteDBFields(segmentDescription[i].getPoiRouteDetails()[x]);
  1979. for (int z = 0; z < poiRoute.length; z++) {
  1980. if (poiSegSource != null) {
  1981. if (poiSegSource.toLowerCase().indexOf(poiRoute[z].toLowerCase()) > -1) {
  1982. avaiable = true;
  1983. break;
  1984. }
  1985. }
  1986. }
  1987. if (poiDataBase.equals("") || poiFieldList.equals("") || poiSource.equals(""))
  1988. avaiable = false;
  1989. if (avaiable) {
  1990. Connection con = dataBase.getConnection(poiDataBase);
  1991. sql = "SELECT " + poiFieldList;
  1992. sql += " FROM " + poiSource;
  1993. sql += " WHERE (ID_ESTABELECIMENTO_EXTERNO in ("
  1994. + segmentDescription[i].getPoiRouteDetails()[x].getClientID().substring(
  1995. segmentDescription[i].getPoiRouteDetails()[x].getClientID().indexOf(':') + 1) + ")) and X is not null";
  1996. try {
  1997. Statement st = con.createStatement();
  1998. ResultSet rr = st.executeQuery(sql.toUpperCase());
  1999. while (rr.next()) {
  2000. POIDetails pd = new POIDetails();
  2001. pd.setClientID(rr.getString(1));
  2002. pd.setName(rr.getString(2));
  2003. pd.setAddressInfo(rr.getString(3));
  2004. pd.getPoint().setX(rr.getDouble(4));
  2005. pd.getPoint().setY(rr.getDouble(5));
  2006. pd.setSource(poiSource);
  2007. poiDetailsList.add(pd);
  2008. }
  2009. rr.close();
  2010. st.close();
  2011. } catch (Exception ex) {
  2012. } finally {
  2013. con.close();
  2014. }
  2015. }
  2016. }
  2017. segmentDescription[i].setPoiRouteDetails(poiDetailsList.toArray(new POIDetails[0]));
  2018. if (segmentDescription[i].getPoiRouteDetails().length == 0)
  2019. segmentDescription[i].setPoiRoute("");
  2020. }
  2021. }
  2022. } catch (Exception ex) {
  2023. /*
  2024. * CommonFunctionHelper.gravarLogErro(
  2025. * "getPoiRouteDB - IdWebservice : Interno" , "SQL-> " + sql + " | "
  2026. * + "database-> " + poiDataBase + " | " + ex.Message.ToString() +
  2027. * "|" + ex.StackTrace + " - Assembly : " + System
  2028. * .Reflection.Assembly.GetExecutingAssembly().GetName().Version);
  2029. */
  2030. }
  2031. return segmentDescription;
  2032. }
  2033. private void getPoiRouteDBFields(POIDetails poiSegment) throws Exception {
  2034. String sql = "";
  2035. try {
  2036. Connection con = dataBase.getConnection("DADOS_WEBSERVICES");
  2037. sql = "SELECT idPoi, poiRoute, poiSource, poiFields, poiDataBase";
  2038. sql += " FROM TB_POIROUTE";
  2039. sql += " WHERE id = " + poiSegment.getClientID().substring(0, poiSegment.getClientID().indexOf(":"));
  2040. try {
  2041. Statement st = con.createStatement();
  2042. ResultSet rr = st.executeQuery(sql.toUpperCase());
  2043. while (rr.next()) {
  2044. poiID = rr.getString("IDPoi");
  2045. poiSource = rr.getString("poiSource");
  2046. poiSegSource = rr.getString("poiRoute");
  2047. poiFieldList = rr.getString("poiFields");
  2048. poiDataBase = rr.getString("poiDataBase");
  2049. }
  2050. rr.close();
  2051. st.close();
  2052. } catch (Exception ex) {
  2053. } finally {
  2054. con.close();
  2055. }
  2056. } catch (Exception ex) {
  2057. Utils.LogError("CC", "getPoiRouteDBFields - IdWebservice : Interno",
  2058. "SQL-> " + sql + " | " + "database-> dados_webservices | " + ex.getMessage() + "|" + ex.getStackTrace());
  2059. throw (new Exception("Problemas ao buscar estrutra poiRoute."));
  2060. }
  2061. }
  2062. public double[] getTaxiFare(RouteTotals rt, RouteStop[] rs) {
  2063. double[] Value = new double[2];
  2064. String Cities = "";
  2065. String[] City;
  2066. double TaxiStart = 0;
  2067. double TaxiFare1 = 0;
  2068. double TaxiFare2 = 0;
  2069. Value[0] = 0;
  2070. Value[1] = 0;
  2071. try {
  2072. ShapeDetect shp = new ShapeDetect();
  2073. for (int x = 0; x < rs.length; x++) {
  2074. try {
  2075. shp = Functions.getCity(rs[x].getPoint(), _server, _port, _dataSource);
  2076. if (x > 0)
  2077. Cities += "|" + shp.NAME.replace("'", " ");
  2078. else
  2079. Cities = shp.NAME.replace("'", " ");
  2080. } catch (Exception ex) {
  2081. }
  2082. }
  2083. City = Cities.split(Pattern.quote("|"));
  2084. if (ValidaCitiesTaxiFare(City)) {
  2085. Connection con = dataBase.getConnection("DADOS_WEBSERVICES");
  2086. try {
  2087. Statement st = con.createStatement();
  2088. ResultSet rr = st.executeQuery("SELECT * FROM TB_TAXIFARE WHERE NOME LIKE '%" + City[0].toUpperCase() + "%'");
  2089. {
  2090. if (rr.next()) {
  2091. TaxiStart = Double.parseDouble(rr.getString("TaxiStart"));
  2092. TaxiFare1 = Double.parseDouble(rr.getString("TaxiFare1"));
  2093. TaxiFare2 = Double.parseDouble(rr.getString("TaxiFare2"));
  2094. Value[0] = (rt.getTotalDistance() * TaxiFare1) + TaxiStart;
  2095. Value[1] = (rt.getTotalDistance() * TaxiFare2) + TaxiStart;
  2096. Value[0] = Functions.formatDouble(Value[0], "0.00");
  2097. Value[1] = Functions.formatDouble(Value[1], "0.00");
  2098. } else {
  2099. rr.close();
  2100. st.close();
  2101. return Value;
  2102. }
  2103. st.close();
  2104. rr.close();
  2105. }
  2106. } catch (Exception ex) {
  2107. } finally {
  2108. con.close();
  2109. }
  2110. } else {
  2111. Value[0] = 0;
  2112. Value[1] = 0;
  2113. }
  2114. } catch (Exception ex) {
  2115. Value[0] = 0;
  2116. Value[1] = 0;
  2117. }
  2118. return Value;
  2119. }
  2120. // calcula o n?mero de tempo da viagem
  2121. // formato P18Y9M4DT11H9M8S (18 years, 9 months, 4 days, 11 hours, 9 minutes
  2122. // and 8 seconds. private
  2123. String getTotalTime(double totalDistance, double averageSpeed) throws Exception {
  2124. String totalTime = "", strAux = "";
  2125. try {
  2126. int intTotalDays = 0, intTotalHours = 0, intTotalMinutes = 0;
  2127. if (averageSpeed != 0) {
  2128. strAux = String.valueOf(Functions.formatDouble((totalDistance / averageSpeed), "0.00"));
  2129. intTotalHours = Integer.parseInt(strAux.substring(0, strAux.indexOf(".")));
  2130. strAux = strAux.substring(strAux.indexOf(".") + 1);
  2131. intTotalMinutes = Integer.parseInt(strAux);
  2132. intTotalMinutes = (intTotalMinutes * 60) / 100;
  2133. if (intTotalHours >= 24) {
  2134. intTotalDays = intTotalHours / 24;
  2135. intTotalHours = intTotalHours % 24;
  2136. }
  2137. if (intTotalDays > 0)
  2138. totalTime = intTotalDays + "D";
  2139. totalTime += "T";
  2140. if (intTotalHours != 0)
  2141. totalTime += intTotalHours + "H";
  2142. if (intTotalMinutes != 0)
  2143. totalTime = totalTime + intTotalMinutes + "M";
  2144. totalTime = "P" + totalTime.trim();
  2145. }
  2146. } catch (Exception ex) {
  2147. throw (new Exception("Problemas ao calcular o tempo da viagem."));
  2148. }
  2149. if (totalTime.equals("PT"))
  2150. totalTime = "PT1M";
  2151. return totalTime;
  2152. }
  2153. // calcula o n?mero de tempo da viagem
  2154. // formato P18Y9M4DT11H9M8S (18 years, 9 months, 4 days, 11 hours, 9 minutes
  2155. // and 8 seconds. private
  2156. public static String getTotalTime(double seconds) throws Exception {
  2157. String totalTime = "", strAux = "";
  2158. try {
  2159. int intTotalDays = 0, intTotalHours = 0, intTotalMinutes = 0;
  2160. strAux = String.valueOf(Functions.formatDouble((seconds / 60 / 60), "0.00"));
  2161. intTotalHours = Integer.parseInt(strAux.substring(0, strAux.indexOf(".")));
  2162. intTotalMinutes = Integer.parseInt(strAux.substring(strAux.indexOf(".") + 1, strAux.length() - strAux.indexOf(".") + 1));
  2163. intTotalMinutes = (intTotalMinutes * 60) / 100;
  2164. if (intTotalHours >= 24) {
  2165. intTotalDays = intTotalHours / 24;
  2166. intTotalHours = intTotalHours % 24;
  2167. }
  2168. if (intTotalDays > 0)
  2169. totalTime = intTotalDays + "D";
  2170. totalTime += "T";
  2171. if (intTotalHours != 0)
  2172. totalTime += intTotalHours + "H";
  2173. if (intTotalMinutes != 0)
  2174. totalTime = totalTime + intTotalMinutes + "M";
  2175. totalTime = "P" + totalTime.trim();
  2176. } catch (Exception ex) {
  2177. totalTime = "PT1M";
  2178. // throw (new
  2179. // Exception("Problemas ao calcular o tempo da viagem."));
  2180. }
  2181. if (totalTime.equals("PT"))
  2182. totalTime = "PT1M";
  2183. return totalTime;
  2184. }
  2185. private RouteTotals getTotals(SegmentDescription[] segmentDescription, RouteProximityOptions ro, RouteStop[] rs, double gTotalToolFeeCost) {
  2186. RouteTotals rt = new RouteTotals();
  2187. double distance;
  2188. distance = 0;
  2189. try {
  2190. distance = segmentDescription[segmentDescription.length - 1].getCumulativeDistance();
  2191. // Total com ped?gios
  2192. rt.setTotaltollFeeCost(Functions.formatDouble(gTotalToolFeeCost, "0.00"));
  2193. // dist?ncia total
  2194. rt.setTotalDistance(Functions.formatDouble(distance, "0.00"));
  2195. // calcula o tempo total da viagem
  2196. rt.setTotalTime(getTotalTime(rt.getTotalDistance(), ro.getVehicle().getAverageSpeed()));
  2197. // calcula o total do combust?vel gasto na viagem
  2198. if (ro.getVehicle().getAverageConsumption() > 0)
  2199. rt.setTotalFuelUsed(Functions.formatDouble((rt.getTotalDistance() / ro.getVehicle().getAverageConsumption()), "0.00"));
  2200. // calcula o valor total gasto com combust?vel na viagem
  2201. rt.setTotalfuelCost(Functions.formatDouble((rt.getTotalFuelUsed() * ro.getVehicle().getFuelPrice()), "0.00"));
  2202. // calcula o valor total gasto na viagem
  2203. rt.setTotalCost(Functions.formatDouble((gTotalToolFeeCost + rt.getTotalfuelCost()), "0.00"));
  2204. // Calcula o valor de tarifas de taxi
  2205. double[] TaxiFare = getTaxiFare(rt, rs);
  2206. rt.setTaxiFare1(TaxiFare[0]);
  2207. rt.setTaxiFare2(TaxiFare[1]);
  2208. } catch (Exception ex) {
  2209. // throw (ex);
  2210. }
  2211. return rt;
  2212. }
  2213. public RouteProximityInfo getRouteWithMap(int idLicenca, int methodID, RouteStop[] rs, RouteProximityOptions ro, MapOptions mo) throws Exception {
  2214. RouteProximityInfo ri = new RouteProximityInfo();
  2215. String response = "";
  2216. Calendar lCDateTime = Calendar.getInstance();
  2217. String routeID = _maquina + "_" + lCDateTime.getTimeInMillis();
  2218. try {
  2219. try {
  2220. response = requestRoute(routeID, true, rs, ro, new Extent(), mo.getMapSize(), null, idLicenca, _dataSource, methodID);
  2221. ri.setRouteId(routeID);
  2222. // ri.setProximityList(getRouteProximity(response, ro.radius,
  2223. // idLicenca, ro.routeDetails.getRouteType()));
  2224. ri.setSegDescription(getSegmentDescriptionAlternative(response, ro.getVehicle().getTollFeeCat(), ro, rs, _dataSource, idLicenca));
  2225. ri.setRouteTotals(getTotals(ri.getSegDescription(), ro, rs, totalPedagios));
  2226. ri.setRoadType(getRoadType(ri.getSegDescription()));
  2227. ri.setRouteSummary(getSummary(ri.getSegDescription(), rs, ro));
  2228. try {
  2229. CommonMap commonMap;
  2230. commonMap = new CommonMap(_server, _port, _maquina, _output, _dns, _dataSourceMapa);
  2231. gExt = Functions.doZoom(gExt, 0.1);
  2232. ri.setMapInfo(commonMap.getZoomRadius(routeID, response, gExt, mo, idLicenca, CommonMap._getMap));
  2233. } catch (Exception ex1) {
  2234. throw (ex1);
  2235. }
  2236. } catch (Exception ex) {
  2237. throw (ex);
  2238. }
  2239. } catch (Exception ex) {
  2240. throw (ex);
  2241. }
  2242. return ri;
  2243. }
  2244. public RouteProximityInfo getRoute(int idLicenca, RouteStop[] rs, RouteProximityOptions ro, int methodID) throws Exception {
  2245. RouteProximityInfo ri = new RouteProximityInfo();
  2246. String response = "";
  2247. String routeID = _maquina + "_" + Calendar.getInstance().getTimeInMillis();
  2248. try {
  2249. response = requestRoute(routeID, true, rs, ro, new Extent(), new MapSize(), null, idLicenca, _dataSource, methodID);
  2250. ri.setRouteId(routeID);
  2251. // ri.setProximityList(getRouteProximity(response, ro.radius,
  2252. // idLicenca, ro.routeDetails.getRouteType()));
  2253. MapInfo mapInfo = new MapInfo();
  2254. mapInfo.setUrl("");
  2255. String XMaxYMax = response.substring(response.indexOf("LLMAX=") + 6); // .substring(0,
  2256. // response.substring(response.indexOf("LLMAX=")
  2257. // +
  2258. // 6).indexOf(Pattern.quote("|")));
  2259. XMaxYMax = XMaxYMax.substring(0, XMaxYMax.indexOf("|"));
  2260. String XMinYMin = response.substring(response.indexOf("LLMIN=") + 6); // .substring(0,
  2261. // response.substring(response.indexOf("LLMIN=")
  2262. // +
  2263. // 6).indexOf(Pattern.quote("%")));
  2264. XMinYMin = XMinYMin.substring(0, XMinYMin.indexOf("%"));
  2265. mapInfo.setExtent(new Extent());
  2266. mapInfo.getExtent().setXMax(Double.parseDouble(XMaxYMax.split(Pattern.quote(","))[1]));
  2267. mapInfo.getExtent().setXMin(Double.parseDouble(XMinYMin.split(Pattern.quote(","))[1]));
  2268. mapInfo.getExtent().setYMax(Double.parseDouble(XMaxYMax.split(Pattern.quote(","))[0]));
  2269. mapInfo.getExtent().setYMin(Double.parseDouble(XMinYMin.split(Pattern.quote(","))[0]));
  2270. ri.setMapInfo(mapInfo);
  2271. ri.setSegDescription(getSegmentDescriptionAlternative(response, ro.getVehicle().getTollFeeCat(), ro, rs, _dataSource, idLicenca));
  2272. ri.setRouteTotals(getTotals(ri.getSegDescription(), ro, rs, totalPedagios));
  2273. ri.setRoadType(getRoadType(ri.getSegDescription()));
  2274. ri.setRouteSummary(getSummary(ri.getSegDescription(), rs, ro));
  2275. } catch (Exception ex) {
  2276. Utils.LogError("CC", "RouteProximityInfo getRoute", "Error: " + ex.getMessage());
  2277. throw (ex);
  2278. }
  2279. return ri;
  2280. }
  2281. public SegmentDescription[] getRouteDescription(int idLicenca, RouteStop[] rs, RouteProximityOptions ro, int methodID) throws Exception {
  2282. String response = "";
  2283. Extent ext = new Extent();
  2284. SegmentDescription[] segRet = new SegmentDescription[0];
  2285. String routeID = _maquina + "_" + Calendar.getInstance().getTimeInMillis();
  2286. try {
  2287. response = requestRoute(routeID, true, rs, ro, ext, new MapSize(), null, idLicenca, _dataSource, methodID);
  2288. segRet = getSegmentDescriptionAlternative(response, ro.getVehicle().getTollFeeCat(), ro, rs, _dataSource, idLicenca);
  2289. } catch (Exception ex) {
  2290. Utils.LogError("CC", "getRouteWithMap - IdWebservice : Interno ", ex.getMessage() + "|" + ex.getStackTrace());
  2291. throw (ex);
  2292. }
  2293. return segRet;
  2294. }
  2295. RoadType getRoadType(SegmentDescription[] segmentDescription) {
  2296. RoadType roadType = new RoadType();
  2297. double distance = 0;
  2298. for (int x = 0; x < segmentDescription.length; x++) {
  2299. distance = segmentDescription[x].getDistance();
  2300. String roadTypeString = segmentDescription[x].getRoadType();
  2301. if (!Functions.IsNullOrEmpty(roadTypeString)) {
  2302. if (roadTypeString.contains("-"))
  2303. roadTypeString = roadTypeString.split(Pattern.quote("-"))[0];
  2304. }
  2305. if (roadTypeString.equals("PD")) {
  2306. roadType.setTwoLaneHighway(roadType.getTwoLaneHighway() + distance);
  2307. distance = 0;
  2308. }
  2309. if (roadTypeString.equals("ED")) {
  2310. roadType.setSecondLaneUnderConstruction(roadType.getSecondLaneUnderConstruction() + distance);
  2311. distance = 0;
  2312. }
  2313. if (roadTypeString.equals("P")) {
  2314. roadType.setOneLaneRoadway(roadType.getOneLaneRoadway() + distance);
  2315. distance = 0;
  2316. }
  2317. if (roadTypeString.equals("EP")) {
  2318. roadType.setPavingWorkInProgress(roadType.getPavingWorkInProgress() + distance);
  2319. distance = 0;
  2320. }
  2321. if (roadTypeString.equals("T")) {
  2322. roadType.setDirtRoad(roadType.getDirtRoad() + distance);
  2323. distance = 0;
  2324. }
  2325. if (roadTypeString.equals("CP")) {
  2326. roadType.setRoadwayInPoorConditions(roadType.getRoadwayInPoorConditions() + distance);
  2327. distance = 0;
  2328. }
  2329. if (roadTypeString.equals("BA")) {
  2330. roadType.setFerry(roadType.getFerry() + distance);
  2331. distance = 0;
  2332. }
  2333. if (distance != 0) {
  2334. roadType.setOneLaneRoadway(roadType.getOneLaneRoadway() + distance);
  2335. distance = 0;
  2336. }
  2337. }
  2338. return roadType;
  2339. }
  2340. void generateFileRouteID(String routeID, String request, String response) throws IOException {
  2341. // definindo o diretorio
  2342. String _dirLayer = ConfigurationManager.getInstance().getAppSettings("PATH_FILE_ROUTE");
  2343. // salva arquivo com as configura��ees da rota
  2344. Functions.writeFile(_dirLayer, routeID, request);
  2345. // salva arquivo com resposta
  2346. Functions.writeFile(_dirLayer, routeID + "-response", response);
  2347. }
  2348. public RouteTotals[] getRouteTotalsBatch(int idLicenca, RouteArray[] ra, RouteProximityOptions ro) throws Exception {
  2349. RouteTotals[] rt = new RouteTotals[ra.length];
  2350. RouteStop[] rs = new RouteStop[2];
  2351. for (int i = 0; i < ra.length; i++) {
  2352. rs[0] = ra[i].getOrigin();
  2353. rs[1] = ra[i].getDest();
  2354. rt[i] = getRouteTotals(idLicenca, rs, ro, _getRouteTotals);
  2355. }
  2356. return rt;
  2357. }
  2358. String[] requestProximity(String message, RouteStop[] rs, RouteProximityOptions ro, MapSize ms, String dataSource) throws Exception {
  2359. String[] ret = new String[2];
  2360. String response = message;
  2361. StringBuilder request = new StringBuilder();
  2362. TCPClientDecarta tcpDecarta = new TCPClientDecarta(_server, _port);
  2363. try {
  2364. String[] part = message.split(Pattern.quote("%"));
  2365. if (message.toLowerCase().indexOf("%vr7=") > 0) {
  2366. ret[0] = message;
  2367. ret[0] = "";
  2368. return ret;
  2369. }
  2370. int reqNumber = 0;
  2371. Point ptCheck = new Point();
  2372. if (response.toLowerCase().indexOf("find route") > 0) {
  2373. ret[0] = response;
  2374. ret[1] = request.toString();
  2375. return ret;
  2376. }
  2377. while (reqNumber < 25 && (response.toLowerCase().indexOf("cannot") > 0)) {
  2378. if (response.toLowerCase().indexOf("origin") > 0) {
  2379. ptCheck.setX(rs[0].getPoint().getX());
  2380. ptCheck.setY(rs[0].getPoint().getY());
  2381. }
  2382. if (response.toLowerCase().indexOf("destination") > 0) {
  2383. ptCheck.setX(rs[rs.length - 1].getPoint().getX());
  2384. ptCheck.setY(rs[rs.length - 1].getPoint().getY());
  2385. }
  2386. if (response.toLowerCase().indexOf("waypoint") > 0) {
  2387. part = response.split(Pattern.quote("%"));
  2388. ptCheck.setX(rs[Integer.parseInt(part[1].replace("WP=", "")) + 1].getPoint().getX());
  2389. ptCheck.setY(rs[Integer.parseInt(part[1].replace("WP=", "")) + 1].getPoint().getY());
  2390. }
  2391. // PNB1|%LL=-23.63874,-46.62146|%S1FIELD0=?
  2392. // *%RAD=m1000%TIMEOUT=500%DS=lbslocal_rotas%LL||
  2393. request = new StringBuilder();
  2394. request.append("PNB1");
  2395. request.append("|");
  2396. request.append("%LL=" + String.valueOf(ptCheck.getY()).replace(",", ".") + "," + String.valueOf(ptCheck.getX()).replace(",", "."));
  2397. request.append("|");
  2398. request.append("%S1FIELD0=? *%RAD=m2500");
  2399. request.append("%TIMEOUT=500");
  2400. request.append("%DS=" + dataSource + "%LL");
  2401. request.append("||");
  2402. String teste = tcpDecarta.Send(request.toString());
  2403. if (teste.toLowerCase().indexOf("records") >= 0) {
  2404. request = new StringBuilder();
  2405. request.append("PNB1");
  2406. request.append("|");
  2407. request.append("%LL=" + String.valueOf(ptCheck.getY()).replace(",", ".") + "," + String.valueOf(ptCheck.getX()).replace(",", "."));
  2408. request.append("|");
  2409. request.append("%S1FIELD0=? *%RAD=k10");
  2410. request.append("%TIMEOUT=500");
  2411. request.append("%DS=" + dataSource + "%LL");
  2412. request.append("||");
  2413. teste = tcpDecarta.Send(request.toString());
  2414. if (teste.toLowerCase().indexOf("records") >= 0) {
  2415. request = new StringBuilder();
  2416. request.append("PNB1");
  2417. request.append("|");
  2418. request.append("%LL=" + String.valueOf(ptCheck.getY()).replace(",", ".") + ","
  2419. + String.valueOf(ptCheck.getX()).replace(",", "."));
  2420. request.append("|");
  2421. request.append("%S1FIELD0=? *%RAD=k100");
  2422. request.append("%TIMEOUT=500");
  2423. request.append("%DS=" + dataSource + "%LL");
  2424. request.append("||");
  2425. teste = tcpDecarta.Send(request.toString());
  2426. }
  2427. if (teste.toLowerCase().indexOf("records") >= 0) {
  2428. if (response.indexOf("Cannot find path destination") > 0) {
  2429. throw (new Exception("N�o foi poss�vel encontrar liga��o com o ponto " + (rs.length) + " ("
  2430. + rs[rs.length - 1].getDescription() + ") "));
  2431. }
  2432. if (response.indexOf("Cannot find path origin") > 0) {
  2433. throw (new Exception("N�o foi poss�vel encontrar liga��o com o ponto " + (1) + " (" + rs[0].getDescription() + ") "));
  2434. }
  2435. if (response.toLowerCase().indexOf("wp") > 0) {
  2436. throw (new Exception("N�o foi poss�vel encontrar liga��o com o ponto "
  2437. + (Integer.parseInt(response.substring(response.indexOf("WP=") + 3,
  2438. response.substring(response.indexOf("WP=") + 3).indexOf("%"))) + 1)
  2439. + " ("
  2440. + rs[Integer.parseInt(response.substring(response.indexOf("WP=") + 3,
  2441. response.substring(response.indexOf("WP=") + 3).indexOf("%"))) + 1].getDescription() + ") "));
  2442. }
  2443. }
  2444. }
  2445. if (teste.indexOf("Plugin error") >= 0) {
  2446. request = new StringBuilder();
  2447. request.append("PNB1");
  2448. request.append("|");
  2449. request.append("%LL=" + String.valueOf(ptCheck.getY()).replace(",", ".") + "," + String.valueOf(ptCheck.getX()).replace(",", "."));
  2450. request.append("|");
  2451. request.append("%S1FIELD0=? *%RAD=m500");
  2452. request.append("%TIMEOUT=500");
  2453. request.append("%DS=" + dataSource + "%LL");
  2454. request.append("||");
  2455. teste = tcpDecarta.Send(request.toString());
  2456. }
  2457. if (teste.toLowerCase().indexOf("feature") >= 0) {
  2458. request = new StringBuilder();
  2459. request.append("PNB1");
  2460. request.append("|");
  2461. request.append("%LL=" + String.valueOf(ptCheck.getY()).replace(",", ".") + "," + String.valueOf(ptCheck.getX()).replace(",", "."));
  2462. request.append("|");
  2463. request.append("%S1FIELD0=? *%RAD=m5000");
  2464. request.append("%TIMEOUT=500");
  2465. request.append("%DS=" + dataSource + "%LL");
  2466. request.append("||");
  2467. teste = tcpDecarta.Send(request.toString());
  2468. }
  2469. Point newPoint = new Point();
  2470. newPoint.setX(Double.parseDouble(teste.substring(teste.indexOf("LL=") + 3, teste.indexOf("LL=") + 3 + 21).split(Pattern.quote(","))[1]
  2471. .replace("|", "").replace("%", "")));
  2472. newPoint.setY(Double.parseDouble(teste.substring(teste.indexOf("LL=") + 3, teste.indexOf("LL=") + 3 + 21).split(Pattern.quote(","))[0]
  2473. .replace("|", "").replace("%", "")));
  2474. if ((ptCheck.getX() == newPoint.getX()) && (ptCheck.getY() == newPoint.getY())) {
  2475. if (response.toLowerCase().indexOf("wp") > 0) {
  2476. throw (new Exception("N�o foi poss�vel encontrar liga��o com o ponto "
  2477. + (Integer.parseInt(response.substring(response.indexOf("WP=") + 3, response.substring(response.indexOf("WP=") + 3)
  2478. .indexOf("%"))) + 1)
  2479. + " ("
  2480. + rs[Integer.parseInt(response.substring(response.indexOf("WP=") + 3, response.substring(response.indexOf("WP=") + 3)
  2481. .indexOf("%"))) + 1].getDescription() + ") "));
  2482. }
  2483. }
  2484. if (response.toLowerCase().indexOf("origin") > 0) {
  2485. rs[0].getPoint().setX(newPoint.getX());
  2486. rs[0].getPoint().setY(newPoint.getY());
  2487. }
  2488. if (response.toLowerCase().indexOf("destination") > 0) {
  2489. rs[rs.length - 1].getPoint().setX(newPoint.getX());
  2490. rs[rs.length - 1].getPoint().setY(newPoint.getY());
  2491. }
  2492. if (response.toLowerCase().indexOf("waypoint") > 0) {
  2493. rs[Integer.parseInt(part[1].replace("WP=", "")) + 1].getPoint().setX(newPoint.getX());
  2494. rs[Integer.parseInt(part[1].replace("WP=", "")) + 1].getPoint().setY(newPoint.getY());
  2495. }
  2496. request = new StringBuilder();
  2497. request.append("RMAN");
  2498. request.append("|");
  2499. request.append("%OLL=" + String.valueOf(rs[0].getPoint().getY()).replace(",", ".") + ","
  2500. + String.valueOf(rs[0].getPoint().getX()).replace(",", "."));
  2501. for (int x = 1; x < rs.length - 1; x++) {
  2502. request.append("%WP");
  2503. request.append("%WDLL=" + String.valueOf(rs[x].getPoint().getY()).replace(",", ".") + ","
  2504. + String.valueOf(rs[x].getPoint().getX()).replace(",", "."));
  2505. request.append("%WOLL=" + String.valueOf(rs[x].getPoint().getY()).replace(",", ".") + ","
  2506. + String.valueOf(rs[x].getPoint().getX()).replace(",", "."));
  2507. }
  2508. request.append("%DLL=" + String.valueOf(rs[rs.length - 1].getPoint().getY()).replace(",", ".") + ","
  2509. + String.valueOf(rs[rs.length - 1].getPoint().getX()).replace(",", "."));
  2510. request.append("|%TIME");
  2511. if (rs.length < 10 && ro.getRouteDetails().isOptimizeRoute())
  2512. request.append("%OPT=1");
  2513. else
  2514. request.append("%OPT=0");
  2515. switch (ro.getRouteDetails().getRouteType()) {
  2516. case 0:
  2517. request.append("%RS=F");
  2518. break;
  2519. case 1:
  2520. request.append("%RS=S");
  2521. break;
  2522. case 2:
  2523. request.append("%RS=P");
  2524. break;
  2525. /*
  2526. * case 3: { request.append("%RS=F"); setTraffic(dataSource); }
  2527. * break; case 4: { request.append("%RS=S");
  2528. * setTraffic(dataSource); } break;
  2529. */
  2530. case 5:
  2531. request.append("%RS=F");
  2532. break;
  2533. case 6: // 6 Rotas evitando balsas
  2534. request.append("%ADJUSTCOST=FERRYBOAT,INF");
  2535. break;
  2536. case 7: // 7 Rotas evitando estradas de terra
  2537. request.append("%ADJUSTCOST=TUNNEL,INF");
  2538. break;
  2539. case 8: // 8 Rotas evitando balsas e estradas de terra
  2540. request.append("%ADJUSTCOST=FERRYBOAT,INF%ADJUSTCOST=TUNNEL,INF");
  2541. break;
  2542. case 9: // 9 Rotas evitando estradas com condi??es
  2543. // prec?rias
  2544. request.append("%ADJUSTCOST=SKYWAY,INF");
  2545. break;
  2546. case 10: // 10 Rotas evitando ped?gios
  2547. request.append("%ADJUSTCOST=TOLLROAD,INF");
  2548. break;
  2549. case 12:
  2550. request.append("%RS=F");
  2551. break;
  2552. case 13:
  2553. request.append("%RS=F");
  2554. break;
  2555. }
  2556. request.append("%S2");
  2557. request.append("%AC");
  2558. request.append("%TDIST=K");
  2559. request.append("%DIST=K");
  2560. request.append("%LLMAX");
  2561. request.append("%LLMIN");
  2562. if (ms.getHeight() != 0 || ro.getRouteDetails().getPoiRoute() != null || ro.getVehicle().getTollFeeCat() > 0)
  2563. request.append("%RG");
  2564. request.append("%VR7");
  2565. request.append("%TURN");
  2566. request.append("%LL");
  2567. switch (ro.getRouteDetails().getRouteType()) {
  2568. case 5:
  2569. request.append("%DS=ccr_rotas");
  2570. break;
  2571. case 12:
  2572. request.append("%DS=telefonica_rotas");
  2573. break;
  2574. case 13:
  2575. request.append("%DS=telefonica_pf");
  2576. break;
  2577. /*
  2578. * case 3: if (setTraffic(dataSource)) request.append("%EDS=" +
  2579. * dataSource + "_edit"); else request.append("%DS=" +
  2580. * dataSource); break; case 4: if (setTraffic(dataSource))
  2581. * request.append("%EDS=" + dataSource + "_edit"); else
  2582. * request.append("%DS=" + dataSource); break;
  2583. */
  2584. case 6: // 6 Rotas evitando balsas
  2585. request.append("%DS=lbslocal_rodoviaria_rotas_evitando_balsas");
  2586. break;
  2587. case 7: // 7 Rotas evitando estradas de terra
  2588. request.append("%DS=lbslocal_rodoviaria_rotas_evitando_terra");
  2589. break;
  2590. case 8: // 8 Rotas evitando balsas e estradas de terra
  2591. request.append("%DS=lbslocal_rodoviaria_rotas_evitando_balsa_terra");
  2592. break;
  2593. case 9: // 9 Rotas evitando estradas com condi??es
  2594. // prec?rias
  2595. request.append("%DS=lbslocal_rodoviaria_rotas_evitando_condicoes_precarias");
  2596. break;
  2597. case 10: // 10 Rotas evitando ped?gios
  2598. request.append("%DS=lbslocal_rodoviaria_rotas_evitando_pedagios");
  2599. break;
  2600. default:
  2601. request.append("%DS=" + dataSource);
  2602. break;
  2603. }
  2604. request.append("%TIMEOUT=50000");
  2605. request.append("||");
  2606. response = tcpDecarta.Send(request.toString());
  2607. reqNumber++;
  2608. }
  2609. } catch (Exception ex) {
  2610. throw ex;
  2611. }
  2612. ret[0] = response;
  2613. ret[1] = request.toString();
  2614. return ret;
  2615. }
  2616. public String requestRoute(String routeID, boolean createFile, RouteStop[] rs, RouteProximityOptions ro, Extent ex, MapSize ms,
  2617. String barriersRoute, int idLicenca, String dataSource, int methodID) throws Exception {
  2618. StringBuilder request = new StringBuilder();
  2619. String response = "";
  2620. try {
  2621. if (!"".equals(routeID) && !createFile) {
  2622. String _dirLayer = ConfigurationManager.getInstance().getAppSettings("PATH_FILE_ROUTE");
  2623. request = new StringBuilder();
  2624. FileReader file = new FileReader(_dirLayer + routeID);
  2625. BufferedReader sr = new BufferedReader(file);
  2626. String testFirstLine = sr.readLine();
  2627. StringBuilder r = new StringBuilder("");
  2628. if (testFirstLine.indexOf("%OLL") > 0) {
  2629. request.append(testFirstLine);
  2630. sr.close();
  2631. String[] req = request.toString().split(Pattern.quote("|"));
  2632. for (int x = 0; x < req.length; x++) {
  2633. if (x == 2)
  2634. r.append(req[x] + "%RG|");
  2635. else
  2636. r.append(req[x] + "|");
  2637. }
  2638. } else {
  2639. String routeTypeFile = sr.readLine();
  2640. sr.readLine();
  2641. // String optimizeRouteFile = sr.readLine();
  2642. String[] routeStopFile = sr.readLine().split(Pattern.quote("<"));
  2643. sr.close();
  2644. List<RouteStop> rsList = new ArrayList<RouteStop>();
  2645. for (int x = 0; x < routeStopFile.length; x++) {
  2646. if (routeStopFile[x].toUpperCase().indexOf("POINT") >= 0) {
  2647. RouteStop rsAux = new RouteStop();
  2648. rsAux.setPoint(new Point());
  2649. rsAux.getPoint().setX(
  2650. Double.parseDouble(routeStopFile[x]
  2651. .substring(routeStopFile[x].indexOf("'"),
  2652. routeStopFile[x].indexOf("y") - (routeStopFile[x].indexOf("'") + 2)).replace("'", "")
  2653. .replace("/", "").replace(">", "")));
  2654. rsAux.getPoint().setY(
  2655. Double.parseDouble(routeStopFile[x].substring(routeStopFile[x].indexOf("y") + 3).replace("'", "")
  2656. .replace("/", "").replace(">", "")));
  2657. rsList.add(rsAux);
  2658. }
  2659. }
  2660. rs = rsList.toArray(new RouteStop[0]);
  2661. r = new StringBuilder("RMAN|%TIME");
  2662. r.append("%OLL=" + String.valueOf(rs[0].getPoint().getY()).replace(",", ".") + ","
  2663. + String.valueOf(rs[0].getPoint().getX()).replace(",", "."));
  2664. for (int x = 1; x < rs.length - 1; x++) {
  2665. r.append("%WP");
  2666. r.append("%WDLL=" + String.valueOf(rs[x].getPoint().getY()).replace(",", ".") + ","
  2667. + String.valueOf(rs[x].getPoint().getX()).replace(",", "."));
  2668. r.append("%WOLL=" + String.valueOf(rs[x].getPoint().getY()).replace(",", ".") + ","
  2669. + String.valueOf(rs[x].getPoint().getX()).replace(",", "."));
  2670. }
  2671. r.append("%DLL=" + String.valueOf(rs[rs.length - 1].getPoint().getY()).replace(",", ".") + ","
  2672. + String.valueOf(rs[rs.length - 1].getPoint().getX()).replace(",", "."));
  2673. r.append("|%RG%VR7");
  2674. if (routeTypeFile.toLowerCase().indexOf("quickest") > 0) {
  2675. r.append("%RS=F");
  2676. } else
  2677. r.append("%RS=S");
  2678. r.append("%OPT=0");
  2679. switch (ro.getRouteDetails().getRouteType()) {
  2680. case 5:
  2681. r.append("%DS=ccr_rotas");
  2682. break;
  2683. case 3:
  2684. r.append("%EDS=" + dataSource + "_edit");
  2685. break;
  2686. case 4:
  2687. r.append("%EDS=" + dataSource + "_edit");
  2688. break;
  2689. default:
  2690. r.append("%DS=" + dataSource);
  2691. break;
  2692. }
  2693. r.append("%TIMEOUT=50000||");
  2694. }
  2695. response = new TCPClientDecarta(_server, _port).Send(r.toString());
  2696. if (!(response.toLowerCase().indexOf("s=ok") > 0)) {
  2697. String[] resp = requestProximity(response, rs, ro, ms, dataSource);
  2698. response = resp[0];
  2699. if ((!"".equals(response)) && (response != null)) {
  2700. if (!"".equals(routeID) && createFile) {
  2701. generateFileRouteID(routeID, resp[1], response);
  2702. createFile = false;
  2703. }
  2704. }
  2705. }
  2706. } else {
  2707. request.append("RMAN");
  2708. request.append("|");
  2709. request.append("%CUST=" + idLicenca + ":" + methodID + "%OLL=" + String.valueOf(rs[0].getPoint().getY()).replace(",", ".") + ","
  2710. + String.valueOf(rs[0].getPoint().getX()).replace(",", "."));
  2711. for (int x = 1; x < rs.length - 1; x++) {
  2712. request.append("%WP");
  2713. request.append("%WDLL=" + String.valueOf(rs[x].getPoint().getY()).replace(",", ".") + ","
  2714. + String.valueOf(rs[x].getPoint().getX()).replace(",", "."));
  2715. request.append("%WOLL=" + String.valueOf(rs[x].getPoint().getY()).replace(",", ".") + ","
  2716. + String.valueOf(rs[x].getPoint().getX()).replace(",", "."));
  2717. }
  2718. request.append("%DLL=" + String.valueOf(rs[rs.length - 1].getPoint().getY()).replace(",", ".") + ","
  2719. + String.valueOf(rs[rs.length - 1].getPoint().getX()).replace(",", "."));
  2720. request.append("|%TIME");
  2721. /*
  2722. * if (ro.routeDetails.optimizeRoute) { clsOptimize.Cities
  2723. * cityListOpt = new Cities();
  2724. *
  2725. * if (rs.length < 10) { request.append("%OPT=1"); } else {
  2726. * request = new StringBuilder();
  2727. *
  2728. * clsOptimize.Cities cityList = new clsOptimize.Cities(); for
  2729. * (int i = 0; i < rs.length; i++) { cityList.Add(new
  2730. * clsOptimize.City(rs[i].point.x, rs[i].point.y, i)); }
  2731. * Optimize opt = new Optimize(); cityListOpt =
  2732. * opt.Begin(cityList);
  2733. *
  2734. * RouteStop[] rsAux = new RouteStop[rs.length]; for (int i = 0;
  2735. * i < rs.length; i++) { rsAux[i] = new RouteStop();
  2736. * rsAux[i].description = rs[i].description; }
  2737. *
  2738. * for (int i = 0; i < cityListOpt.Count; i++) {
  2739. * rs[i].description = rsAux[cityListOpt[i].ID].description;
  2740. * rs[i].point.x = cityListOpt[i].Location.X; rs[i].point.y =
  2741. * cityListOpt[i].Location.Y; }
  2742. *
  2743. * request.append("RMAN"); request.append("|");
  2744. *
  2745. * request.Append("%CUST=" + idLicenca +":" + methodID + "%OLL="
  2746. * + cityListOpt[0].Location.Y.ToString().replace(",", ".") +
  2747. * "," + cityListOpt[0].Location.X.ToString().replace(",",
  2748. * "."));
  2749. *
  2750. * for (int x = 1; x < cityListOpt.Count - 1; x++) {
  2751. * request.append("%WP"); request.Append("%WDLL=" +
  2752. * cityListOpt[x].Location.Y.ToString().replace(",", ".") + ","
  2753. * + cityListOpt[x].Location.X.ToString().replace(",", "."));
  2754. * request.Append("%WOLL=" +
  2755. * cityListOpt[x].Location.Y.ToString().replace(",", ".") + ","
  2756. * + cityListOpt[x].Location.X.ToString().replace(",", ".")); }
  2757. *
  2758. * request.Append("%DLL=" + cityListOpt[cityListOpt.Count -
  2759. * 1].Location.Y.ToString().replace(",", ".") + "," +
  2760. * cityListOpt[cityListOpt.Count -
  2761. * 1].Location.X.ToString().replace(",", "."));
  2762. *
  2763. * request.append("|");
  2764. *
  2765. * request.append("%OPT=0"); } } else
  2766. */
  2767. request.append("%OPT=0");
  2768. switch (ro.getRouteDetails().getRouteType()) {
  2769. case 0:
  2770. request.append("%RS=F");
  2771. break;
  2772. case 1:
  2773. request.append("%RS=S");
  2774. break;
  2775. case 2:
  2776. request.append("%RS=P");
  2777. break;
  2778. case 3: {
  2779. request.append("%RS=F");
  2780. // setTraffic(dataSource);
  2781. }
  2782. break;
  2783. case 4: {
  2784. request.append("%RS=S");
  2785. // setTraffic(dataSource);
  2786. }
  2787. break;
  2788. case 5:
  2789. request.append("%RS=F");
  2790. break;
  2791. case 6: // 6 Rotas evitando balsas
  2792. request.append("%ADJUSTCOST=FERRYBOAT,INF");
  2793. break;
  2794. case 7: // 7 Rotas evitando estradas de terra
  2795. request.append("%ADJUSTCOST=TUNNEL,INF");
  2796. break;
  2797. case 8: // 8 Rotas evitando balsas e estradas de terra
  2798. request.append("%ADJUSTCOST=FERRYBOAT,INF%ADJUSTCOST=TUNNEL,INF");
  2799. break;
  2800. case 9: // 9 Rotas evitando estradas com condi??es
  2801. // prec?rias
  2802. request.append("%ADJUSTCOST=SKYWAY,INF");
  2803. break;
  2804. case 10: // 10 Rotas evitando ped?gios
  2805. request.append("%ADJUSTCOST=TOLLROAD,INF");
  2806. break;
  2807. case 12:
  2808. request.append("%RS=F");
  2809. break;
  2810. case 13:
  2811. request.append("%RS=F");
  2812. break;
  2813. }
  2814. request.append("%S2");
  2815. request.append("%AC");
  2816. request.append("%TDIST=K");
  2817. request.append("%DIST=K");
  2818. request.append("%LLMAX");
  2819. request.append("%LLMIN");
  2820. if (ms.getHeight() != 0 || ro.getRouteDetails().getPoiRoute() != null || ro.getVehicle().getTollFeeCat() > 0 || rs.length > 14)
  2821. request.append("%RG");
  2822. request.append("%VR7");
  2823. request.append("%TURN");
  2824. request.append("%LL");
  2825. switch (ro.getRouteDetails().getRouteType()) {
  2826. case 5:
  2827. request.append("%DS=ccr_rotas");
  2828. break;
  2829. case 12:
  2830. request.append("%DS=telefonica_rotas");
  2831. break;
  2832. case 13:
  2833. request.append("%DS=telefonica_pf");
  2834. break;
  2835. /*
  2836. * case 3: if(setTraffic(dataSource)) request.append("%EDS=" +
  2837. * dataSource + "_edit"); else request.append("%DS=" +
  2838. * dataSource); break;
  2839. */
  2840. /*
  2841. * case 4: if (setTraffic(dataSource)) request.append("%EDS=" +
  2842. * dataSource + "_edit"); else request.append("%DS=" +
  2843. * dataSource); break;
  2844. */
  2845. case 6: // 6 Rotas evitando balsas
  2846. request.append("%DS=lbslocal_rodoviaria_rotas_evitando_balsas");
  2847. break;
  2848. case 7: // 7 Rotas evitando estradas de terra
  2849. request.append("%DS=lbslocal_rodoviaria_rotas_evitando_terra");
  2850. break;
  2851. case 8: // 8 Rotas evitando balsas e estradas de terra
  2852. request.append("%DS=lbslocal_rodoviaria_rotas_evitando_balsa_terra");
  2853. break;
  2854. case 9: // 9 Rotas evitando estradas com condi??es
  2855. // prec?rias
  2856. request.append("%DS=lbslocal_rodoviaria_rotas_evitando_condicoes_precarias");
  2857. break;
  2858. case 10: // 10 Rotas evitando ped?gios
  2859. request.append("%DS=lbslocal_rodoviaria_rotas_evitando_pedagios");
  2860. break;
  2861. default:
  2862. request.append("%DS=" + dataSource);
  2863. break;
  2864. }
  2865. request.append("%TIMEOUT=50000");
  2866. request.append("||");
  2867. response = new TCPClientDecarta(_server, _port).Send(request.toString());
  2868. if (!(response.toLowerCase().indexOf("s=ok") > 0)) {
  2869. String[] resp = requestProximity(response, rs, ro, ms, dataSource);
  2870. response = resp[0];
  2871. if (response.toLowerCase().indexOf("failed to find route") >= 0 || response.toLowerCase().indexOf("cannot find") >= 0)
  2872. throw (new Exception("Problemas ao requisitar a rota."));
  2873. if ((!"".equals(response)) && (response != null)) {
  2874. if (!"".equals(routeID) && createFile) {
  2875. generateFileRouteID(routeID, resp[1], response);
  2876. createFile = false;
  2877. }
  2878. }
  2879. }
  2880. try {
  2881. gExt.setXMax(Double.parseDouble(response.substring(response.indexOf("LLMAX") + 6, response.indexOf("LLMAX") + 6 + 19).split(
  2882. Pattern.quote(","))[1].replace("|", "").replace("%", "").toLowerCase().replace("l", "")));
  2883. gExt.setXMin(Double.parseDouble(response.substring(response.indexOf("LLMIN") + 6, response.indexOf("LLMIN") + 6 + 19).split(
  2884. Pattern.quote(","))[1].replace("|", "").replace("%", "").toLowerCase().replace("l", "")));
  2885. gExt.setYMax(Double.parseDouble(response.substring(response.indexOf("LLMAX") + 6, response.indexOf("LLMAX") + 6 + 19).split(
  2886. Pattern.quote(","))[0].replace("|", "").replace("%", "").toLowerCase().replace("l", "")));
  2887. gExt.setYMin(Double.parseDouble(response.substring(response.indexOf("LLMIN") + 6, response.indexOf("LLMIN") + 6 + 19).split(
  2888. Pattern.quote(","))[0].replace("|", "").replace("%", "").toLowerCase().replace("l", "")));
  2889. } catch (Exception ex1) {
  2890. // String a = ex1.getMessage();
  2891. }
  2892. }
  2893. } catch (Exception ex1) {
  2894. Utils.LogError("CC", "requestRoute (Catch) - IdWebservice : Interno", ex1.getMessage() + "|" + ex1.getStackTrace() + " | REQUEST : "
  2895. + request.toString() + " | Response : " + response);
  2896. throw (new Exception(ex1.getMessage()));
  2897. }
  2898. if (!"".equals(routeID) && createFile) {
  2899. generateFileRouteID(routeID, request.toString(), response);
  2900. }
  2901. return response;
  2902. }
  2903. public RouteTotals getRouteTotals(int idLicenca, RouteStop[] rs, RouteProximityOptions ro, int methodID) throws Exception {
  2904. String barriersRoute = "";
  2905. String response = requestRoute("", false, rs, ro, new Extent(), new MapSize(), barriersRoute, idLicenca, _dataSource, methodID);
  2906. SegmentDescription[] segDescription = getSegmentDescriptionAlternative(response, ro.getVehicle().getTollFeeCat(), ro, rs, _dataSource,
  2907. idLicenca);
  2908. RouteTotals rt = getTotals(segDescription, ro, rs, totalPedagios);
  2909. return rt;
  2910. }
  2911. public RouteSummary[] getRouteSummary(int idLicenca, RouteStop[] rs, RouteProximityOptions ro, int methodID) throws Exception {
  2912. String barriersRoute = "";
  2913. String response = requestRoute("", false, rs, ro, new Extent(), new MapSize(), barriersRoute, idLicenca, _dataSource, methodID);
  2914. SegmentDescription[] segDescription = getSegmentDescriptionAlternative(response, ro.getVehicle().getTollFeeCat(), ro, rs, _dataSource,
  2915. idLicenca);
  2916. RouteSummary[] routeSummary = getSummary(segDescription, rs, ro);
  2917. return routeSummary;
  2918. }
  2919. public static String getRouteFullCoords(String routeID) {
  2920. String total = "";
  2921. String buffer = "";
  2922. String _dirLayer = "";
  2923. try {
  2924. _dirLayer = ConfigurationManager.getInstance().getAppSettings("PATH_FILE_ROUTE");
  2925. if (new File(_dirLayer + File.separator + routeID + "-response").exists()) {
  2926. buffer = _dirLayer + File.separator;
  2927. } else {
  2928. buffer = _dirLayer + File.separator + "buffer" + File.separator;
  2929. }
  2930. Scanner sr = new Scanner(new File(buffer + routeID + "-response"), "UTF-8");
  2931. String[] parts = sr.nextLine().split("%");
  2932. sr.close();
  2933. for (int x = 0; x < parts.length; x++) {
  2934. if (parts[x].indexOf("VR=") >= 0) {
  2935. total = parts[x].replace("VR=", "");
  2936. total = total.substring(total.indexOf(",") + 1);
  2937. break;
  2938. }
  2939. }
  2940. } catch (Exception e) {
  2941. Utils.LogError("CC", "getRouteFullCoords:", " - buffer -- " + buffer + routeID + "-response" + e.getMessage() + "|" + e.getStackTrace());
  2942. return "";
  2943. }
  2944. return total;
  2945. }
  2946. public static Coordinate[] getRouteCoordsFence(String routeID) {
  2947. List<Coordinate[]> ptLists = new ArrayList<Coordinate[]>();
  2948. try {
  2949. String _dirLayer = ConfigurationManager.getInstance().getAppSettings("PATH_FILE_ROUTE");
  2950. Scanner sr = new Scanner(new File(_dirLayer + File.separator + "buffer" + File.separator + routeID + "-buffer"), "UTF-8");
  2951. String[] parts = sr.nextLine().split("%");
  2952. if (sr.hasNextLine()) {
  2953. String linha;
  2954. while (sr.hasNextLine()) {
  2955. linha = sr.nextLine();
  2956. if (linha.equals(""))
  2957. break;
  2958. parts = linha.split(Pattern.quote("|"));
  2959. if (parts.length == 0)
  2960. break;
  2961. Coordinate[] pts = new Coordinate[parts.length - 1];
  2962. for (int z = 0; z < parts.length - 1; z++)
  2963. pts[z] = new Coordinate(Double.parseDouble(parts[z].split(" ")[1]), Double.parseDouble(parts[z].split(" ")[0]));
  2964. ptLists.add(pts);
  2965. }
  2966. sr.close();
  2967. }
  2968. return ptLists.toArray(new Coordinate[0]);
  2969. } catch (Exception exc) {
  2970. Utils.LogError("CC", "RouteCoords", exc.getMessage());
  2971. }
  2972. return null;
  2973. }
  2974. public static String getRouteCoordsToFence(String routeID) {
  2975. try {
  2976. String _dirLayer = ConfigurationManager.getInstance().getAppSettings("PATH_FILE_ROUTE");
  2977. Scanner sr = new Scanner(new File(_dirLayer + File.separator + "buffer" + File.separator + routeID + "-buffer"), "UTF-8");
  2978. String linha = sr.nextLine();
  2979. sr.close();
  2980. return linha;
  2981. } catch (Exception exc) {
  2982. Utils.LogError("CC", "RouteCoords", exc.getMessage());
  2983. }
  2984. return "";
  2985. }
  2986. public static Coordinate[] setRouteCoordsToFence(String routeID) {
  2987. List<Coordinate> ptLists = new ArrayList<Coordinate>();
  2988. try {
  2989. StringBuilder sb = new StringBuilder("");
  2990. String _dirLayer = ConfigurationManager.getInstance().getAppSettings("PATH_FILE_ROUTE");
  2991. Scanner sr = new Scanner(new File(_dirLayer + File.separator + routeID + "-response"), "UTF-8");
  2992. String[] parts = sr.nextLine().split("%");
  2993. if (sr.hasNextLine()) {
  2994. String linha;
  2995. while (sr.hasNextLine()) {
  2996. linha = sr.nextLine();
  2997. if (linha.equals(""))
  2998. break;
  2999. parts = linha.split(Pattern.quote("|"));
  3000. if (parts.length == 0)
  3001. break;
  3002. for (int z = 0; z < parts.length - 1; z++)
  3003. ptLists.add(new Coordinate(Double.parseDouble(parts[z].split(" ")[0]), Double.parseDouble(parts[z].split(" ")[1])));
  3004. }
  3005. sr.close();
  3006. } else {
  3007. sr.close();
  3008. sb = new StringBuilder("");
  3009. for (int x = 0; x < parts.length; x++) {
  3010. if (parts[x].indexOf("VR7=") >= 0) {
  3011. int y = 0;
  3012. String[] co = parts[x].toString().replace("|", "").replace("\0", "").split(",");
  3013. Coordinate[] pts = new Coordinate[Integer.parseInt(co[0].substring(co[0].indexOf("=") + 1))];
  3014. Coordinate pt;
  3015. for (int z = 1; z < co.length; z++) {
  3016. if (z == 1) {
  3017. pt = new Coordinate();
  3018. pt.y = (Double.parseDouble(co[z]) * Math.pow(10, -7));
  3019. pt.x = (Double.parseDouble(co[z + 1]) * Math.pow(10, -7));
  3020. } else {
  3021. pt = new Coordinate();
  3022. pt.y = ((pts[y].y) + Integer.parseInt(co[z]) * Math.pow(10, -7));
  3023. pt.x = ((pts[y].x) + Integer.parseInt(co[z + 1]) * Math.pow(10, -7));
  3024. y++;
  3025. }
  3026. pts[y] = pt;
  3027. ptLists.add(pt);
  3028. sb.append(Functions.formatDoubleToString(pt.x, 7) + " " + Functions.formatDoubleToString(pt.y, 7) + "|");
  3029. z++;
  3030. }
  3031. sb.append("\n");
  3032. }
  3033. }
  3034. Functions.writeFile(_dirLayer, routeID + "-response", sb.toString());
  3035. }
  3036. InputStream in = new FileInputStream(new File(_dirLayer + File.separator + File.separator + routeID + "-response"));
  3037. OutputStream out = new FileOutputStream(new File(_dirLayer + File.separator + File.separator + "buffer" + File.separator + routeID
  3038. + "-response"));
  3039. // Transfer bytes from in to out
  3040. byte[] buf = new byte[1024];
  3041. int len;
  3042. while ((len = in.read(buf)) > 0) {
  3043. out.write(buf, 0, len);
  3044. }
  3045. in.close();
  3046. out.close();
  3047. return ptLists.toArray(new Coordinate[0]);
  3048. } catch (Exception exc) {
  3049. Utils.LogError("CC", "RouteCoords", exc.getMessage());
  3050. }
  3051. return null;
  3052. }
  3053. public static boolean setRouteFence(String routeID, double meters) {
  3054. double distancia = meters / 102960;
  3055. try {
  3056. String _dirLayer = ConfigurationManager.getInstance().getAppSettings("PATH_FILE_ROUTE");
  3057. StringBuilder sb = new StringBuilder();
  3058. Coordinate[] coordsBuffer = setRouteCoordsToFence(routeID);
  3059. Geometry g = new GeometryFactory().createLineString(coordsBuffer);
  3060. Geometry buffer = g.buffer(distancia, 3, BufferOp.CAP_ROUND);
  3061. Coordinate[] coordsFull = buffer.getCoordinates();
  3062. int total = coordsFull.length;
  3063. for (int i = 0; i < total; i++) {
  3064. sb.append(coordsFull[i].x + " " + coordsFull[i].y);
  3065. if (i + 1 < total)
  3066. sb.append(",");
  3067. }
  3068. File file = new File(_dirLayer + File.separator + "buffer" + File.separator + routeID + "-buffer");
  3069. if (file.exists()) {
  3070. file.delete();
  3071. }
  3072. Functions.writeFile(_dirLayer + File.separator + "buffer" + File.separator, routeID + "-buffer", sb.toString());
  3073. } catch (Exception e) {
  3074. return false;
  3075. }
  3076. return true;
  3077. }
  3078. public String getRouteCoords(String routeID, double precision, Extent ex, int idLicenca, String dataSource) {
  3079. List<Point[]> ptLists = new ArrayList<Point[]>();
  3080. try {
  3081. StringBuilder sb = new StringBuilder("");
  3082. String _dirLayer = ConfigurationManager.getInstance().getAppSettings("PATH_FILE_ROUTE");
  3083. // _dirLayer = "\\\\" + routeID.substring(0,
  3084. // routeID.indexOf('_')).replace('-', '.') + "\\" +
  3085. // Functions.getNetWorkDrive(routeID.substring(0,
  3086. // routeID.indexOf('_')).replace('-', '.'))
  3087. // + "$" + _dirLayer;
  3088. Scanner sr = new Scanner(new File(_dirLayer + File.separator + routeID + "-response"), "UTF-8");
  3089. String[] parts = sr.nextLine().split("%");
  3090. if (sr.hasNextLine()) {
  3091. String linha;
  3092. while (sr.hasNextLine()) {
  3093. linha = sr.nextLine();
  3094. if (linha.equals(""))
  3095. break;
  3096. parts = linha.split(Pattern.quote("|"));
  3097. if (parts.length == 0)
  3098. break;
  3099. Point[] pts = new Point[parts.length - 1];
  3100. for (int z = 0; z < parts.length - 1; z++)
  3101. pts[z] = new Point(Double.parseDouble(parts[z].split(" ")[0]), Double.parseDouble(parts[z].split(" ")[1]));
  3102. ptLists.add(pts);
  3103. }
  3104. sr.close();
  3105. } else {
  3106. sr.close();
  3107. sb = new StringBuilder("");
  3108. for (int x = 0; x < parts.length; x++) {
  3109. if (parts[x].indexOf("VR7=") >= 0) {
  3110. int y = 0;
  3111. String[] co = parts[x].toString().replace("|", "").replace("\0", "").split(",");
  3112. Point[] pts = new Point[Integer.parseInt(co[0].substring(co[0].indexOf("=") + 1))];
  3113. Point pt;
  3114. for (int z = 1; z < co.length; z++) {
  3115. if (z == 1) {
  3116. pt = new Point();
  3117. pt.setY(Double.parseDouble(co[z]) * Math.pow(10, -7));
  3118. pt.setX(Double.parseDouble(co[z + 1]) * Math.pow(10, -7));
  3119. } else {
  3120. pt = new Point();
  3121. pt.setY((pts[y].getY()) + Integer.parseInt(co[z]) * Math.pow(10, -7));
  3122. pt.setX((pts[y].getX()) + Integer.parseInt(co[z + 1]) * Math.pow(10, -7));
  3123. y++;
  3124. }
  3125. pts[y] = pt;
  3126. sb.append(Functions.formatDoubleToString(pt.getX(), 7) + " " + Functions.formatDoubleToString(pt.getY(), 7) + "|");
  3127. z++;
  3128. }
  3129. sb.append("\n");
  3130. ptLists.add(pts);
  3131. }
  3132. }
  3133. Functions.writeFile(_dirLayer, routeID + "-response", sb.toString());
  3134. }
  3135. sb = new StringBuilder("");
  3136. Point last = new Point();
  3137. for (int w = 0; w < ptLists.size(); w++) {
  3138. Point[] points = ptLists.get(w);
  3139. for (int i = 0; i < points.length; i++) {
  3140. if (points[i].getX() != 0 && points[i].getY() != 0) {
  3141. if ((ex.getXMax() > points[i].getX() && ex.getXMin() < points[i].getX() && ex.getYMax() > points[i].getY() && ex.getYMin() < points[i]
  3142. .getY())) {
  3143. if ((i == 0) || (this.getDistanceDegree(last, points[i]) > precision)) {
  3144. if ((int) (102960 * Math.sqrt(Math.pow((points[i].getX() - last.getX()), 2)
  3145. + Math.pow((points[i].getY() - last.getY()), 2))) > 15000) {
  3146. // String b = "asd";
  3147. }
  3148. last = points[i];
  3149. sb.append(Functions.formatDoubleToString(points[i].getX(), 7) + " "
  3150. + Functions.formatDoubleToString(points[i].getY(), 7) + ";");
  3151. }
  3152. }
  3153. }
  3154. }
  3155. }
  3156. return convertToDecarta(7, sb.toString());
  3157. } catch (Exception exc) {
  3158. Utils.LogError("CC", "RouteCoords", exc.getMessage());
  3159. }
  3160. return null;
  3161. }
  3162. double getDistanceDegree(Point p1, Point p2) {
  3163. return Math.sqrt(Math.pow((p2.getX() - p1.getX()), 2) + Math.pow((p2.getY() - p1.getY()), 2));
  3164. }
  3165. public String convertToDecarta(int precision, String coords) {
  3166. String coordsDecarta = "";
  3167. if (!Functions.IsNullOrEmpty(coords)) {
  3168. String[] coord;
  3169. if (coords.endsWith(";"))
  3170. coords = coords.substring(0, coords.length() - 1);
  3171. coord = coords.split(";");
  3172. Long lngInt, latInt, lngIntNew, latIntNew;
  3173. double lng, lat, pow;
  3174. pow = Math.pow(10, precision);
  3175. lng = Double.parseDouble(coord[0].toString().split(" ")[0]);
  3176. lat = Double.parseDouble(coord[0].toString().split(" ")[1]);
  3177. lngInt = (long) (lng * pow);
  3178. latInt = (long) (lat * pow);
  3179. coordsDecarta = latInt + "," + lngInt;
  3180. for (int x = 1; x < coord.length; x++) {
  3181. lng = Double.parseDouble(coord[x].split(" ")[0]);
  3182. lat = Double.parseDouble(coord[x].split(" ")[1]);
  3183. lngIntNew = (long) (lng * pow);
  3184. ;
  3185. latIntNew = (long) (lat * pow);
  3186. coordsDecarta += "," + (latIntNew - latInt) + "," + (lngIntNew - lngInt);
  3187. lngInt = lngIntNew;
  3188. latInt = latIntNew;
  3189. }
  3190. }
  3191. return coordsDecarta;
  3192. }
  3193. String convertToDecarta(int precision, String[] coord) {
  3194. StringBuilder sb = new StringBuilder();
  3195. String[] co;
  3196. for (int i = 0; i < coord.length; i++) {
  3197. co = coord[i].split(";");
  3198. for (int z = 1; z < co.length; z++) {
  3199. sb.append(co[z]);
  3200. sb.append(";");
  3201. }
  3202. }
  3203. sb.delete(sb.length() - 1, 1);
  3204. String coordsDecarta = "";
  3205. coord = sb.toString().split(";");
  3206. Integer lngInt, latInt, lngIntNew, latIntNew;
  3207. Double lng, lat, pow;
  3208. pow = Math.pow(10, precision);
  3209. lng = Double.parseDouble(coord[0].toString().split(" ")[0].replace('.', ','));
  3210. lat = Double.parseDouble(coord[0].toString().split(" ")[1].replace('.', ','));
  3211. lngInt = Integer.parseInt(String.valueOf(lng * pow));
  3212. latInt = Integer.parseInt(String.valueOf(lat * pow));
  3213. coordsDecarta = latInt + "," + lngInt;
  3214. int latdif, lngint;
  3215. for (int x = 1; x < coord.length; x++) {
  3216. lng = Double.parseDouble(coord[x].toString().split(" ")[0].replace('.', ','));
  3217. lat = Double.parseDouble(coord[x].toString().split(" ")[1].replace('.', ','));
  3218. lngIntNew = Integer.parseInt(String.valueOf(lng * pow));
  3219. latIntNew = Integer.parseInt(String.valueOf(lat * pow));
  3220. latdif = (int) (latIntNew - latInt);
  3221. lngint = (int) (lngIntNew - lngInt);
  3222. if (latdif != 0 && lngint != 0) {
  3223. coordsDecarta += "," + latdif + "," + lngint;
  3224. lngInt = lngIntNew;
  3225. latInt = latIntNew;
  3226. }
  3227. }
  3228. return coordsDecarta;
  3229. }
  3230. public static boolean checkFence(String routeId, Point point) {
  3231. Geometry g = null;
  3232. try {
  3233. String a = getRouteCoordsToFence(routeId);
  3234. // System.out.println(a);
  3235. g = new WKTReader().read("POLYGON ((" + a + "))");
  3236. } catch (ParseException e) {
  3237. e.printStackTrace();
  3238. }
  3239. Geometry gc = new GeometryFactory().createPoint(new Coordinate(point.getX(), point.getY()));
  3240. if (gc.within(g))
  3241. return true;
  3242. else
  3243. return false;
  3244. }
  3245. }