So4ne,
Se debe al DOM (Document Object Model). Si intenta cargar 150.000 objetos (puntos) en el DOM del navegador, la mayoría de los navegadores mostrarán un cuadro de diálogo de "secuencia de comandos de ejecución lenta" y desistirán en función de la memoria disponible.
He logrado esto con éxito mediante el uso de una API de servicio (usted tiene que diseñar esto) llamar a devolver todos los puntos de una sola vez al cliente en un objeto JavaScript y luego renderizar los puntos del objeto en el cliente en un lote de digamos 500 puntos por iteración (usted tiene que probar esto en varios navegadores si eso es un requisito y ajustar el tamaño del lote). Esto funcionará al 100% y será perfecto para el usuario. Pero es un requisito extraño renderizar tantos puntos a la vez sin agrupación ya que la pantalla estará demasiado llena para ver la capa del mapa.
Extracto de código (para Bing Maps de hace unos 7 años, pero los conceptos seguirán siendo válidos):
function fGetBingObject(result, userContext) {
try {
var markersArray = [];
if (result.Points) {
function pMark(result, loopCount) {
if (loopCount == undefined) {
loopCount = 0;
}
if (loopCount < result.Points.length) {
var batchSize = 500; //100
for (currCount = loopCount; currCount < loopCount + batchSize && currCount < result.Points.length; ++currCount) {
var myIcon_google;
var myPoint = new VELatLong(result.Points[currCount].Latitude, result.Points[currCount].Longitude);
var marker = new VEShape(VEShapeType.Pushpin, myPoint);
layer =
null;
if (result.Points[currCount].IconImage != '') {
marker.SetCustomIcon(result.Points[currCount].IconImage);
}
listen(marker, result.Points[currCount].InfoHTML);
markersArray.push(marker);
if (typeof result.Points[currCount].LayerKey != "undefined") {
if (result.Points[currCount].LayerKey != '') {
if (result.Points[currCount].LayerKey == 'TEST') {
marker.SetMinZoomLevel(result.Points[currCount].MinZoomLevel);
marker.SetMaxZoomLevel(result.Points[currCount].MaxZoomLevel);
layer = map.GetShapeLayerByIndex(1);
layer.AddShape(marker);
}
}
}
}
Saludos.