openlayers v6中的自定义网格/分划

openlayers v6中的自定义网格/分划,openlayers,Openlayers,我正在尝试使用线之间的距离将栅格添加到地图(就像分划一样),我希望线标签保持在相同的位置,并在视图更改时更新栅格 我正在收听向量层上的预渲染事件,并从getVectorContext(事件)返回的canvasimediatenderer中绘制和我一直未能成功地保持标签贴在顶部和左侧边框上 非常感谢您的帮助 文本的行位置似乎不适合立即渲染。标签的单独点图形会更好,您可以使用event.framestate.extent确定左侧或顶部坐标 顶部标签和侧面标签使用单独的样式,textAlign'lef

我正在尝试使用线之间的距离将栅格添加到地图(就像分划一样),我希望线标签保持在相同的位置,并在视图更改时更新栅格

我正在收听向量层上的预渲染事件,并从
getVectorContext(事件)返回的
canvasimediatenderer
中绘制和我一直未能成功地保持标签贴在顶部和左侧边框上

非常感谢您的帮助


文本的行位置似乎不适合立即渲染。标签的单独点图形会更好,您可以使用
event.framestate.extent
确定左侧或顶部坐标

顶部标签和侧面标签使用单独的样式,
textAlign
'left'
或'
right'
,顶部标签使用Math.PI/2旋转

要强制渲染网格,请使用一个专用层,该层具有一个几乎看不见的功能和一个无限的renderBuffer,如下所示:

let grid=新矢量层({
来源:新矢量源({
特征:[新特征(新点([0,0]))]
}),
风格:新风格({
图片:新圆环样式({
半径:0
})
}),
renderBuffer:无限,
});
//侦听prerender事件以渲染网格
grid.on('prerender',函数(事件:RenderEvent){
设unitSplit=.1;//每.1 m
让pxToUnit=view.getResolution();
设pxSplit=unitSplit/pxToUnit;
让[xmin,ymin,xmax,ymax]=event.frameState.extent
而(pxSplit*2<100){
单位分割*=2;
pxSplit=unitSplit/pxToUnit;//两行之间的距离
}
设startX=Math.round(xmin/unitSplit)*unitSplit;//第一行
设endX=Math.round(xmax/unitSplit)*unitSplit;//最后一行
设startY=Math.round(ymin/unitSplit)*unitSplit;
设endY=数学圆(ymax/unitSplit)*unitSplit;
设ctx=getVectorContext(事件);
让lineStyle=新样式({笔划:新笔划({颜色:#444751',宽度:1})});
ctx.setStyle(线型);
//画线

对于(让i=startX;i VectorContext似乎是正确的方法。标签有什么问题?@mike我已经为矢量层方法添加了代码。文本的线条放置似乎不适合立即渲染。标签的单独点图形会更好,您可以使用
view.calculateExtent()
event.framestate.extent
确定左侧或顶部坐标。顶部和侧面标签使用单独的样式,
textAlign
“left”或“right”,顶部标签使用Math.PI/4旋转。谢谢你,迈克,这是一个好主意,效果很好谢谢你,非常感谢你,包装问题解决了,谢谢o您之前的评论,但我可能遗漏了关于附加矢量层的某些内容,它对我不起作用。您是否使用该层的预渲染事件,并且它是否已添加到地图中?忘记在该层上聆听…………您是一个真正的天才