Android GoogleMap V2:如何绘制具有特定长度的行?

时间:2015-02-03 07:57:41

标签: android google-maps google-maps-android-api-2 polyline

我的项目中有GoogleMap。它设置为缩放级别18.我想绘制一条长度为1米的线。我看到并使用了这样的代码:

googleMap.addCircle(new CircleOptions()
     .center(latLng1)
     .radius(5)
     .fillColor(Color.BLUE));     

我给它的半径以米为单位。我怎么能用一条线?(polyLine没有这个选项)一条具有特定LatLng和特定方向的线(例如:从北方开始)和特定长度? 我可以通过sin和cos指定方向..但是我能为线的长度做些什么呢?

3 个答案:

答案 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);