无法在OpenLayers中获得正确的圆半径

无法在OpenLayers中获得正确的圆半径,openlayers,openlayers-6,Openlayers,Openlayers 6,我在下面有一个jsfiddle,我试图创建一个半径为1600米的圆。我不认为我的投影正确,因为这个圆肯定小于1600米。在谷歌地图上测量,我想大约是1000米。我需要做什么来更正此问题请> 多谢各位 var中心纵向相关性=Lonlat的其他项目[-1.733014,51.982989]; var layer=新ol.layer.Vector{ 来源:新ol.source.Vector{ 投影:‘EPSG:4326’, 特征:[新ol.特征新ol.geom.CircleCenter纵向相关性,1

我在下面有一个jsfiddle,我试图创建一个半径为1600米的圆。我不认为我的投影正确,因为这个圆肯定小于1600米。在谷歌地图上测量,我想大约是1000米。我需要做什么来更正此问题请>

多谢各位

var中心纵向相关性=Lonlat的其他项目[-1.733014,51.982989]; var layer=新ol.layer.Vector{ 来源:新ol.source.Vector{ 投影:‘EPSG:4326’, 特征:[新ol.特征新ol.geom.CircleCenter纵向相关性,1600] }, 风格:[ 新ol风格{ 笔划:新的ol风格笔划{ 颜色:“蓝色”, 宽度:3 }, 填充:新的ol.style.fill{ 颜色:“rgba0,0,255,0.1” } } ] }; var map=新ol.map{ 目标:“地图”, 图层:[ 新ol.layer.Tile{ 来源:new ol.source.OSM }, 层 ], 视图:新ol.view{ 中心:Lonlat的其他项目[-1.733014,51.982989], 缩放:14 } }; html, 身体{ 身高:100%; 宽度:100%; 填充:0px; 边际:0px; } .地图{ 身高:100%; 宽度:100%; }
矢量层EPSG:4326的SRS与圆EPSG:3857的中心和之间存在不一致。你需要选择上面的一个,而不是两个

尝试在不指定投影的情况下创建层,它将使用默认视图投影,在本例中,由于OSM的原因,EPSG:3857

更新:

在构建了下面的代码片段之后,我意识到提议的更改不会影响结果,我不知道刚才为什么,所以我建议使用Polygon.circular作为替代

.地图{ 高度:400px; 宽度:100%; } 圆形特征 //特征 var半径=1600; var中心=[-1.733014,51.982989] var fcircle=新的ol.功能{ 几何:新的ol.geom.Circle Lonlat中心的ol.proj, 半径 }; fcircle.SETSTYLE新ol.style.style{ 笔划:新的ol风格笔划{ 颜色:“蓝色”, 宽度:2 } }; var fcircular=新的ol.特征{ 几何体:ol.geom.Polygon.circularcenter,半径,64。变换'EPSG:4326','EPSG:3857' }; fcircular.setStyle新ol.style.style{ 笔划:新的ol风格笔划{ 颜色:“红色”, 宽度:1 } }; //地图 变量视图=新的ol.view{ 中心:来自伦敦中心的ol.proj, 缩放:14 }; var map=新ol.map{ 目标:“地图”, 图层:[ 新ol.layer.Tile{ 来源:new ol.source.OSM }, 新ol.layer.Vector{ 来源:新ol.source.Vector{ 特征:[fcircle,fcorcular] } } ], 看法 };
多亏了迈克和卡贝苏,我有了一个解决方案,张贴在这里供未来读者阅读

var map=新ol.map{ 目标:“地图”, 图层:[ 新ol.layer.Tile{ 来源:new ol.source.OSM } ], 视图:新ol.view{ 中心:Lonlat的其他项目[-1.733014,51.982989], 缩放:14 } }; var中心纵向相关性=Lonlat的其他项目[-1.733014,51.982989]; var viewProjection=map.getView.getProjection; var pointResolution=ol.proj.getPointResolutionviewProjection,1,中心纵向相关性; var半径=1600/点分辨率; var layer=新ol.layer.Vector{ 来源:新ol.source.Vector{ 投影:‘EPSG:4326’, 特征:[新ol.特征新ol.geom.CIRCLECENTER纵向相关性,半径] }, 风格:[ 新ol风格{ 笔划:新的ol风格笔划{ 颜色:“蓝色”, 宽度:3 }, 填充:新的ol.style.fill{ 颜色:“rgba0,0,255,0.1” } } ] }; map.addLayerlayer; html, 身体{ 身高:100%; 宽度:100%; 填充:0px; 边际:0px; } .地图{ 身高:100%; 宽度:100%; }
非常感谢卡贝索恩。不幸的是,我正处于破解openlayers的阶段,对js知之甚少。您是否有可能有足够的时间发布一个片段来展示解决方案?非常感谢,如果没有完全理解,我已经更新了答案。。我很确定我在这本书中看到了一些东西,但我现在找不到。。也可以使用Polygon.circular。。我会再看一遍这个,或者其他人解释后面的原因谢谢你,我现在已经找到了一个临时的解决办法——在英国的Lattude,我可以对半径应用1.62的常数乘法因子,以达到我的目的。显然,我想用正确的方式来做!我对使用多边形有点犹豫,因为我知道我的一些客户会注意到缺少平滑曲线,并且会和我一样不喜欢。这是我需要避免的。谢谢虽然公平地说,你的多边形实际上很好看,当我将线段数增加到256时,它与圆是无法区分的。所以在这一点上,如果有可能摆脱
多边形将是一个很好的干净的解决方案,否则效果很好。非常感谢。ol.geom.Polygon.circular仅适用于在投影中看起来不是圆形的大半径圆。对于小半径圆,简单地将半径除以圆心处的点分辨率ol.proj.getPointResolutionviewProjection,1,圆心