我目前正在尝试使用 Play 开发一个网络应用程序,因此我想集成到目前为止运行良好的谷歌地图。
在这个应用程序中,用户应该能够通过输入地址来添加标记。必须对该地址进行编码以获取 LatLng 值,并且只要用户不删除标记,标记就应该显示在地图上。
我的代码如下所示:
如您所见,我在开头添加了一个示例标记。添加一个新的效果很好。但是当我刷新整个页面时,谷歌地图再次重新加载,只显示示例标记,但不显示新标记。
我的问题:
1) 是否可以让谷歌地图在新标记可用时记住它们?
2) 是否有可能将 LatLng 值作为字符串属性存储在 Play 模型中?这可以帮助我在重新加载地图时重新加载数据库中的所有位置并重新显示所有标记。但似乎不可能在这样的播放语句中运行 codeAdress() 函数:@{Place.store(codeAddress())}。这行不通。
Main.html(每个 html 页面的模板)
<head>
....
<script type="text/javascript"
src="http://maps.googleapis.com/maps/api/js?key=-mykey-&sensor=false">
</script>
<script src="@{'/public/javascripts/maps.js'}" type="text/javascript"
charset="${_response_encoding}"></script>
</head>
Maps.js:
function initialize() {
var latlngCenter = new google.maps.LatLng(12.345, 12.345);
var latlngExample = new google.maps.LatLng(12.345, 12.345);
var mapOptions = {
center : latlngCenter,
zoom : 12,
mapTypeId : google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var contentString = 'text';
var infowindow = new google.maps.InfoWindow({
content : contentString
});
var pinColor = "72EC0E";
var pinImage = new google.maps.MarkerImage(
"http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|"
+ pinColor, new google.maps.Size(21, 34),
new google.maps.Point(0, 0), new google.maps.Point(10, 34));
var pinShadow = new google.maps.MarkerImage(
"http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
new google.maps.Size(40, 37), new google.maps.Point(0, 0),
new google.maps.Point(12, 35));
var markerExample = new google.maps.Marker({
position : latlngExample,
map : map,
icon : pinImage,
shadow : pinShadow,
title : 'Title'
});
google.maps.event.addListener(markerExample, 'click', function() {
infowindow.open(map, markerExample);
});
geocoder = new google.maps.Geocoder();
}
function codeAddress(query) {
var address = query;
geocoder.geocode({
'address' : address
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map : map,
position : results[0].geometry.location
});
alert("Alert1");
} else {
alert("No result");
}
});
return results[0].geometry.location;
}
index.html(从 main 扩展)
#{field 'parking.street'} <label for="street">street</label> <input
type="text" class="form-control" name="${field.name}" id="address"
maxlength="50" placeholder="street"> #{/field}
<button type="button" class="btn btn-success" onclick="codeAddress()">add</button>
<div id="map_canvas" style="width: 800px; height: 600px;"></div>