【问题标题】:Google Map Marker Manager V3谷歌地图标记管理器 V3
【发布时间】:2011-12-10 18:39:34
【问题描述】:

我试过使用谷歌地图标记管理器,但我似乎每次都碰壁,我按照谷歌文档上关于如何创建标记管理器的教程进行操作,但似乎没有什么对我有用,这是一个问题我的代码是如何编写的?这里的想法用完了,目前我已经设置了一个标记以根据 latlng 在地图上下拉。

有人可以尝试实现教程代码并为我找到可行的解决方案吗?它让我发疯。

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<div id="map_canvas" style="width:500px; height:500px;"></div>

   <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>

    @*<script src="../../Scripts/markermanager.js" type="text/javascript"></script>*@

    <script type="text/javascript">

        function initialize() {
            var latlng = new google.maps.LatLng(-34.397, 150.644);
            var myOptions = {
                zoom: 8,
                center: latlng,
                mapTypeId: google.maps.MapTypeId.ROADMAP // map view, can be set to satellite, street, roadview, aerialview
            };
            map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

            var marker = new google.maps.Marker({
                position: latlng,
                map: map,
                animation: google.maps.Animation.DROP,
                title: "Uluru (Ayers Rock)"
            });

            marker.setMap(map);  
        }

        $(document).ready(function () {
            initialize();
        });

    </script>

【问题讨论】:

  • 您已包含该文件,但您没有使用上述代码中的标记管理器类。这是为什么呢?
  • 出现错误:未定义 GBounds [Break On This Error] GBounds.prototype.containsPoint = function (point) { inside the markermanager.js 文件
  • 您使用的是什么标记管理器?您是否使用为 GMAP API v2 和 GMAP API v3 制作的标记管理器?
  • 对,只是将标记管理器放入 v3,谷歌不会让事情变得简单,对,我会尝试一下,现在使用 v3 创建标记,看看我是怎么做的。

标签: javascript google-maps google-maps-api-3 google-maps-markers


【解决方案1】:

下面是一个帮助您入门的示例:

var map;
var mgr;

function initialize() {
  var myOptions = {
    zoom: 8,
    center: new google.maps.LatLng(-34.397, 150.644),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  mgr = new MarkerManager(map);
  google.maps.event.addListener(mgr, "loaded", function() {
    for (var i = 0; i < 1000; i++) {
      var marker = new google.maps.Marker({
        position: new google.maps.LatLng(Math.random() * 180 - 90, Math.random() * 360 - 180),
        title: "Random marker #" + i
      });
      mgr.addMarker(marker, 0);
    }
    mgr.refresh();
  });
}
google.maps.event.addDomListener(window, "load", initialize);
<script src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markermanager/src/markermanager.js"></script>

<div id="map_canvas" style="height: 400px;"></div>
<p>Pan or zoom out to see markers</p>

请注意,在创建标记时,我没有指定 map: mapmarker.setMap(map)。相反,标记被添加到标记管理器中,当您调用markermanager.refresh() 时,标记管理器又将它们添加到地图中。

另外请注意,我已在缩放级别 0 上添加了所有标记。理想情况下,您应该在较低缩放级别上加载少量标记,在较高缩放级别上加载更多标记。

【讨论】:

  • 优秀的例子..正是我需要的,所以我看到我们使用了一个 for 循环,它将创建多达 1000 个标记并使用 math.random() 随机放置它们,我将如何得到它因此,当地图加载时,所有标记都会显示而不放大或缩小以查看所有标记?会不会像:map.fitBounds(latlngbounds);
  • 对于上面的例子,我如何在不放大/缩小的情况下适应地图上的所有标记? map.fitBounds();是这样的吗?
  • 现在为我工作,现在我将查看 MVC3 中的 JSON 结果 :) 谢谢 Salman :)
  • 既然您提到了 JSON 和标记管理器,请查看 this page(使用 api v2)。将地图缩小5-6倍并平移地图;您会注意到 AJAX 请求。随意查看源代码。
  • 我相信您可以通过infoWindows 轻松做到这一点。查看该页面上的示例。
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 2011-08-07
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多