javascript - Grails + Google map API

标签 javascript hibernate grails groovy google-maps

我正在尝试通过 Google Maps API 动态表示 groovy 域对象的坐标变化。该对象具有字段:

Double lat
Double lng

和一个方法:

 void flyTo(lat, lng){
  Thread.start(){
   while (locked){
    changeCoords (this)
    this.save()
   }
  }

这是一个每 5 秒重新填充 map 更改的 JS:

    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key="MY_API_KEY"
            type="text/javascript"></script>
 <script type="text/javascript">
 var usCenterPoint = new GLatLng(39.833333, -98.583333)
 var usZoom = 4
 var map = new GMap2(document.getElementById("map"))

 function load() {
  if (GBrowserIsCompatible()) {
      var latFrom = -900;
      var latTo = -900;
      var lngFrom = -900;
      var lngTo = -900;
      map.setCenter(usCenterPoint, usZoom)
      map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl()); 
      updateMap();                      
   }
 }

 function updateMap(){
  map.clearOverlays();

  <g:each in="${dronesList}" status="i" var="drone"> 
         var point${drone.id} = new GLatLng(${drone.lat}, ${drone.lng})
         if (latFrom == -900){
           latFrom = ${drone.lat}
           lngFrom = ${drone.lng}
         } else {
    latTo = ${drone.lat}
    lngTo = ${drone.lng}
         }
        var marker${drone.id} = new GMarker(point${drone.id})
        marker${drone.id}.bindInfoWindowHtml("<strong>${drone.name}</strong><br/>${drone.description}<br/>")
          map.addOverlay(marker${drone.id});
         // map.setCenter(point${drone.id},usZoom);
         if (latTo != -900){
          var polyline = new GPolyline([
                                        new GLatLng(latFrom, lngFrom),
                                        new GLatLng(latTo, lngTo)
                                      ], "#ff0000", 10);
           map.addOverlay(polyline);
         }
     </g:each>  
 }
 </script>
  </head>
  <body onload="load(); setInterval('updateMap()', 5000)" onunload="GUnload()">

当我开始执行 flyTo() 方法时,遇到两个错误。

  1. 不会填充对象的更改。事实上, map 甚至没有显示。
  2. 当我调用 this.save() 方法时,我在线程中遇到异常:没有绑定(bind)到线程的 Hibernate session ,并且配置不允许创建非事务 session 这里

我该如何解决这些问题?有更好的方法吗?

最佳答案

好的,我有两个解决方案。

首先 — 我应该创建一个 Controller Action ,并通过 AJAX 对其进行校准以更新坐标。这个解决方案不太合适,因为我实际上感兴趣的是从外部而不是从 View 改变域对象的状态(希望,我解释得足够清楚。如果没有,我会在这里回答任何问题)。

第二 — 使用 Quartz plugin .

关于javascript - Grails + Google map API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2167881/

相关文章:

grails - grails用于单向一对一的外键

javascript - 通过拖动在一个位置使用两个图像

java - Select 和 Create_If_Not_Available 与始终在具有唯一约束的表上创建

java - Hibernate CriteriaBuilder 将多行连接成一行

java - 关于何时使用 spring/hibernate 为批处理作业启动新 session 或事务的最佳实践是什么?

json - 渲染生成器json无法正确渲染

grails - 除了使用 transient 关键字之外,还有其他任何方法可以阻止Grails域类中字段(也是域类对象)的持久性吗?

javascript - 在独立容器层之间使用 vanilla js 交叉淡入淡出幻灯片

php - 使用 javascript 或 PHP 添加表单值?

javascript - 使用 PointerLockControls 时, Three.js 无法渲染场景