如何使用OSMDROID制作161米/ 528英尺的圆圈?

时间:2014-04-26 13:48:29

标签: geometry osmdroid markers

我在OpenStreetMaps上使用OsmDroid并且可以制作标记和折线,但是我无法找到关于我如何在标记周围制作161m / 528ft圆圈的任何示例。

a)如何制作圈子?
b)如何制作161米/ 528英尺的尺寸?

2 个答案:

答案 0 :(得分:5)

感谢MKer,我知道如何解决这个问题并制作了这段代码,该代码有效:

oPolygon = new org.osmdroid.bonuspack.overlays.Polygon(this);
final double radius = 161;
ArrayList<GeoPoint> circlePoints = new ArrayList<GeoPoint>();
for (float f = 0; f < 360; f += 1){
    circlePoints.add(new GeoPoint(latitude , longitude ).destinationPoint(radius, f));
}
oPolygon.setPoints(circlePoints);
oMap.getOverlays().add(oPolygon);`

我知道这可以优化。无论缩放是什么,我都会画360点!

Black 161meter circle made with Omsdroid on OpenStreetMap

答案 1 :(得分:2)

如果你想要一个&#34;图形&#34;圆圈,然后您可以使用DirectedLocationOverlay作为一个非常好的起点轻松实现您自己的CircleOverlay。

如果你想要一个&#34;地理&#34;圆(比或多或少显示为椭圆),然后您可以使用OSMBonusPack Polygon,您将使用此GeoPoints数组定义:

ArrayList<GeoPoint> circlePoints = new ArrayList<GeoPoint>();
iSteps = (radius * 40000)^2;
fStepSize = M_2_PI/iSteps;
for (double f = 0; f < M_2_PI; f += fStepSize){
  circlePoints.add(new GeoPoint(centerLat + radius*sin(f), centerLon + radius*cos(f)));
}

(警告:我在PHP中使用Nominatim代码进行了翻译,未经测试)