por*_*der 2 android google-maps polyline
优步应用程序有一条弯曲的折线,甚至还包括一个阴影.阴影可能只是一个黑色,透明折线连接两个点.这很容易.但第二条折线有曲线,如何实现呢?这是Bezier曲线,还是像setGeodesic(true)这样的内置函数?
我查看了谷歌地图示例,我看到了有关圆形折线的部分.这可以适应创建半圆吗?来自demo的代码片段.
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));
Run Code Online (Sandbox Code Playgroud)
por*_*der 12
通过以下贝塞尔曲线计算,我能够实现这一目标
double cLat = ((start.latitude + end.latitude) / 2);
double cLon = ((start.longitude + end.longitude) / 2);
//add skew and arcHeight to move the midPoint
if(Math.abs(start.longitude - end.longitude) < 0.0001){
cLon -= 0.0195;
} else {
cLat += 0.0195;
}
double tDelta = 1.0/50;
for (double t = 0; t <= 1.0; t+=tDelta) {
double oneMinusT = (1.0-t);
double t2 = Math.pow(t, 2);
double lon = oneMinusT * oneMinusT * start.longitude
+ 2 * oneMinusT * t * cLon
+ t2 * end.longitude;
double lat = oneMinusT * oneMinusT * start.latitude
+ 2 * oneMinusT * t * cLat
+ t2 * end.latitude;
alLatLng.add(new LatLng(lat, lon));
}
// draw polyline
PolylineOptions line = new PolylineOptions();
line.width(POLYGON_STROKE_WIDTH_PX);
line.color(Color.RED);
line.addAll(alLatLng);
map.addPolyline(line);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2325 次 |
最近记录: |