Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使线串分辨率取决于OpenLayers中的级别_Javascript_Openlayers - Fatal编程技术网

Javascript 使线串分辨率取决于OpenLayers中的级别

Javascript 使线串分辨率取决于OpenLayers中的级别,javascript,openlayers,Javascript,Openlayers,我正在使用OpenLayers在OpenLayers.Layer.Vector层上渲染OpenLayers.Geometry.LineString。这个想法是,这条线有时可能包含大量的点,这将使web浏览器停止。我无法触摸服务器代码,因为我们从外部网站检索数据 有没有一种优雅的方法可以使直线在全尺寸显示时点更少,在放大时点更多(放大时提高直线的分辨率) 我现在唯一的解决方案是告诉用户线条太大,并询问他是否有勇气绘制线条,或者从一开始就用较少的点来构建线条,当用户放大线条时,可能会出现一些问题。我

我正在使用OpenLayers在
OpenLayers.Layer.Vector
层上渲染
OpenLayers.Geometry.LineString
。这个想法是,这条线有时可能包含大量的点,这将使web浏览器停止。我无法触摸服务器代码,因为我们从外部网站检索数据

有没有一种优雅的方法可以使直线在全尺寸显示时点更少,在放大时点更多(放大时提高直线的分辨率)


我现在唯一的解决方案是告诉用户线条太大,并询问他是否有勇气绘制线条,或者从一开始就用较少的点来构建线条,当用户放大线条时,可能会出现一些问题。

我想到的唯一解决方案是手动处理,也就是说,当您最初从服务器获取线条几何图形时,您将创建一个数组,该数组将包含您需要的每个缩放级别的不同版本的几何图形

所以在数组中的第一个位置上,你们会有一个几何体,你们可以从原始几何体中每隔一秒移除一个点。然后在第二位上每隔三、四等

然后,您可以收听OpenLayers.MapZoomend事件,并根据缩放级别显示/隐藏阵列中的正确几何体


这有意义吗?

可以找到完整的解决方案。

一个非常快速和肮脏的解决方案是创建各种图层(用更多或更少的点表示路线),并根据缩放使每个图层可见或不可见

我从一个类似的应用程序中获取了这个伪代码,在这里,当zoom小于13时,我不想显示方向箭头:

vectors1 = new OpenLayers.Layer.Vector(...);
map.addLayer(vectors1);

// check for zoomLevel
map.events.on({ "zoomend": function (e) {
            if (this.getZoom() < 13) {
                vectors1.setVisibility(false);
            } else {
                vectors1.setVisibility(true);
            }
        }
        });
vectors1=newopenlayers.Layer.Vector(…);
map.addLayer(矢量1);
//检查zoomLevel
map.events.on({“zoomend”:函数(e){
if(this.getZoom()<13){
向量1.setVisibility(假);
}否则{
向量1.设置可见性(真);
}
}
});

您能举一个包括线和点的例子吗?在您的代码中,只有一行还是多行?是的。这是我将最终确定的解决方案。您的建议的问题是初始化需要花费大量的时间。我想这样做:制作一个自定义层,它将接收数据并根据级别进行渲染。缺点是,随着缩放级别的加深,速度会越来越慢,但是如果用户对缩放不感兴趣(大多数用户),速度会更快。