javascript - Spring MVC - 从数据库向 Google map 添加多个标记

标签 javascript java spring google-maps google-maps-api-3

我正在尝试在数据库中的 map 上显示多个标记。我已经查看了其他示例,并且 Google 的示例在我的服务器上运行,但似乎无法使其与数据库信息一起使用。

这是我到目前为止所拥有的:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<title>Simple Map</title>
<meta name="viewport" content="initial-scale=1.0">
</head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost/project" user="root" password="root" />

<sql:query dataSource="${snapshot}" var="result">
SELECT * from House;
</sql:query>

<div id="map"></div>
<script type="text/javascript">
    var markerLat, markerLong;
    markerLat = [
        <c:forEach var="s" items="${result.rows}">
            <c:out value="${s.lat}"/>,
        </c:forEach>;
    markerLong = [
      <c:forEach var="s" items="${result.rows}">
          <c:out value="${s.lng}"/>,
      </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'), 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>
<script
    src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBiKZEYI58kG67y8dT50HG4ByxMmWHbwXA"
    async defer></script>

它给我一个错误,说“Uncaught ReferenceError:google is not Define”

有人可以告诉我我做错了什么,或者指导我从数据库向 map 添加多个标记的其他示例吗?

最佳答案

此代码异步加载 Google map javascript API:

<script
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBiKZEYI58kG67y8dT50HG4ByxMmWHbwXA"
async defer></script>

您应该:

A.同步加载 Google Maps Javascript API:

  1. 从脚本包含中删除“异步延迟”
  2. 在使用 google.maps 命名空间之前加载 Google Maps Javascript API。

B.异步加载它,并在加载后使用callback参数执行依赖于它的代码:

  1. 删除此行google.maps.event.addDomListener(window, 'load',initialize);
  2. 将 API 包含更改为:

<script
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBiKZEYI58kG67y8dT50HG4ByxMmWHbwXA
&callback=initialize"
async defer></script>  

关于javascript - Spring MVC - 从数据库向 Google map 添加多个标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34875416/

相关文章:

javascript - 选择值后删除 jquery 验证错误消息

javascript - 返回父原型(prototype)的函数的命名建议

java - 尝试向已有数据的表添加新的 boolean 列时出错

java - Spring Data JPA 和事务管理

java.lang.ClassNotFoundException : org. junit.runners.BlockJUnit4ClassRunner

java - Spring HttpClientErrorException 未提供响应正文的详细信息

javascript - 转换 ISO-8601 时间戳

javascript - 从倒数第二个开始删除表格行

java - 对象和数据结构有什么区别?

java - 在 spring 托管 bean 的构造函数中初始化 Jersey 客户端