谷歌地图上没有集群的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是应用程序的演示。
最接近你可以得到(没有聚类)是使用融合表来存储数据并从那里检索它 - 这可能类似于你的例子已经使用 - 因为它的闪存可以使它们比正常的API快得多可以完成。
融合表本身将在服务器端将标记渲染为图块并检索这些标记。
与fusiontables我会做类似的基于视窗的渲染的谷歌地图API,可让您呈现包含在谷歌 Fusion Tables的使用FusionTablesLayer对象在地图上的图层。
总之这基本上意味着仅绘制标记,以视可见 - 不是真正的“聚类技术”,但非常有用的,当我们正在考虑渲染速度。阅读更多关于它们的信息google docs (fusiontables)和viewport marker management.相同的页面还包含更详细的链接Fusiontables api和教程。
如果你最终决定在服务器端进行集群 - 要做好准备,这不是一件容易的事情 - 但如果你这样做,实现类似于基于网格的集群。 (还解释withing在同一个页面 - 该死的好链接?)
另外要注意的是:
只有在一个表中的数据的第一100,000行映射或包含在查询结果。
要了解更多信息,see from here.
干杯。
@Mauno V.我浏览了上面提到的细节。融合表有一些限制。在获取和上传数据方面存在限制,每个用户只能存储250 MB数据。我不认为按照我的要求,这将是我的正确选择。 – Ravi 2013-03-16 15:06:54
那么,它需要有一些c的限制。但有了正确的设计,它可以工作..你检查或询问你是否收到更多,如果你购买它的业务和支付现金?我相信谷歌也需要赚一些钱,所以他们设定了限制。 :) – 2013-03-16 15:53:36
http://coeindia.in/test/harry/index.html不起作用 – Kiquenet 2015-04-06 06:32:13
这是我老雇主网站的一个网址。他们可能在目录中做了一些更改。 – Ravi 2015-06-11 08:50:16