2014-04-26 36 views

回答

2

如果你想要一個「圖形」圈子,那麼你可以很容易地實現自己的CircleOverlay,使用DirectedLocationOverlay作爲一個非常好的起點。

如果要一個「地域」圈(比將顯示或多或少爲橢圓形),則可以使用OSMBonusPack多邊形,將要使用這個數組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))); 
} 

(警告:我從Nominatim一塊的PHP代碼翻譯,未經測試)

+0

謝謝MKer。這些材料出了問題當我進入半徑= 161米時,iSteps變得極大,但它讓我朝着正確的方向前進。所以我找到了另一種方法。我notived,我可以使用Geopoint.destinationPoint(radiusInMeter,fInDegrees),然後轉360度。現在我只需要提高360度的步驟。 – Rocologo

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

+3

絕妙的主意。我做了一些試驗,該步驟的更好的價值似乎是6度(從10度,段可見)。由於此問題經常出現,我直接在OSMBonusPack Polygon類中添加了該功能:這是現在提交的setPointsAsCircle方法。 – MKer

+0

哦不,現在我需要更新我的代碼來使用新的方法setPointsAsCircle :-)(只是在開玩笑)其實我決定在我的代碼中使用6度以及:-) – Rocologo