有人知道如何计算OL3矢量图层中存在的特征数量吗?
我的矢量图层定义如下,我想知道它有多少元素,理想情况下当前渲染了多少元素:
var styleCache = {};
var WFS_layer_Traffic_Lights = new ol.layer.Vector({
source : new ol.source.GeoJSON({
projection : 'EPSG:3857',
url : "Vector_Data/Traffic_Lights_Bordeaux.geojson"
}),
style : function(feature, resolution) {
var path;
var x_anchor;
var y_anchor;
if(resolution < 4){
path = 'Icons/Traffic_Lights_Sign_Icon_Small.png';
x_anchor = 23;
y_anchor = 90;
}
if(resolution >= 4 && resolution < 10){
path = 'Icons/Traffic_Lights_Sign_Small.png';
x_anchor = 16;
y_anchor = 16;
}
if(resolution >= 10){
path = 'Icons/Traffic_Lights_Sign_Tiny.png';
x_anchor = 10;
y_anchor = 10;
}
if (!styleCache[path]) {
styleCache[path] …Run Code Online (Sandbox Code Playgroud) 我希望我的应用程序中有一个选项,允许在用户需要时禁用捏合旋转。
我有一张地图:
map_object = new ol.Map({
target: 'map',
controls: controls_list,
interactions: interactions_list,
overlays: [overlay],
layers: vector_layers,
view: view
});
Run Code Online (Sandbox Code Playgroud)
您会注意到我在地图定义中以通常的方式定义了交互。我的交互列表如下:
var interactions_list = ol.interaction.defaults({altShiftDragRotate:false, pinchRotate:true, dragPan:true});
Run Code Online (Sandbox Code Playgroud)
如何在创建地图对象后禁用捏合旋转,以便在加载和显示地图后禁用地图旋转。
我试图使用canvas.toDataURL()下载整个画布图像.图像是在画布上呈现的地图(打开图层3).
在Firefox中,我可以使用以下内容通过点击链接下载地图:
var exportPNGElement = document.getElementById('export_image_button');
if ('download' in exportPNGElement) {
map.once('postcompose', function(event) {
var canvas = event.context.canvas;
exportPNGElement.href = canvas.toDataURL('image/png');
});
map.renderSync();
} else {
alert("Sorry, something went wrong during our attempt to create the image");
}
Run Code Online (Sandbox Code Playgroud)
但是在Chrome和Opera中,我对链接的大小限制.我必须在物理上使窗口更小,以便下载工作.
浏览器之间存在大小限制差异,Chrome特别受限制.这里的类似帖子(现在已超过2年)表明了一个广泛的服务器端解决方法:
是否有客户端为此工作?
我有一个矢量图层,其特征具有旋转属性。我使用旋转属性来定义样式属性中功能图标的方向,如下所示:
var style_outer = new ol.style.Style({
image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
anchor: [0.5, 0.5],
anchorXUnits: 'fraction',
anchorYUnits: 'fraction',
src: './images/Feature_icons/Logo_Arrow_07.png',
rotation: rotation,
scale: photo_icon_resolution_function()
}))
});
Run Code Online (Sandbox Code Playgroud)
其中旋转是根据属性+地图旋转角度定义的,如下所示:
var map_rotation = map.getView().getRotation();
var rotation = feature.get(bearing) + map_rotation;
Run Code Online (Sandbox Code Playgroud)
当用户旋转地图时,图标不会实时旋转以匹配。仅当用户移动地图或旋转后与地图交互时,它才会捕捉到正确的角度。这是有道理的,因为只有当这些事情发生时才会调用样式函数。
我的问题是,如何在用户旋转地图的同时旋转图标?
我尝试捕获旋转事件,如下所示:
map.getView().on('propertychange', function(e)
{
loaded_layers[p].getSource().forEachFeature(function(feature){
feature.setStyle(Photo_Style(feature));
feature.changed(); //This is an alternative which also works
});
});
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为它在旋转过程中触发,但它仍然不会在旋转过程中更新图标,只有在用户停止旋转之后(这当然是必须让用户平移地图才能获取更新的改进,但是仍然不是我要找的)。
我使用包“VennDiagram”绘制了四个称为 P1、P2、P3、P4 的维恩图。然后想 grid.arrange 将四个图形放在一页上。
我使用的代码是:
P1=draw.pairwise.venn(20,63,6,category = c("blastp", "HMM"), lty =rep("blank",2),fill = c("#9067A7", "#9067A7"), alpha = rep(0.5, 2), cat.pos = c(0,0),cat.dist = rep(0.025, 2),inverted=TRUE)
P2=draw.pairwise.venn(3,242,3,category = c("blastp", "HMM"), lty = rep("blank",2),fill = c("#AB6857", "#AB6857"), alpha = rep(0.5, 2), cat.pos = c(0,0),cat.dist = rep(0.025, 2))
P3=draw.pairwise.venn(7,107,0,category = c("blastp", "HMM"), lty = rep("blank",2),fill = c("#bc767c", "#bc767c"), alpha = rep(0.5, 2), cat.pos = c(0,0),cat.dist = rep(0.025, 2))
P4=draw.pairwise.venn(11,1,0,category = c("blastp", "HMM"), lty = rep("blank",2),fill = c("#628130", "#628130"), alpha = rep(0.5, 2), cat.pos …Run Code Online (Sandbox Code Playgroud) 我担心网络安全和required输入标签上 HTML5 单词的使用。我试图将它用作“表单输入验证”的一部分。在输入标签上使用 HTML5“必需”对于验证来说是可靠的,还是很容易被试图绕过输入字段要求的用户操纵。
我搜索了有关 html 安全性的信息,但发现很少。
谢谢
我拼命想让Vsync在我的OpenGL应用程序中运行.这是至关重要的统计数据:
我正在使用Windows,在C++ OpenGL中编码,我正在使用FreeGLUT进行OpenGL上下文(双缓冲).我知道要让交换缓冲区在Windows中等待垂直同步,你需要调用wglSwapIntervalEXT().
我的代码确实称之为(正如您将在下面看到的那样),但我仍然在进行垂直撕裂.我设法阻止它的唯一方法是调用glFinish(),这当然会带来与之相关的显着性能损失.
main()函数的相关部分如下所示:
//Initiating glut window
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize (initial_window_width, initial_window_height);
glutInitWindowPosition (100, 100);
int glut_window_hWnd = glutCreateWindow(window_title.c_str());
//Setting up swap intervals
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = NULL;
PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = NULL;
if (WGLExtensionSupported("WGL_EXT_swap_control"))
{
// Extension is supported, init pointers.
wglSwapIntervalEXT = PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
// this is another function from WGL_EXT_swap_control extension
wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)wglGetProcAddress("wglGetSwapIntervalEXT");
}
wglSwapIntervalEXT (1)
init ();
glutMainLoop(); ///Starting the glut loop
return(0);
Run Code Online (Sandbox Code Playgroud)
我应该指出wglInitSwapControlARB函数的返回是真的,因此支持扩展.
我正在尝试使用 Tween.js 库转换 Three.js 多维数据集。
通过创建两个补间对象,我可以来回移动立方体:
var start_position = { x : 0.0 , y: 0.0 };
var target = { x : 3.0, y: 0.0 };
var tween_to = new TWEEN.Tween(start_position)
.to(target, 2000);
var start_position2 = { x : 3.0 , y: 0.0 };
var target2 = { x : 0.0, y: 0.0 };
var tween_fro = new TWEEN.Tween(start_position2)
.to(target2, 1000);
tween_to.onUpdate(onUpdate);
tween_fro.onUpdate(onUpdate);
function onUpdate()
{
cube.position.x = this.x;
cube.position.y = this.y;
};
tween_to.chain(tween_fro);
tween_to.start();
Run Code Online (Sandbox Code Playgroud)
然后在我的动画循环中我有:
TWEEN.update(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用取自官方 OL3 示例页面的以下方法创建鼠标悬停事件:
http://openlayers.org/en/latest/examples/earthquake-clusters.html
我只需要在悬停在特定图层上时触发操作。查阅官方文档后,我发现您可以将图层过滤器功能与 hasFeatureAtPixel 一起使用,但它似乎不起作用。
map.on('pointermove', function(evt) {
if (evt.dragging) {
return;
}
var pixel = map.getEventPixel(evt.originalEvent);
var hit = map.hasFeatureAtPixel(pixel, function(feature, layer) {
console.log(layer);
console.log(feature);
});
});
Run Code Online (Sandbox Code Playgroud)
console.log 调用导致在控制台中给出特征对象,但没有图层对象,这些返回为“未定义”。这是我需要测试图层是否正确的图层对象。
任何想法为什么这不起作用?
我想在包含特定字符串的工作表中找到一个单元格。
我不会确切知道电子表格中将包含多少列或行,因此为什么要使用CurrentRegion。
这是我正在尝试的:
=FIND("Data String", Range("A1").CurrentRegion)
Run Code Online (Sandbox Code Playgroud)