我不想创建一个带有实线的多边形,而是创建一个带有虚线的多边形,这可能吗?
我知道当您覆盖覆盖的onDraw
方法v1
但Overlay
该类不再存在时您可以这样做,那么我还能如何实现呢?
我不想创建一个带有实线的多边形,而是创建一个带有虚线的多边形,这可能吗?
我知道当您覆盖覆盖的onDraw
方法v1
但Overlay
该类不再存在时您可以这样做,那么我还能如何实现呢?
目前不可能,但您可以在此处支持此增强功能: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
在地图上距离中心 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);
}
}
}
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
也许,这会帮助你
如果您仍在寻找答案,请查看以下内容: