首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简化多边形-剪刀库Angus Johnson

简化多边形-剪刀库Angus Johnson
EN

Stack Overflow用户
提问于 2013-02-28 07:57:31
回答 2查看 2.4K关注 0票数 2

我试图简化谷歌地图上绘制的复杂多边形(API v3 Javascript)。我的目标是接收一系列简单的多边形。问题是,我画的一些数字是可以分析的,而有些则不能。

例如:

1)图8--垂直多边形(var areaPolygon),坐标为:

代码语言:javascript
复制
{42.15093256154524, 24.746017456054687}
{42.149087174176515, 24.740352630615234}
{42.14049586965896, 24.754257202148437}
{42.1333673840616, 24.747648239135742}
{42.13795007405907, 24.73846435546875}
{42.145841707270215, 24.74867820739746}
{42.15093256154524, 24.749107360839843}
{42.15093256154524, 24.746017456054687}

它工作得很好-- SimplifyPolygon返回两个简单的多边形

2)图8--水平多边形(var areaPolygon),坐标为:

代码语言:javascript
复制
{42.145523515284395, 24.744129180908203}
{42.15016895950386, 24.749279022216797}
{42.14603262169405, 24.7646427154541}
{42.14978715502878, 24.769277572631836}
{42.15055076167604, 24.758892059326172}
{42.14393253136682, 24.75193977355957}
{42.141705086714666, 24.747648239135742}
{42.14348704870535, 24.74472999572754}
{42.145523515284395, 24.744129180908203}
  • 它不工作- SimplifyPolygon返回相同的复杂多边形

这是我的代码:

代码语言:javascript
复制
function analyzePolygon(areaPolygon) {

//areaPolygon is google.maps.Polygon
var subj_polygon = new ClipperLib.Polygon();
var result_polygons = new ClipperLib.Polygons();

//LatLng coordinates to integer coordinates
for(var i = 0; i < areaPolygon.getPath().getArray().length ; i++) {
    subj_polygon.push(new ClipperLib.IntPoint(Math.round(areaPolygon.getPath().getArray()[i].lat()*100000000000000), Math.round(areaPolygon.getPath().getArray()[i].lng()*100000000000000)));
}

var cpr = new ClipperLib.Clipper();

result_polygons = cpr.SimplifyPolygon(subj_polygon, ClipperLib.PolyFillType.pftNonZero);

//for each simple polygon - make a request and populate markers of the objects which are in these bounds
for(var j=0; j < result_polygons.length; j++) {

    var rpStringify = JSON.stringify(eval(result_polygons[j]));
    var rpJSON = JSON.parse(rpStringify);
    var arrayPolygon = [];
    for (var i = 0; i < rpJSON.length; i++) {

        var tempObject = JSON.stringify(eval(rpJSON[i]));
        var objectJSON = JSON.parse(tempObject);
        var tempArr = [2];
        tempArr[0] = objectJSON.X/100000000000000;
        tempArr[1] = objectJSON.Y/100000000000000;
        arrayPolygon[i]= tempArr; 
    }

    loadPinsPolygon(arrayPolygon);
}
EN

回答 2

Stack Overflow用户

发布于 2013-02-28 10:13:09

埃琳娜。

它不工作- SimplifyPolygon返回相同的复杂多边形

我不知道你所说的‘复多边形’是什么意思,但是如果你指的是一个自交多边形(见多边形),那么SimplifyPolygon函数确实会像预期的那样删除自交。你得到的是一个简单的多边形,尽管在前面的交点处有两个顶点在相同的坐标上。

但是,如果您真的想要两个离散多边形,那么您必须修改库中的底层代码(请参阅这里讨论)。

票数 0
EN

Stack Overflow用户

发布于 2013-09-05 08:53:45

如果StrictlySimple设置为真,那么Clipper 6也可以在多边形线段上产生真正简单的多边形(不是跨越该段,而是触摸它)。我还没有对此进行测试,但我参考了安格斯·约翰逊的评论:https://sourceforge.net/p/polyclipping/discussion/1148419/thread/813a62c8/

下面是这样一个多边形的例子。第五点是接触垂直线段。在这种情况下简化的结果是两个三角形。

Clipper 6的javascript版本并不是在发布后立即发布的,而是在一些延迟内出现的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15130305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档