Javascript 如何在单击标记时设置panTo自动缩放?
我有一张地图,上面画着一些随机坐标,坐标被输入到数据表中,工作正常 但现在,由于我一直在尝试在地图上设置一个Javascript 如何在单击标记时设置panTo自动缩放?,javascript,asp.net,google-maps,google-maps-markers,Javascript,Asp.net,Google Maps,Google Maps Markers,我有一张地图,上面画着一些随机坐标,坐标被输入到数据表中,工作正常 但现在,由于我一直在尝试在地图上设置一个panTozoom功能,因此当单击任何一个标记时,地图画布将缓慢地放大到标记。 我无法正确设置它 那么,我怎样才能让这一切顺利进行呢?如有任何建议/答案,我们将不胜感激 我的GPSLib类: public static class GPSLib { public static String PlotGPSPoints(DataTable tblPoints) {
panTo
zoom功能,因此当单击任何一个标记时,地图画布将缓慢地放大到标记。
我无法正确设置它
那么,我怎样才能让这一切顺利进行呢?如有任何建议/答案,我们将不胜感激
我的GPSLib类:
public static class GPSLib
{
public static String PlotGPSPoints(DataTable tblPoints)
{
try
{
String Locations = "";
String sJScript = "";
int i = 0;
foreach (DataRow r in tblPoints.Rows)
{
// bypass empty rows
if (r["latitude"].ToString().Trim().Length == 0)
continue;
string Latitude = r["latitude"].ToString();
string Longitude = r["longitude"].ToString();
// create a line of JavaScript for marker on map for this record
Locations += Environment.NewLine + @"
path.push(new google.maps.LatLng(" + Latitude + ", " + Longitude + @"));
var marker" + i.ToString() + @" = new google.maps.Marker({
position: new google.maps.LatLng(" + Latitude + ", " + Longitude + @"),
title: '#' + path.getLength(),
map: map
});";
i++;
}
// construct the final script
// var cmloc = new google.maps.LatLng(33.779005, -118.178985);
// map.panTo(curmarker.position); //zooming on current marker's posn.
// map.panTo(myOptions.getPosition());
sJScript = @"<script type='text/javascript'>
var poly;
var map;
function initialize() {
var cmloc = new google.maps.LatLng(28.483243, 77.107624);
var myOptions = {
zoom: 19,
center: cmloc,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);
var polyOptions = {
strokeColor: 'blue',
strokeOpacity: 0.5,
strokeWeight: 3
}
poly = new google.maps.Polyline(polyOptions);
poly.setMap(map);
var path = poly.getPath();
" + Locations + @"
}
</script>";
return sJScript;
}
catch (Exception ex)
{
throw ex;
}
}
}
只需不编写
map.panTo()
创建标记后,您需要使用标记的单击事件,您应该在其中编写panTo()
在foreach循环之后,写下:
function myMark(rmarker)
{
google.maps.event.addListener(rmarker,'click',function(){
map.panTo(rmarker.getPosition());
});
}
最后在foreach循环中调用上述函数:
var marker" + i.ToString() + @" = new google.maps.Marker({
position: new google.maps.LatLng(" + Latitude + ", " + Longitude + @"),
title: '#' + path.getLength(),
map: map
});";
i++;
myMark(marker" + i.ToString() + @");
}
以上内容将帮助您解决您的问题
更新:这是一个演示,展示了您的功能:
查看编码模式,您应该能够很好地纠正错误。感谢您抽出时间回复。嗯
在foreach循环之后,写:
在foreach循环之前不是?我添加了:@“函数myMark(rmarker){google.maps.event.addListener(rmarker,'click',function(){map.panTo(rmarker.getPosition());}”
(注意@和“;结束javascript代码)但我得到一个错误,即:只有赋值、调用、递增、递减和新对象表达式可以用作语句
,而且在调用myMark()
时,我得到一个错误,即标记
在当前上下文中不存在。如果我在你的代码myMark(marker“+I.ToString()+@”)中像上面那样写
然后我得到一个错误,说)预期的:|不,您首先创建标记,然后调用myMark()
,以便为每个标记分配一个侦听器。不知道为什么@
和代码>您使用过的。我已经对你用来创建标记的语法产生了怀疑。var标记“+i.ToString()+@”
语法看起来不太好。您可以编写var marker=..
它们不需要有唯一的名称。
var marker" + i.ToString() + @" = new google.maps.Marker({
position: new google.maps.LatLng(" + Latitude + ", " + Longitude + @"),
title: '#' + path.getLength(),
map: map
});";
i++;
myMark(marker" + i.ToString() + @");
}