【问题标题】:measure area of irregular polygon in android在android中测量不规则多边形的面积
【发布时间】:2013-05-19 22:19:23
【问题描述】:

我正在开发一个应用程序,其中我在地图上绘制了多边形,而我使用的地图不是谷歌,它的 Mapsforge 开源离线地图库。我通过将地理点转换为像素点很容易在地图上绘制多边形。但是在这里我想找到那个不规则多边形,为此我做了很多尝试,但它让我失败了.. 我已经尝试使用基本数学计算区域,但在这种情况下它不起作用,因为像素在更改缩放级别时会相应地更改。 这是数学逻辑: Math calculation

 for(int miAreainc = 0;miAreainc  < x.length-1; miAreainc++)
                 {
                     sumX += x[miAreainc] * y[miAreainc + 1];
                     sumY += y[miAreainc] * x[miAreainc + 1];
                 }
                 int unit = ((sumX - (sumY)) / 2);
                 AppLog.showLogE(TAG,"UNIT >> " + unit);

我发现该功能停留在服务器端,它从地理点阵列获取区域,但在这里我想让它离线。 到目前为止我已经尝试过,但没有得到任何线索或结果.. 请帮我解决这个.. 谢谢

【问题讨论】:

  • 您应该指定多边形坐标所在的坐标系! (经纬度十进制度(

标签: java android


【解决方案1】:

注意:我真的不知道我的回答有多愚蠢。所以,如果它没有意义,请告诉我,我会删除它。

由于地图不在Cartesian Coordinate System 中,您的计算将无法得出准确的结果。 Spherical Polygon 需要 Spherical Trigonometry,这不是微不足道的。

Calculating area enclosed by arbitrary polygon on Earth's surface 有很好的讨论。看看吧。

但除此之外,我在mapsforge 中找到了Projection.java,它有一种方法可以在特定缩放级别从GeoPoint 找到世界地图上的绝对像素坐标:

将给定的 {@link GeoPoint} 转换为绝对像素坐标 世界地图。

Point toPoint(GeoPoint in, Point out, byte zoomLevel);

我不是很了解,但我认为它会在投影地图上为您提供GeoPoint 的绝对坐标,以便您可以使用笛卡尔计算。

【讨论】:

  • 我喜欢你付出的努力......我更想和你谈谈这个问题,是的,在 mapsforge 中有投影类可以将地理点转换为像素,我也得到了结果但是在这里,我对缩放级别和平移 1 感到困惑。我不知道在哪个缩放级别更适合计算区域 2。当我用手指 x 平移地图时,y 也发生了变化,其效果也随之而来,所以我该如何防止那 ?我也试过直接按纬度和经度作为 X 和 Y 并得到结果,但不知道如何将其转换为米、英寸或英尺
  • @Mario,当您放大或缩小时,您的多边形是否会重新调整大小?
  • @Mario,所以多边形的面积是固定的。为什么不获取当前的Zoom Level 并计算absolute pixel coordinates?屏幕上的像素会随着平移而变化,但坐标是固定的,并且指向地图上的同一位置。我对你的理解正确吗?
【解决方案2】:

对于面积计算,您需要使用单位米将纬度、经度转换为笛卡尔坐标。 (不是像素)查看变换模块

【讨论】:

  • 你能给我一些真实的例子吗,这样我就明白了
  • 我已经应用了基于 lat-long 的面积计算,但我不确定采用哪种形式的单位...
  • 如果你想以平方米为单位测量面积,那么你的坐标当然必须以米为单位。您可以将多边形的中心定义为 (0,0),这就是您的变换中心。您必须阅读更多关于从 lat/long 到笛卡尔空间的转换:这个主题被称为“地图投影”。
  • 如果你的坐标是纬度,长十进制度,那么这当然行不通。
猜你喜欢
  • 2011-01-03
  • 2014-09-07
  • 1970-01-01
  • 2020-11-01
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
相关资源
最近更新 更多