Javascript 如何在逻辑上划分为段的地图上显示标记(巨大的数字)?

Javascript 如何在逻辑上划分为段的地图上显示标记(巨大的数字)?,javascript,geolocation,maps,here-api,Javascript,Geolocation,Maps,Here Api,到目前为止我所做的: 我正在开发一个应用程序,在这个应用程序中,我必须在Navteq地图上显示分为不同部分的超过(50K)个点/标记。 例如:如果我有50K点,我将把所有点分成不同的段 如果我将50K点划分为50段,则每个段将具有1000点(可能不是50段,这取决于具体情况)。 现在它正在工作,但是它需要很长的时间和挂起来渲染地图上的所有点。因此,我想执行分段显示,以显示只有少数点与聚类。 这样我就可以知道这个片段的样子了 但这里的问题是,我应该只根据线段执行聚类。否则,来自不同线段的点将混合在

到目前为止我所做的: 我正在开发一个应用程序,在这个应用程序中,我必须在Navteq地图上显示分为不同部分的超过(50K)个点/标记。 例如:如果我有50K点,我将把所有点分成不同的段

如果我将
50K
点划分为
50
段,则每个段将具有
1000
点(可能不是50段,这取决于具体情况)。 现在它正在工作,但是它需要很长的时间和挂起来渲染地图上的所有点。因此,我想执行分段显示,以显示只有少数点与聚类。 这样我就可以知道这个片段的样子了

但这里的问题是,我应该只根据线段执行聚类。否则,来自不同线段的点将混合在一起并显示 作为一个单独的单元,它将错误的信息传递给用户

因此,我的问题是:是否可以基于段执行聚类。这样,只有来自同一线段的点才会被聚集

注意:如果这是不可能的,我想使用最新版本的
此处maps 2.5.3
(异步)可能会减少加载时的一些时间,因此我希望在渲染点时也使用索引功能 使用类来提高渲染时间

我研究了索引将减少在地图上渲染点/标记时的时间。这对我有帮助吗?有人能建议如何执行索引吗

这是我在地图上显示点的代码:

function displayAllLightPoints(arrLightPointCoordinats, totalLightPoints, 
                    selectedSegmentId, totalSegmentsCount,segmentColorcode) 
{
    var MyTheme1 = function () {   
    };
    segmentColorcode = segmentColorcode.substring(2,segmentColorcode.length-1);

    MyTheme1.prototype.getNoisePresentation = function (dataPoint) {
            var markerLightPoint = new nokia.maps.map.Marker(dataPoint, {
            icon: new nokia.maps.gfx.BitmapImage("..//Images//Lightpoint//" + 
                                                  segmentColorcode + ".png"),
            anchor: {
                x: 12,
                y: 12
            }
        });
        return markerLightPoint;     
    };

    MyTheme1.prototype.getClusterPresentation = function (data) {   
        var markerLightPoint = new 
            nokia.maps.map.StandardMarker(data.getBounds().getCenter(), {
            icon: new nokia.maps.gfx.BitmapImage("..//Images//
                Segment/" + segmentColorcode + ".png", null, 66, 65),
            text: data.getSize(),
            zIndex: 2,
            anchor: {
                x: 12,
                y: 12
            }
        });
        return markerLightPoint; 
    };

    var ClusterProvider = nokia.maps.clustering.ClusterProvider,
        theme = new MyTheme1(),
        clusterProvider = new ClusterProvider(map, {
            eps: 0.00000000001,
            minPts: 1000000,
            strategy: nokia.maps.clustering.ClusterProvider.
                                     STRATEGY_DENSITY_BASED,
            theme: theme,
            dataPoints: []
        });
    var lightpointsDataSet1 = new Array();
    for (var i = 0; i < totalLightPoints; i++) {     
        lightpointsDataSet1[i] = { latitude: arrLightPointCoordinats[i][0], 
             longitude: arrLightPointCoordinats[i][1], title:
            'LightPoint ' + (i + 1) };
    }

    clusterProvider.addAll(lightpointsDataSet1);
    clusterProvider.cluster();
}
函数显示所有光点(arrlightpoint坐标、totalightpoints、,
selectedSegmentId、TotalSegmentScont、segmentColorcode)
{
var MyTheme1=函数(){
};
segmentColorcode=segmentColorcode.substring(2,segmentColorcode.length-1);
MyTheme1.prototype.getNoisePresentation=函数(数据点){
var markerLightPoint=新的nokia.maps.map.Marker(数据点{
图标:new nokia.maps.gfx.BitmapImage(“..//Images//Lightpoint/”+
segmentColorcode+“.png”),
主播:{
x:12,
y:12
}
});
返回标记灯点;
};
MyTheme1.prototype.getClusterPresentation=函数(数据){
var markerLightPoint=新
nokia.maps.map.StandardMarker(data.getBounds().getCenter(){
图标:new nokia.maps.gfx.BitmapImage(“..//Images//
段/“+segmentColorcode+”.png“,空,66,65),
text:data.getSize(),
zIndex:2,
主播:{
x:12,
y:12
}
});
返回标记灯点;
};
var ClusterProvider=nokia.maps.clustering.ClusterProvider,
主题=新的MyTheme1(),
clusterProvider=新的clusterProvider(映射{
每股收益:0.000000000001,
minPts:1000000,
策略:nokia.maps.clustering.ClusterProvider。
战略(基于密度),,
主题:主题,,
数据点:[]
});
var lightpointsDataSet1=新数组();
对于(var i=0;i
为了处理一个非常大(50K+)的数据集,我会在服务器端执行所有繁重的数字运算,并在地图更新时发送一个新的JSON响应。类似于所描述的HTML页面

代码的关键部分是ZoomObserver:

var zoomObserver = function (obj, key, newValue, oldValue) {
  zoom = newValue;
  if (zoom < 7)
    { zoom = 7;}
  if (zoom > 16)
    { zoom = 16;}
  // Define the XML filename to read that contains the marker data
  placeMarkersOnMaps('http://api.maps.nokia.com/downloads/java-me/cluster/'+ zoom + '.xml' 
    + '?lat1=' + map.getViewBounds().topLeft.latitude
    + '&lng1='+ map.getViewBounds().topLeft.longitude
    + '&lat2='+ map.getViewBounds().bottomRight.latitude
    + '&lng2='+ map.getViewBounds().bottomRight.longitude);
};

map.addObserver("zoomLevel", zoomObserver );
i、 e.使用标准(这意味着您也可以使用热图)

当然,这里我没有展示的是集群的后端功能——但这让客户端(和API)做它最擅长的事情,显示数据,而不是数字运算

{latitude':51.761,'longitude':14.33128,'value':102091},