具有下列代碼繪製圓(從谷歌採取的播放服務「地圖」樣品):Android地圖API第2戰平圈
PolylineOptions options = new PolylineOptions();
int radius = 5; //What is that?
int numPoints = 100;
double phase = 2 * Math.PI/numPoints;
for (int i = 0; i <= numPoints; i++) {
options.add(new LatLng(SYDNEY.latitude + radius * Math.sin(i * phase),
SYDNEY.longitude + radius * Math.cos(i * phase)));
}
int color = Color.RED;
mMap.addPolyline(options
.color(color)
.width(2));
這是被畫在世界的不同部分:
正如你所看到的圓圈不是真的圓圈,甚至第二個橢圓基本上是圓的。
我猜圓圈的「反鋸齒」取決於int numPoints
變量中的點數。
- 什麼是示例代碼中的變量
int radius = 5
?我的意思是它是什麼措施? - 和主要問題什麼是正確的方式繪製在給定半徑的漂亮圓圈米?東西smiliar什麼,我們在API第1版曾與
canvas.drawCircle()
UPDATE --------------------我
OK提高數學後能得出「正確」的圈子:
private void addCircle(LatLng latLng, double radius)
{
double R = 6371d; // earth's mean radius in km
double d = radius/R; //radius given in km
double lat1 = Math.toRadians(latLng.latitude);
double lon1 = Math.toRadians(latLng.longitude);
PolylineOptions options = new PolylineOptions();
for (int x = 0; x <= 360; x++)
{
double brng = Math.toRadians(x);
double latitudeRad = Math.asin(Math.sin(lat1)*Math.cos(d) + Math.cos(lat1)*Math.sin(d)*Math.cos(brng));
double longitudeRad = (lon1 + Math.atan2(Math.sin(brng)*Math.sin(d)*Math.cos(lat1), Math.cos(d)-Math.sin(lat1)*Math.sin(latitudeRad)));
options.add(new LatLng(Math.toDegrees(latitudeRad), Math.toDegrees(longitudeRad)));
}
mMap.addPolyline(options.color(Color.BLACK).width(2));
}
然而圈我猜的抗鋸齒有些無法控制,並在一些縮放級別循環可能會難看:
你得到橢圓它的原因是因爲對數學的'options.add('是非常基本的,假裝地球是一個平坦的表面,就像哥白尼之前,如果你畫到較小的區域,你如果你想要一個精確的圓圈,你可以將這個數學擴展到適當考慮地球的形狀 – Budius
@lija,任何使用「多段線」而不是「多邊形」來繪製的特定原因圓形?我嘗試使用Polygon並獲得相同的輸出。因此,您有任何想法可以使用它們中的哪一個?Thank You。 –
@ Archie.bpgc不是真的,如果您需要使用多邊形,可以使用多邊形例如填充選項,否則在這種情況下沒有太大的區別。 –