我的项目中有GoogleMap。它设置为缩放级别18.我想绘制一条长度为1米的线。我看到并使用了这样的代码:
googleMap.addCircle(new CircleOptions()
.center(latLng1)
.radius(5)
.fillColor(Color.BLUE));
我给它的半径以米为单位。我怎么能用一条线?(polyLine没有这个选项)一条具有特定LatLng和特定方向的线(例如:从北方开始)和特定长度? 我可以通过sin和cos指定方向..但是我能为线的长度做些什么呢?
答案 0 :(得分:2)
对于给定点,只有一个给定半径的圆。但是线条的情况有点不同。对于给定的点,从这个点开始有给定长度的无限数量的行。因此,你不能简单地绘制这样的线。
一种方法是在半径为1米的圆上选取一个点并使您的点居中。 Here是一个很好的例子,如何计算给定半径的圆上的点。不只是在两点之间画一条线。
<强>更新强>
这可以帮助您找到圈子LatLng Points on circle on Google Map V2 in Android
上的LatLng点答案 1 :(得分:1)
要计算行结束,我使用:
SphericalUtil.computeOffset(LatLng,lenght,heading);
要以米为单位计算宽度,请使用:
public Double calcw(GoogleMap map,int ancho,LatLng p) {
float tilt = map.getCameraPosition().tilt;
CameraPosition old=map.getCameraPosition();
if(tilt!=0){
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(old.target) // Sets the center of the map to Mountain View
.zoom(old.zoom) // Sets the zoom
.bearing(old.bearing) // Sets the orientation of the camera to east
.tilt(0) // Sets the tilt of the camera to 30 degrees
.build();
map.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
Point g1 =map.getProjection().toScreenLocation(p);
Point g2=map.getProjection().toScreenLocation(SphericalUtil.computeOffset(p,ancho/10,0));
Double result=(distance(g1,g2));
//Log.e("PROJ1",Double.toString(distance(g1,g2)));
map.moveCamera(CameraUpdateFactory.newCameraPosition(old));
return result;
}
public double distance(Point a, Point b)
{
double dx = a.x - b.x;
double dy = a.y - b.y;
return Math.sqrt(dx * dx + dy * dy);
}
答案 2 :(得分:0)
使用折线画下面的行,
private ArrayList<LatLng> mLatlngs ;
PolylineOptions mPolylineOptions = new PolylineOptions();
mPolylineOptions.color(Color.RED);
mPolylineOptions.width(3);
mPolylineOptions.addAll(mLatlngs);
mGoogleMap.addPolyline(mPolylineOptions);