Javascript 使用Spring MVC在Google地图上显示标记

Javascript 使用Spring MVC在Google地图上显示标记,javascript,google-maps,spring-mvc,google-maps-api-3,Javascript,Google Maps,Spring Mvc,Google Maps Api 3,我试图通过从E数据库获取纬度和经度来显示标记。问题是我被困在视图部分 我将与我的jsp文件共享,我想在其中使用JavaScript API将标记列表显示到GoogleMap中 map.jsp: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/co

我试图通过从E数据库获取纬度和经度来显示标记。问题是我被困在视图部分

我将与我的jsp文件共享,我想在其中使用JavaScript API将标记列表显示到GoogleMap中

map.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <title>Auxilium Saver</title>
    <style>
        #map-canvas {
          height: 600px;
          height: 600px;
          margin: 0px;
          padding: 0px
        }
    </style>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?"></script>

    <script type="text/javascript">
        var markerLat, markerLong;
        markerLat = [
            <c:forEach var="s" items="${listGeo}" varStatus="status">
                [<c:out value="${s.latitude}"/>,
            </c:forEach>];
        markerLong = [
          <c:forEach var="s" items="${listGeo}" varStatus="status">
              [<c:out value="${s.longitude}"/>,
          </c:forEach>];

        function initialize() {
            var map;
            var initlatlng = new google.maps.LatLng(markerLat[0],markerLong[0]);
            var mapOptions = {
                zoom: 6,
                center: new google.maps.LatLng(36,5),
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
            var infowindow = new google.maps.InfoWindow(); 
            var marker, i;

            for (i = 0; i < markerLat.length; i++) {
                marker = new google.maps.Marker({
                    position: new google.maps.LatLng(markerLat[i], markerLong[i]),
                    map: map
                });

                google.maps.event.addListener(marker, 'click', (function(marker, i) {
                    return function() {
                        infowindow.setContent(markers[i]);
                        infowindow.open(map, marker);
                    }
                })(marker, i));
            }
        }

        google.maps.event.addDomListener(window, 'load', initialize);
    </script>
</head>
</html>

正如评论中所说,您生成的JS无效。请参见示例中如何生成
markerLat
markerLong

markerLat=[
[51.5286417,
[48.1549108,
[34.0204989,
[41.3947901,
];
马克龙=[
[-0.1015987,
[11.5418358,
[-118.4117325,
[2.1487679,
];
好吧,这不是有效的JavaScript,正如Google Chrome(或者其他浏览器,当然还有规范)所说:

因此,在
map.jsp
中,更改以下内容:

markerLat=[
[,
];
马克龙=[
[,
];
为此:

markerLat=[
,
];
马克龙=[
,
];
这样,将生成有效的JavaScript,如下所示:

markerLat=[
51.5286417,
48.1549108,
34.0204989,
41.3947901,
];
马克龙=[
-0.1015987,
11.5418358,
-118.4117325,
2.1487679,
];
以下是我的测试结果:


我遵循了您的示例,遇到了这些错误


问题是,我的结果是一个白色矩形,而不是地图…请参阅浏览器控制台,可能有错误。然后,尝试在JSP页面中生成有效的JS。当我使用纬度和经度的静态值时,它工作得非常好…确切地说,请查看生成的是否正常。确实如此,但我需要的是显示纬度和经度在一个数据库…@ AchrafDelaville欢迎你,所以请考虑接受答案:)我想问你是否有一种方法自动显示这些标记在更新的情况下不需要重新加载页面。像移动标记……Akraveldavele:是的,有很多方法可以做到这一点,但是还有其他问题。sockets、stomp、reverse ajax等等。谢谢你,我试图学习一些关于这个主题的知识,但是我发现了很多困难,尤其是在使用Spring时。请展示一些简单的方法…@Bruno César,我们有没有办法为每个标记添加更多信息,这些标记可以在单击或悬停时显示。这不会出现回答问题。如果您有相关问题,请提出新问题并链接此问题。
@Controller
public class MapController {

    @Autowired
    private GeolocDAO geolocDAO;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public ModelAndView getPages(HttpServletRequest request) {
        Geolocation geoloc = geolocDAO.get();
        ModelAndView model = new ModelAndView("map");
        List<Geolocation> listGeo = geolocDAO.list();
        model.addObject("listGeo", listGeo);
        return model;
    }

}