谷歌地图上没有集群的100k或更多标记

问题描述:

我有一些数据是通过安装在汽车上的GPS设备收集的。所以我拥有的数据基本上都躺在街/路上/周围。每个坐标都有一定的价值。数据的格式是这样的。谷歌地图上没有集群的100k或更多标记

lat   | long  | value 
--------------------------------- 
12.979155 | 77.644925 | 6 
--------------------------------- 
12.97916833 | 77.64493667 | 2 
--------------------------------- 
12.97917167 | 77.64492167 | 8 

我的任务是在谷歌地图上绘制这些经纬图。当我们谈论放置10个,100个或1000个标记时,这似乎是相当容易的任务。但正如我上面提到的,我们正在通过驱动器收集数据,并且两个经纬度或两个点之间的距离将会很少(例如2-3英尺)。

因此,在调查结束时,我会为城市的一小部分提供90-100k lat,可能会为整个城市增加100万。

我已经尝试添加9-10k标记和它的woking罚款,但是当我试图加载40k,50k,60k它使我的浏览器非常慢,这是我结束的错误消息。

Uncaught RangeError: Maximum call stack size exceeded  main.js:1 

我一直在谷歌上搜索了很多关于它,但我不是能找到任何实例或教程,这将导致我使用的技术,我知道有点放置百万标记。(这是asp.net )。 找到这个例子http://www.scribblemaps.com/markerComplex/ Jonathan Wagner,但我不能理解它,并在我现有的代码中实现它,就像这样。

//从MSSQL服务器获取lat-long。

function PushValues(ParameterID) { 
     a = ParameterID.slice(5); 
    var CityID = $('#ddlCity').val().split('|'); 
    $.ajax({ 
     type: "POST", 
     url: "index.aspx/PushLatLong", 
     data: "{CityID:'" + CityID[0] + "',OperatorID:'" + $('#ddlOperator').val() + "',ParameterID:'" + ParameterID.slice(4) + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: false, 
     cache: false, 
     success: function (response) { 
      GooglePlaces = response.d.split('#'); 
      if (GooglePlaces != "Blank") { 
       HasValues = 1; 
      } else { 
       HasValues = 0; 
      } 

     }, 
     Error: function (r) { 

     } 
    }); 
} 

//在谷歌地图中放置值。

function PlaceValues() { 
    var options = { zoom: 3, center: new google.maps.LatLng(37.09, -95.71), mapTypeId: google.maps.MapTypeId.ROADMAP }; 
    var map = new google.maps.Map(document.getElementById('map'), options); 
    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0; i < GooglePlaces.length; i = i + 2) { 
     ltlg = new google.maps.LatLng(GooglePlaces[i], GooglePlaces[i + 1]); 
     var marker = new google.maps.Marker({ 
      position: ltlg, 
      map: map, 
      title: 'Place number', 
      icon: "img/GoogleIcons/" + legendfirstvalue[1] 
     }); 
     bounds.extend(ltlg); 
    } 
    map.fitBounds(bounds) 
    $('#DivLoadImage').hide(); 
} 

还有一点我想在此一提的是,标记的颜色取决于LAT-长期的价值。所以我会有多个颜色标记。我可以很容易地尝试群集标记,但是,我不能看到标记颜色,直到我到该区域。所以我无法使用clustring。

我确信在我的代码中会有数百万个错误。如果需要,我愿意改变我的方法。 Here是应用程序的演示。

+0

http://coeindia.in/test/harry/index.html不起作用 – Kiquenet 2015-04-06 06:32:13

+0

这是我老雇主网站的一个网址。他们可能在目录中做了一些更改。 – Ravi 2015-06-11 08:50:16

最接近你可以得到(没有聚类)是使用融合表来存储数据并从那里检索它 - 这可能类似于你的例子已经使用 - 因为它的闪存可以使它们比正常的API快得多可以完成。

融合表本身将在服务器端将标记渲染为图块并检索这些标记。

的谷歌地图API,可让您呈现包含在谷歌 Fusion Tables的使用FusionTablesLayer对象在地图上的图层。

例子吧in this link.

与fusiontables我会做类似的基于视窗的渲染

总之这基本上意味着仅绘制标记,以视可见 - 不是真正的“聚类技术”,但非常有用的,当我们正在考虑渲染速度。阅读更多关于它们的信息google docs (fusiontables)viewport marker management.相同的页面还包含更详细的链接Fusiontables api和教程。

如果你最终决定在服务器端进行集群 - 要做好准备,这不是一件容易的事情 - 但如果你这样做,实现类似于基于网格的集群。 (还解释withing在同一个页面 - 该死的好链接?)

另外要注意的是:

只有在一个表中的数据的第一100,000行映射或包含在查询结果。

要了解更多信息,see from here.

干杯。

+0

@Mauno V.我浏览了上面提到的细节。融合表有一些限制。在获取和上传数据方面存在限制,每个用户只能存储250 MB数据。我不认为按照我的要求,这将是我的正确选择。 – Ravi 2013-03-16 15:06:54

+0

那么,它需要有一些c的限制。但有了正确的设计,它可以工作..你检查或询问你是否收到更多,如果你购买它的业务和支付现金?我相信谷歌也需要赚一些钱,所以他们设定了限制。 :) – 2013-03-16 15:53:36

融合表是大数据的途径。这些表格可以使用GmapGIS进行查看和修改。