簡體   English   中英

使用 Spring MVC 在 Google Map 上顯示標記

[英]Display markers on Google Map using Spring MVC

我試圖通過從數據庫中獲取緯度和經度來顯示標記。 問題是我被困在視圖部分。

我將與我的 jsp 文件共享,我想在其中使用 JavaScript API 在 Google 地圖中顯示標記列表。

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>

MapController.java :

@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;
    }

}

正如評論中所說,您生成的 JS 無效。 在示例中查看如何生成markerLatmarkerLong

markerLat = [
        [51.5286417,

        [48.1549108,

        [34.0204989,

        [41.3947901,
    ];
markerLong = [
      [-0.1015987,

      [11.5418358,

      [-118.4117325,

      [2.1487679,
  ];

好吧,正如 Google Chrome(或任何其他瀏覽器,當然還有規范)所說,這不是有效的 JavaScript:

JavaScript 錯誤

因此,在您的map.jsp ,更改以下內容:

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>];

為了這:

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

這樣,將生成有效的 JavaScript,如下所示:

markerLat = [
    51.5286417,

    48.1549108,

    34.0204989,

    41.3947901,
];
markerLong = [
    -0.1015987,

    11.5418358,

    -118.4117325,

    2.1487679,
];

這是我的測試結果:

地圖結果

我試圖通過從數據庫中獲取經度和緯度來顯示標記。 問題是我被卡在視圖部分。

我將與我的jsp文件共享,我要在其中使用JavaScript API在Google Map中顯示標記列表。

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>

MapController.java

@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;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM