Google Maps API를 통해 Groovy 도메인 객체의 좌표 변화를 동적으로 나타내려고합니다.Grails + Google Maps API
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()">
I가 실행을 시작할 flyTo()
메서드 중 두 가지 버그가 발생했습니다.
- 개체의 변경 내용이 채워지지 않습니다. 실제로,지도는 나타나지 않습니다.
No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
가 어떻게 사람들을 해결합니까 : 나는 this.save()
메서드를 호출 할 때
lat 및 lng 필드를 변경하고 뷰에 동적으로 변경 사항을 표시하므로 Thread.start()를 사용하고 있습니다. 내가 이해하는 한, 간단한 루프를 사용하면 루프가 끝날 때까지 페이지가 새로 고쳐지지 않습니다. 폼의 단추를 누르면 flyTo()가 호출됩니다. 그리고 업데이트는 다음과 같습니다 :
간단히 말해, 객체가 도달 할 때까지 특정 좌표를 표시하고 맵에서 실제 좌표를 나타냅니다. – folone