4

我不想创建一个带有实线的多边形,而是创建一个带有虚线的多边形,这可能吗?

我知道当您覆盖覆盖的onDraw方法v1Overlay该类不再存在时您可以这样做,那么我还能如何实现呢?

4

4 回答 4

3

目前不可能,但您可以在此处支持此增强功能:http ://code.google.com/p/gmaps-api-issues/issues/detail?id=4633

更新

最近,Google 在 Google Maps Android API v2 中为折线和多边形实现了此功能,并将问题 4633 标记为已修复。

请参阅“形状指南”中有关笔划图案的信息。请参阅折线和多边形教程中的示例

您还可以在此处阅读相应的博客文章:

https://maps-apis.googleblog.com/2017/02/styling-and-custom-data-for-polylines.html

于 2013-03-21T07:33:50.290 回答
1

在地图上距离中心 LatLng 半径单位的距离处找到一个 LatLng 现在将这两个 LatLngs 转换为 screenCoordinates

使用用于构造圆的公式 x = R sin(theta) , y = R cos(theta)

您将圆分成 N 段,然后在圆的圆周上绘制折线(在地图上绘制),将屏幕坐标转换为 LatLngs

N的数量越多看起来像一个圆圈,我根据缩放级别使用了N = 120,我使用的是13。

private void addDottedCircle(double radius) {//radius is in kms

    clearDottedCircle();


    LatLng center,start,end;
    Point screenPosCenter,screenPosStart,screenPosEnd;
    Projection p = mMap.getProjection();

    center = searchCenterMarker.getPosition();
    start = new LatLng(center.latitude + radius/110.54,center.longitude);
    // radius/110.54 gives the latitudinal delta we should increase so that we have a latitude at radius distance
    // 1 degree latitude is approximately 110.54 kms , so the above equation gives you a rough estimate of latitude at a distance of radius distance 


    screenPosCenter = p.toScreenLocation(center);
    screenPosStart = p.toScreenLocation(start);

    double R = screenPosCenter.y - screenPosStart.y;
    int N = 120;//N is the number of parts we are dividing the circle
    double T = 2*Math.PI/N;
    double theta = T;

    screenPosEnd = new Point();
    screenPosEnd.x = (int)(screenPosCenter.x-R*Math.sin(theta));
    screenPosEnd.y = (int) (screenPosCenter.y-R*Math.cos(theta));
    end = p.fromScreenLocation(screenPosEnd);

    for(int i =0;i<N;i++){
        theta+=T;
        if(i%2 == 0){
            //dottedCircle is a hashmap to keep reference to all the polylines added to map
            dottedCircle.add(mMap.addPolyline(new PolylineOptions().add(start,end).width(5).color(Color.BLACK)));

            screenPosStart.x = (int) (screenPosCenter.x-R*Math.sin(theta));
            screenPosStart.y = (int) (screenPosCenter.y-R*Math.cos(theta));
            start = p.fromScreenLocation(screenPosStart);
        }
        else{
            screenPosEnd.x = (int)(screenPosCenter.x-R*Math.sin(theta));
            screenPosEnd.y = (int) (screenPosCenter.y-R*Math.cos(theta));
            end = p.fromScreenLocation(screenPosEnd);
        }

    }

}

画虚线圆后的图像

于 2014-08-20T09:00:59.213 回答
1

首先,看一下 API https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Polyline

v2 尚无法实现,但在 v3 javascript API 上已经实现,请看这里: https ://developers.google.com/maps/documentation/javascript/overlays#PolylineSymbols

但似乎可以在 android 应用程序中使用这个 v3 javascript API,看这里: https ://developers.google.com/maps/articles/android_v3

也许,这会帮助你

于 2013-03-14T16:45:41.180 回答
0

如果您仍在寻找答案,请查看以下内容:

如何使用 android google map sdk v2 绘制虚线折线?

于 2014-07-25T06:00:10.890 回答