0

我使用草皮沿多条线添加了标记,现在我想计算每条线上的标记数量以及这些标记的总数。我尝试使用长度,但它返回未定义。你知道怎么做吗?

for (var i = 0; i <= (linesPoints-Ecart /2)/Ecart; i++)
    {
       marker = turf.along(pathLine[i], Ecart/2+Ecart*i, 'meters');
       var inside= turf.intersect(marker, poly);
       if(inside)
       {
        geojsonMarker =L.geoJson(marker).addTo(map);
           console.log(marker.length);
       }
    }

4

1 回答 1

0

当您调用along()时,它只返回一个 Point。它不会返回您添加的线上的所有点。看看调试器或 console.log() 语句中的返回值,你会看到你实际拥有什么样的数据——不需要它是个谜。

在您的代码片段中,我认为您可以在不使用 Turf 生成的任何数据的情况下获得标记的计数。您的调用代码知道何时添加标记,对吗?只需随时跟踪添加到您自己的变量中的标记数,例如...

var markerCount = 0; 
for (var i = 0; i <= (linesPoints-Ecart /2)/Ecart; i++)
{
   marker = turf.along(pathLine[i], Ecart/2+Ecart*i, 'meters');
   var inside= turf.intersect(marker, poly);
   if(inside)
   {
      geojsonMarker =L.geoJson(marker).addTo(map);
      console.log(++markerCount);
   }
}

这将为您提供添加到一行的所有标记的计数。如果您想计算添加到所有行的所有标记,只需自己跟踪即可。我不知道您的代码在最初的示例之外是如何布局的,但想象一下上面的代码片段被放入一个函数中,比如......

function addMarkersToLine(linePoints, ecart) {
   //...same code from above goes in here...
   return markerCount; //Returning number of markers added for just this line.
}

然后你在其他地方有一些代码负责为一行或多行添加标记......

function addTwoLines() {
   var totalMarkerCount = 0;
   totalMarkerCount += addMarkersToLine(...params...);
   totalMarkerCount += addMarkersToLine(...params for a different line...);
}

如何跟踪和存储标记计数取决于您,并且取决于您的项目。但我的主要观点是,自己跟踪它,而不是使用 Turf 进行某种分析或依赖于 Turf 将如何组成 GeoJson 来处理您的 turf.along() 请求的知识。在调用代码中,您已经知道何时添加标记。

于 2017-05-30T20:49:28.937 回答