Javascript 可见多边形区域的(相对)数量?(OpenLayers中的地理要素)

Javascript 可见多边形区域的(相对)数量?(OpenLayers中的地理要素),javascript,algorithm,geometry,openlayers,area,Javascript,Algorithm,Geometry,Openlayers,Area,在具有地理特征(国家边界,如此复杂的多边形)的OpenLayers地图中,我想确定用户主要在看什么 在国际海事组织看来,以中心点为基础进行“重要性”计算不是一个好主意,因为它很容易在许多国家边界上失败 相反,我想计算可视区域的粗略近似值,或者可视区域之间的关系的相对值 有没有比切割可见多边形区域(使用视口边界)并精确计算可见区域更快的方法?一个可能的JavaScript解决方案应该在客户端运行,所以它不应该是一个扩展的、精确的算法 我不想使用反向查找来接近国家名称,如果您想知道的话。使用Ope

在具有地理特征(国家边界,如此复杂的多边形)的OpenLayers地图中,我想确定用户主要在看什么

在国际海事组织看来,以中心点为基础进行“重要性”计算不是一个好主意,因为它很容易在许多国家边界上失败

相反,我想计算可视区域的粗略近似值,或者可视区域之间的关系的相对值

有没有比切割可见多边形区域(使用视口边界)并精确计算可见区域更快的方法?一个可能的JavaScript解决方案应该在客户端运行,所以它不应该是一个扩展的、精确的算法


我不想使用反向查找来接近国家名称,如果您想知道的话。

使用OpenLayers
map.getExtent
可以确定当前视口的边界框。 然后简单地在多边形中循环以确定哪个多边形与该视口相交

var mapExtent = map.getExtent().toGeometry();
var featuresOnScreen = [];
for (var i = 0, i < myFeatures.features.length;; i+=1) {
    var poly = myFeatures.features[i];
    if (mapExtent.intersects(poly.geometery) {
        featuresOnScreen.push(poly);
    } 
}
var-mapExtent=map.getExtent().toGeometry();
var featuresOnScreen=[];
对于(变量i=0,i
编辑:OpenLayers将不会帮助您找到重叠区域,因为它没有确定交叉点几何图形的功能,只有是否存在交叉点

在这种情况下,您可以进行探索。此客户端库确实有一个
intersection
函数,用于返回相交区域的几何图形


.

关于质心不是一个很好的代理,你是对的。我在一个国家边界数据集上运行了以下Postgis查询

select name from countries where st_intersects(geom, st_centroid(geom))='f' order by st_area(geom) desc; 
在数据集中的246个国家中,有不少于49个国家的质心位于国家边界之外,其中,按降序或区域排序的前几个国家是:印度尼西亚、索马里、日本、英国、越南、马来西亚、菲律宾。尽管如此,其中一些是岛屿群,这使得质心很可能将落在海里,即使这些物体相当整齐地放入边界框中,就像印度尼西亚的情况一样

想到的一种近似方法是,根据边界框和质心,将每个国家划分为4个部分,即NW、NW、SW和SE块,计算每个块中国家的百分比及其位置,并将此客户端存储在字典中。然后,您可以检查边界的任何角点一个国家的长方体在视口中(便宜的计算),使用质心和每个角点计算每个长方体在视图中的百分比,并得出加权平均值


我没有尝试过这个方法,但如果您想避免JSTS计算的开销,这可能会涉及到在客户端存储国家边界,那么这是我能想到的最好、便宜的解决方案。它显然不精确,但速度很快,并且存储开销最小,这正是您所要求的。

我可以使用内置的
。屏幕上()
,但这不是重点。我需要知道多边形的可见部分在视口中占据了多少面积。哦,OpenLayers不执行此操作。使用其他信息更新答案…谢谢,我已经检查了JST,它可以明确相交等。但我仍然希望有一个不同的解决方案,这只是近似的这样我可以避免繁重的计算。