在JavaScript中计算两个多边形的重叠百分比
Calculating the percent overlap of two polygons in JavaScript
问题是:我有geoJSON和topoJSON文件,它们为我提供了人口普查区块组和投票区的多边形。我试图通过一个特定的人口普查区块组与一个特定选区的重叠程度来观察。
我在其他语言中看到了一些我想要的例子,比如R和一些GIS工具,但我正试图将其作为Node.js脚本编写。几个问题:
- 有没有一个NPM模块(我在谷歌上搜索了很多,但还没有找到)可以吐出重叠百分比
- 有没有一种算法,或者用另一种语言编写的exmaple,我应该知道(我已经看过了,但我不知道从哪里开始),并且我可以移植到JavaScript
- 如果做不到这些,有人能向我解释一下我将如何考虑为此创建一个算法吗
最后,最终的产品看起来是这样的——想象我有分区和块组的阵列,每个分区和块都是一个具有几何属性的对象,其中包含分区或块组的多边形数据,还想象我有一个名为overlap
的函数,当两个多边形通过时,会吐出重叠百分比:
// Iterate over each precinct.
_.each( precincts, function ( precinct ) {
// Iterate over each blockgroup.
_.each( blockgroups, function ( blockgroup ) {
// Get the overlap for the current precinct and blockgroup.
var o = overlap( precinct.geometry, blockgroup.geometry );
// If they overlap at all...
if ( o > 0 ) {
// ...Add information about the overlap to the precinct.
precinct.overlaps.push({
blockgroup: blockgroup.id,
overlap: o
});
}
}
}
(我看过这个模块,但它只给出如果多边形重叠,而不是它们重叠的程度。)
turf intersect获取两个多边形,并返回一个表示交集的多边形。
geojson区域获取一个多边形,并返回以平方米为单位的面积。
npm install turf
npm install geojson-area
var turf = require('turf');
var geojsonArea = require('geojson-area');
var poly1 = {
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[
[-122.801742, 45.48565],
[-122.801742, 45.60491],
[-122.584762, 45.60491],
[-122.584762, 45.48565],
[-122.801742, 45.48565]
]]
}
}
var poly2 = {
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[
[-122.520217, 45.535693],
[-122.64038, 45.553967],
[-122.720031, 45.526554],
[-122.669906, 45.507309],
[-122.723464, 45.446643],
[-122.532577, 45.408574],
[-122.487258, 45.477466],
[-122.520217, 45.535693]
]]
}
}
var intersection = turf.intersect(poly1, poly2);
var area_intersection = geojsonArea.geometry(intersection.geometry);
var area_poly1 = geojsonArea.geometry(poly1.geometry);
var percent_poly1_covered_by_poly2 = (area_intersection / area_poly1)*100;
计算重叠百分比
-
计算两个多边形的交点
Intersection = intersect(Precinct, Block)
-
将"交集"的面积除以感兴趣的父多边形的面积。
Overlap = area(Intersection) / area(Parent)
-
有点不清楚你所说的重叠百分比是什么意思。父多边形可能是的几种可能性之一
a) area(Intersection) / area(Precinct) b) area(Intersection) / area(Block) c) area(Intersection) / area(Precinct union Block)
至于javascript库,这个库似乎有您需要的Intersection.js
还有JSTS拓扑套件,它可以用JavaScript进行地理空间处理。请参阅此处的Node.js示例。
您可以使用Turf-js进行空间重叠。它具有JSTS(以及更多)的特性,但非常模块化。
相关文章:
- JQuery合并了keyup和focusout两个函数
- 如何使用 node.js 比较两个 json 数组
- 为复选框javascript指定两个值
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 单击时切换两个图像
- 我可以'我似乎不知道如何修复javascript中的两个lint.有人能帮我理解吗
- 基于两个条件退出While循环
- 如何在这里将两个值最低的数字相加
- 组合两个javascript函数
- 如何使用offer/answer交换来自两个对等连接的流
- jsf中两个字符串的颜色代码差异
- 加载两个具有相同父密钥名称的json文件
- 在Qualtrics中,介绍如何动态连接两个滑块
- 访问$.ajax()函数中的两个不同数组
- 如何在three.js上添加两个向量
- ArcGIS JavaScript API API 合并/溶解两个多边形
- D3 map - 将两个不相交的 SVG 多边形路径合并为一个路径
- 如何转换一个圆圈,两个矩形到多边形在谷歌地图上,并使其出现在同一地图上
- 计算两个旋转矩形/多边形的碰撞和相交面积
- 在JavaScript中计算两个多边形的重叠百分比