6

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

 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);

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

4

2 回答 2

2

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

于 2013-05-24T12:49:25.300 回答
2

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

由于地图不在笛卡尔坐标系中,因此您的计算不会产生准确的结果。您需要球面三角球面多边形,这不是微不足道的。

在计算地球表面上任意多边形包围的区域中有很好的讨论。看一看。

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

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

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

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

于 2013-05-24T12:20:47.787 回答