Skip to content

Commit f03bd0b

Browse files
committed
cidades vizinhas
1 parent ed58699 commit f03bd0b

File tree

8 files changed

+91
-28
lines changed

8 files changed

+91
-28
lines changed

src/main/java/com/boaglio/casadocodigo/mongodb/controller/ZipcodesController.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,29 @@ public String index(ModelMap model) {
2828

2929
}
3030

31-
@RequestMapping(value = "/calcular",method = RequestMethod.GET)
31+
@RequestMapping(value = "/calcular",method = RequestMethod.POST)
3232
public String detalhe(@RequestParam("idCidadeOrigem") String idCidadeOrigem,@RequestParam("idCidadeDestino") String idCidadeDestino,ModelMap model) {
3333

34-
Zip zip1 = repository.findById(idCidadeOrigem);
35-
System.out.println("cidade origem =" + zip1);
36-
Zip zip2 = repository.findById(idCidadeDestino);
37-
System.out.println("cidade destino =" + zip2);
34+
Zip zipOrigem = repository.findById(idCidadeOrigem);
35+
System.out.println("cidade origem =" + zipOrigem);
36+
Zip zipDestino = repository.findById(idCidadeDestino);
37+
System.out.println("cidade destino =" + zipDestino);
3838

39-
double distancia = CalculaDistancia.distance(zip1.getLoc().getX(),zip1.getLoc().getY(),zip2.getLoc().getX(),zip2.getLoc().getY());
39+
double distancia = CalculaDistancia.distance(zipOrigem.getLoc().getX(),zipOrigem.getLoc().getY(),zipDestino.getLoc().getX(),zipDestino.getLoc().getY());
4040
model.addAttribute("distancia",distancia);
4141
System.out.println("distancia entre as duas =" + distancia);
4242

43-
model.addAttribute("cidadeOrigem",zip1.getCity() + " (" + zip1.getState() + ")");
44-
model.addAttribute("cidadeDestino",zip2.getCity() + " (" + zip2.getState() + ")");
43+
model.addAttribute("cidadeOrigem",zipOrigem.getCity() + " (" + zipOrigem.getState() + ")");
44+
model.addAttribute("cidadeDestino",zipDestino.getCity() + " (" + zipDestino.getState() + ")");
4545

46-
model.addAttribute("latitudeOrigem",zip1.getLoc().getX());
47-
model.addAttribute("longitudeOrigem",zip1.getLoc().getY());
46+
model.addAttribute("latitudeOrigem",zipOrigem.getLoc().getX());
47+
model.addAttribute("longitudeOrigem",zipOrigem.getLoc().getY());
4848

49-
model.addAttribute("latitudeDestino",zip2.getLoc().getX());
50-
model.addAttribute("longitudeDestino",zip2.getLoc().getY());
49+
model.addAttribute("latitudeDestino",zipDestino.getLoc().getX());
50+
model.addAttribute("longitudeDestino",zipDestino.getLoc().getY());
51+
52+
List<Zip> cidadesProximas = repository.findCidadesProximas(zipDestino.getLoc().getX(),zipDestino.getLoc().getY());
53+
model.addAttribute("cidadesProximas",cidadesProximas);
5154

5255
return "calcular";
5356

src/main/java/com/boaglio/casadocodigo/mongodb/model/Loc.java

100644100755
File mode changed.

src/main/java/com/boaglio/casadocodigo/mongodb/model/Zip.java

100644100755
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,24 @@ public String toString() {
5353
return "Zip [id=" + id + ", city=" + city + ", state=" + state + ", loc=" + loc + "]";
5454
}
5555

56+
@Override
57+
public int hashCode() {
58+
final int prime = 31;
59+
int result = 1;
60+
result = prime * result + (id == null ? 0 : id.hashCode());
61+
return result;
62+
}
63+
64+
@Override
65+
public boolean equals(Object obj) {
66+
if (this == obj) { return true; }
67+
if (obj == null) { return false; }
68+
if (getClass() != obj.getClass()) { return false; }
69+
Zip other = (Zip) obj;
70+
if (id == null) {
71+
if (other.id != null) { return false; }
72+
} else if (!id.equals(other.id)) { return false; }
73+
return true;
74+
}
75+
5676
}

src/main/java/com/boaglio/casadocodigo/mongodb/repository/ZipsRepository.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,20 @@
55

66
import org.springframework.beans.factory.annotation.Autowired;
77
import org.springframework.data.domain.Sort;
8+
import org.springframework.data.geo.Point;
89
import org.springframework.data.mongodb.core.MongoTemplate;
910
import org.springframework.data.mongodb.core.query.Criteria;
1011
import org.springframework.data.mongodb.core.query.Query;
1112
import org.springframework.stereotype.Repository;
1213

1314
import com.boaglio.casadocodigo.mongodb.model.Zip;
15+
import com.boaglio.casadocodigo.mongodb.util.CalculaDistancia;
1416

