Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在单击标记时设置panTo自动缩放?_Javascript_Asp.net_Google Maps_Google Maps Markers - Fatal编程技术网

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() + @"); 
}