【问题标题】:Is there a predefined method to compute area of a polygon in Nutiteq?在 Nutieq 中是否有预定义的方法来计算多边形的面积?
【发布时间】:2014-06-12 08:43:33
【问题描述】:

我问IN NUTITEQ,我知道使用GoogleApicomputeArea() 执行此操作的方法,但我在Nutiteq sdk/snapshot 中没有找到任何内容。

提前致谢。

附言我知道很多计算面积的方法,但我想调用 Nutiteq 的东西

编辑

没有内置方法,感谢Jaak的快速回答,所以我研究并找到了2种方法,它们都在WSG84 Projection下。我开发了一个小程序来比较它们,然后我将其与计算多边形面积的 KML 工具进行比较。

how-can-i-measure-area-from-geographic-coordinates

A-link-to-a-Geographic-Framework

还有results用新罕布什尔大学的kml工具

12197.38184

import java.lang.Math.*;
import net.sf.geographiclib.*;

public class ComputeAreaTest {

  private static double[][] moorwiese_coords = {{12.925634f,48.427168f}, 
                                                {12.926825f,48.427217f},                                          
                                                {12.926788f,48.428385f}, 
                                                {12.926069f,48.428374f},
                                                {12.925431f,48.42825f}, 
                                                {12.925624f,48.427192f},                                                 
                                                {12.925634f,48.427168f}};

  protected static double computeArea() {
      double area=0.0;
      double earthRadius = 6378137.0f;

      int size = moorwiese_coords.length;     

      if (size > 2) {
          double[] p1 = new double[2];
          double[] p2 = new double[2];

          for (int i=0; i<size-1; i++) {
              p1 = moorwiese_coords[i];
              p2 = moorwiese_coords[i+1];
              area += Math.toRadians(p2[0] - p1[0]) * (2 +  
              Math.sin(Math.toRadians(p1[1]) ) + Math.sin(Math.toRadians(p2[1])) );
          }

          area = area * earthRadius * earthRadius / 2.0;
      }   

      return area;  
  }

  protected static double computeAreaWithGeographicLib() {

    int size = moorwiese_coords.length;
    PolygonArea p = new PolygonArea(Geodesic.WGS84, false);

    try {

        for (int i=0;i<size;i++) {
            p.AddPoint(moorwiese_coords[i][4], moorwiese_coords[i][0]);
        }   
    }
    catch (Exception e) {}
    PolygonResult r = p.Compute();

    return r.area;        
  }

  public static void main(String[] args) {


  double areaGeoLib = computeAreaWithGeographicLib();  

  double area = computeArea();  

      System.out.println("Area: " + (-1)*area + "\nArea(GeoLib): "+areaGeoLib);
  }
}

Output Area: 12245.282587113787 Area(GeoLib): 12254.95547034964

我发现不太适合准确使用(是的,对于许多环境来说,低于 0.5% 的误差可能不准确)但对于学习如何计算不规则多边形的面积很有用。

【问题讨论】:

  • Nutiteq 对此没有内置方法。与距离一样 - 不同的方法会给出不同的结果,具体取决于精度和投影。如果你有好的方法,你可以在这里发布作为答案,我可以将它添加到 Utils 中。
  • 感谢代码和答案。顺便说一句,您可以将它们添加为答案(是的,您可以回答自己的问题)并接受这一点,因此问题不会悬而未决。

标签: polygon area nutiteq


【解决方案1】:

谢谢,Jaak,我没有看到这个释放符号来点击“正确答案”,现在我看到了,我必须明确。因此,“答案”在初始帖子中。

【讨论】:

    猜你喜欢
    • 2014-12-27
    • 2013-11-13
    • 2013-10-24
    • 2013-09-07
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2013-03-25
    • 2012-04-07
    相关资源
    最近更新 更多