【发布时间】:2010-01-30 12:39:14
【问题描述】:
我正在尝试通过 Google Maps API 动态表示 groovy 域对象的坐标变化。该对象具有字段:
Double lat
Double lng
还有一个方法:
void flyTo(lat, lng){
Thread.start(){
while (locked){
changeCoords (this)
this.save()
}
}
这是一个每 5 秒重新填充地图更改的 JS:
<script src="http://maps.google.com/maps?file=api&v=2&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() 方法时,我遇到了两个错误。
- 不会填充对象的更改。事实上,地图甚至都没有显示出来。
- 当我调用
this.save()方法时,线程中出现异常:No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
我该如何解决这些问题?有没有更好的方法来做到这一点?
【问题讨论】:
标签: javascript hibernate grails groovy google-maps