1517
@Repository
1618
public class ZipsRepository {
1719

20+
public static final Double RAIO_DE_DISTANCIA_EM_KM = 90.0d;
21+
1822
@Autowired
1923
private MongoTemplate mongoTemplate;
2024

@@ -25,7 +29,7 @@ public List<Zip> findAll() {
2529
query.with(new Sort(Sort.Direction.ASC,"city"));
2630
zips = mongoTemplate.find(query,Zip.class);
2731

28-
System.out.println("total de zips = " + zips.size());
32+
System.out.println("total de cidades = " + zips.size());
2933
return zips;
3034
}
3135

@@ -41,4 +45,19 @@ public Zip findById(String id) {
4145
return zip;
4246
}
4347

48+
public List<Zip> findCidadesProximas(Double x,Double y) {
49+
50+
List<Zip> zips = new ArrayList<Zip>();
51+
52+
Criteria criteria = new Criteria("loc").near(new Point(x,y)).maxDistance(CalculaDistancia.getInKilometer(RAIO_DE_DISTANCIA_EM_KM));
53+
Query buscaCidades = new Query(criteria);
54+
zips = mongoTemplate.find(buscaCidades.limit(11),Zip.class);
55+
56+
zips.remove(zips.get(0));
57+
58+
System.out.println("total de cidades proximas = " + zips.size());
59+
60+
return zips;
61+
}
62+
4463
}

src/main/java/com/boaglio/casadocodigo/mongodb/util/CalculaDistancia.java

100644100755
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
public class CalculaDistancia {
88

9+
public static final Double KILOMETER = 111.0d;
10+
911
public static double distance(double lon1,double lat1,double lon2,double lat2) {
1012
double theta = lon1 - lon2;
1113
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
@@ -30,6 +32,10 @@ private static double rad2deg(double rad) {
3032
return rad * 180 / Math.PI;
3133
}
3234

35+
public static Double getInKilometer(Double maxdistance) {
36+
return maxdistance / KILOMETER;
37+
}
38+
3339
public static void main(String[] args) {
3440
System.out.println("Miami ate Orlando");
3541
System.out.println(distance(80.441031,25.661502,81.408162,28.487102) + " Km");

src/main/webapp/WEB-INF/pages/calcular.jsp

100644100755
Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
33

44
<%@ page import="java.util.*" %>
5+
<%@ page import="com.boaglio.casadocodigo.mongodb.util.*" %>
56

67
<html>
78
<head>
89
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
910
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
11+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
1012
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
1113
</head>
1214
<body>
@@ -42,6 +44,19 @@
4244
</a>
4345
</div>
4446

47+
<div class="col-md-2">
48+
<span class="label label-info"> Cidades pr&oacute;ximas</span>
49+
<ul class="list-group">
50+
<c:forEach var="cidadeProxima" items="${cidadesProximas}">
51+
<li class="list-group-item">
52+
<a href="http://maps.google.com/?q=<c:out value="${cidadeProxima.loc.y}" />,-<c:out value="${cidadeProxima.loc.x}" />" target="_BLANK">
53+
<c:out value="${cidadeProxima.city}" />-<c:out value="${cidadeProxima.state}" />
54+
</a>
55+
</li>
56+
</c:forEach>
57+
</ul>
58+
</div>
59+
4560
</div>
4661
<br/><br/>
4762
<div class="row">
@@ -52,7 +67,6 @@
5267
<input class="btn btn-primary btn-lg" type="submit" value="voltar" />
5368
</form>
5469

55-
5670
</div>
5771

5872
</div>

src/main/webapp/WEB-INF/pages/home.jsp

100644100755
Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<head>
55
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
66
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
7+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
78
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
89
</head>
910
<body>
@@ -16,40 +17,40 @@
1617
<span class="alert alert-info">Dist&acirc;ncia entre cidades americanas</span>
1718
</div>
1819
<br/>
19-
<form class="form-horizontal" action="calcular" >
20+
21+
<form class="form-horizontal" action="calcular" method="post" >
2022

2123
<div class="form-group">
2224
<label for="sel1">Origem::</label>
23-
<select name="idCidadeOrigem" class="form-control">
25+
<select id="idCidadeOrigem" name="idCidadeOrigem" class="form-control">
2426
<c:forEach var="zip1" items="${zips}">
25-
<option value="<c:out value="${zip1.id}" />">
27+
<option value="<c:out value="${zip1.id}" />"<c:if test="${zip1.city=='MIAMI' && zip1.state=='FL' }">selected</c:if> >
2628
<c:out value="${zip1.city}" /> - <c:out value="${zip1.state}" />
2729
</option>
2830
</c:forEach>
2931
</select>
3032
</div>
3133

32-
<div class="form-group">
34+
<div class="form-group">
3335
<label for="sel1">Destino:</label>
34-
<select name="idCidadeDestino" class="form-control">
36+
<select name="idCidadeDestino" class="form-control">
3537
<c:forEach var="zip2" items="${zips}">
36-
<option value="<c:out value="${zip2.id}" />">
38+
<option value="<c:out value="${zip2.id}" />"<c:if test="${zip2.city=='ORLANDO' && zip2.state=='FL' }">selected</c:if> >
3739
<c:out value="${zip2.city}" /> - <c:out value="${zip2.state}" />
3840
</option>
3941
</c:forEach>
40-
</select>
41-
</div>
42+
</select>
43+
</div>
4244

43-
<div class="form-group">
44-
<input class="btn btn-primary btn-lg" type="submit" value="calcular..." />
45-
</div>
46-
47-
</div>
45+
<div class="form-group">
46+
<input class="btn btn-primary btn-lg" type="submit" value="calcular..." />
47+
</div>
4848

4949
</form>
5050

5151
</div>
52+
</div>
5253

5354
<br/><br/>
5455
</body>
55-
</html>
56+
</html>

src/main/webapp/resources/distancia.png

100644100755
File mode changed.

0 commit comments

Comments
 (0)