java如何在每次请求后放置Google Maps标记
我有一个简单的web应用程序,上面有JSP页面和表单。它将带有“ID”标记的请求发送到servlet。Servlet将这个ID查询到MySQL数据库,并返回一个用于在地图上创建标记的地址
我想要我的申请:
- 在地图上的每个请求之后显示所有标记
- 删除其中一个或所有人的机会
但现在我所拥有的只是更新页面和一个标记
我将感谢您的帮助
以下是一个jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-16"/>
<title>Google Maps Geocoding Demo</title>
<script src="http://maps.google.com/maps/api/js?sensor=false"
type="text/javascript"></script>
</head>
<body>
<form action="qwe" method="get">
<table>
<tr>
<td align="left"> ID</td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td><input type="submit" value="Send"></td>
</tr>
<tr>
<td>Adress:</td>
<td>${Street_char} ${Street_name},${Street_adr}, ${Flat_number} floor ${Floor}</td>
</tr>
<tr>
<td>test</td>
<td>${test}</td>
</tr>
</table>
</form>
<br>
<div id="map" style="width: 400px; height: 400px;"></div>
<script type="text/javascript">
var address = "${address}";
var map = new google.maps.Map(document.getElementById('map'), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 18
});
var geocoder = new google.maps.Geocoder();
geocoder.geocode({'address': address},
function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var marker = new google.maps.Marker({
position: results[0].geometry.location,
map: map,
title: 'Uluru-Test'
});
var infowindow = new google.maps.InfoWindow();
new google.maps.event.addListener(marker, 'mouseover', (function (marker) {
// new google.maps.event.addListener(marker, 'click', (function(marker) {
return function () {
var content = address;
infowindow.setContent('<div><strong>' + 'test' + '</strong><br>' + content + '</div>');
infowindow.open(map, marker);
}
})(marker));
map.setCenter(results[0].geometry.location);
}
else {
// Google couldn't geocode this request. Handle appropriately.
}
});
</script>
</body>
</html>
以下是servlet:
@WebServlet(name = "Servlet", value = "/qwe")
public class Servlet extends HttpServlet {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/web";
private static final String USERNAME = "root";
private static final String PASSWORD = "root";
Connection connection;
PreparedStatement preparedStatement;
Variables variables = new Variables();
Variables adr = new Variables(variables.getStreet_char(), variables.getStreet_name(), variables.getStreet_adr());
String Select_addr = "SELECT * FROM client WHERE id=?;";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int id_jsp = Integer.parseInt(req.getParameter("id"));
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
preparedStatement = connection.prepareStatement(Select_addr);
preparedStatement.setInt(1, id_jsp);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
variables.setId(resultSet.getInt("id"));
variables.setName(resultSet.getString("Name"));
variables.setSurname(resultSet.getString("Surname"));
variables.setStreet_char(resultSet.getString("Street_char"));
variables.setStreet_name(resultSet.getString("Street_name"));
variables.setStreet_adr(resultSet.getString("Street_adr"));
variables.setFlat_number(resultSet.getInt("Flat_number"));
variables.setFloor(resultSet.getInt("Floor"));
}
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("ID: " + id_jsp + "<br>");
String adr = "" + variables.getStreet_char() + " " + variables.getStreet_name()
+ "," + variables.getStreet_adr() + "";
req.setAttribute("test", adr);
req.setAttribute("Name", variables.getName());
req.setAttribute("Surname", variables.getSurname());
req.setAttribute("Street_char", variables.getStreet_char());
req.setAttribute("Street_name", variables.getStreet_name());
req.setAttribute("Street_adr", variables.getStreet_adr());
req.setAttribute("Flat_number", variables.getFlat_number());
req.setAttribute("Floor", variables.getFloor());
req.setAttribute("address", adr);
req.getRequestDispatcher("mypage.jsp").forward(req, resp);
System.out.println(adr);
// out.close();
resultSet.close();
preparedStatement.close();
connection.close();
} catch (SQLException se) {
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (preparedStatement != null)
preparedStatement.close();
} catch (SQLException se2) {
se2.printStackTrace();
}
try {
if (connection != null)
connection.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
}
}
# 1 楼答案
希望每个请求只设置一个地址。相反,您可以尝试获取所有地址,并将其作为json数组发送给jsp
在下面的示例中,我使用了
City, Country
进行标记。我的json数组如下所示:我启动并生成标记的脚本
这里我使用ajax加载地图。如果json包含的数据可能与上述类似,则可以使用此函数生成多个标记
查看生成的带有多个标记的输出
对于删除标记,我建议您更新json并再次加载。希望这有帮助
更新:
这就是我的业务逻辑获取数据的方式。我在用
Spring & Hibernate
。我正在使用jackson
jar文件。它将java对象转换为json。你也可以使用Gson
而我的
GoogleMapHelper
只不过是一门POJO课