gpt4 book ai didi

javascript - 在 JavaScript 中计算两个多边形的重叠百分比

转载 作者:搜寻专家 更新时间:2023-10-31 23:30:04 26 4
gpt4 key购买 nike

这就是问题所在:我有 geoJSON 和 topoJSON 文件,这些文件为我提供了人口普查区 block 组和投票区的多边形。我试图查看给定的人口普查区 block 组与给定的辖区有多少重叠。

我在其他语言中看到了一些我所追求的例子——即R在某些 GIS 工具中——但我正在尝试将其编写为 Node.js 脚本。几个问题:

  1. 是否有一个 NPM 模块(我已经进行了大量的谷歌搜索,但我还没有找到)可以吐出重叠百分比?
  2. 是否有我应该了解的算法或用另一种语言编写的示例(我看过,但我不知道从哪里开始)并且我可以移植到 JavaScript?
  3. 做不到这些,有人可以向我解释我如何考虑为此创建算法吗?

最后,最终产品看起来像这样——假设我有分区和街区组的数组,每个数组都是一个具有几何属性的对象,其中包含分区或街区组的多边形数据,并且想象我有一个名为 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
});

}

}

}

(我见过 this module ,但这只给出如果多边形重叠,而不是重叠的程度。)

最佳答案

turf-intersect获取两个多边形并返回表示交点的多边形。

geojson-area获取一个多边形并返回以平方米为单位的面积。

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;

关于javascript - 在 JavaScript 中计算两个多边形的重叠百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30970107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com