Dibuja ARC Polyline en Google Map
¿Cómo puedo dibujar Arc Polyline en Google Map?
Ya uséesta código para crearcurvo Polilínea.
Aquí está elmétodo para dibujar polilínea curvada:
private void showCurvedPolyline (LatLng p1, LatLng p2, double k) {
//Calculate distance and heading between two points
double d = SphericalUtil.computeDistanceBetween(p1,p2);
double h = SphericalUtil.computeHeading(p1, p2);
//Midpoint position
LatLng p = SphericalUtil.computeOffset(p1, d*0.5, h);
//Apply some mathematics to calculate position of the circle center
double x = (1-k*k)*d*0.5/(2*k);
double r = (1+k*k)*d*0.5/(2*k);
LatLng c = SphericalUtil.computeOffset(p, x, h + 90.0);
//Polyline options
PolylineOptions options = new PolylineOptions();
List<PatternItem> pattern = Arrays.<PatternItem>asList(new Dash(30), new Gap(20));
//Calculate heading between circle center and two points
double h1 = SphericalUtil.computeHeading(c, p1);
double h2 = SphericalUtil.computeHeading(c, p2);
//Calculate positions of points on circle border and add them to polyline options
int numpoints = 100;
double step = (h2 -h1) / numpoints;
for (int i=0; i < numpoints; i++) {
LatLng pi = SphericalUtil.computeOffset(c, r, h1 + i * step);
options.add(pi);
}
//Draw polyline
mMap.addPolyline(options.width(10).color(Color.MAGENTA).geodesic(false).pattern(pattern));
}
SALIDA
1. Si estoy usando this.showCurvedPolyline (latLng1, latLng2, 0.1); luego obteniendo:Como puede ver en la imagen de arriba, estamos muy cerca de alcanzar nuestro objetivo, pero no sabemos por qué no se conecta con otro punto final
2. Si estoy usando this.showCurvedPolyline (latLng1, latLng2, 1); luego obteniendo:3. Si estoy usando LatLng c = SphericalUtil.computeOffset (p, x, h - 90.0); luego obteniendo:Nota: No quiero tantoforma de círculo grande, De VerdadNo quiero tantoaltura.
Aquí esta lo queQuiero una forma de arco como se muestra en la imagen de abajo
Aquí está elCÓDIGO Estoy usando paraagregar polilínea curva entre dosgeo-locatios
:
private void addCurvedPolyLine() {
LatLng latLng1 = new LatLng(40.7128, 74.0059); // New York
LatLng latLng2 = new LatLng(51.5074, 0.1278); // London
Marker marker1 = mMap.addMarker(new MarkerOptions().position(latLng1).title("Start"));
Marker marker2 = mMap.addMarker(new MarkerOptions().position(latLng2).title("End"));
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(marker1.getPosition());
builder.include(marker2.getPosition());
LatLngBounds bounds = builder.build();
int padding = 0; // offset from edges of the map in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
mMap.moveCamera(cu);
mMap.animateCamera(cu);
this.showCurvedPolyline(latLng1, latLng2, 0.1);
}