用户可以根据三个有序点唯一确定一条弧线,满足您的业务需求。
//添加弧线覆盖物//传入的坐标顺序为起点、途经点、终点cllocationcoordinate2d coords[3]={0};coords[0].latitude=40.065;coords[0].longitude=116.124;coords[1].latitude=40.125;coords[1].longitude=116.304;coords[2].latitude=40.065;coords[2].longitude=116.404;bmkarcline*arcline =[bmkarcline arclinewithcoordinates:coords];[_mapview addoverlay:arcline];
#pragma mark -bmkmapviewdelegate/**根据overlay生成对应的bmkoverlayview@param mapview 地图view@param overlay 指定的overlay@return 生成的覆盖物view*/-(bmkoverlayview*)mapview:(bmkmapview*)mapview viewforoverlay:(id<bmkoverlay>)overlay{if([overlay iskindofclass:[bmkarclineclass]]){bmkarclineview*arclineview =[[bmkarclineview alloc] initwitharcline:overlay];arclineview.strokecolor=[uicolor bluecolor];arclineview.linedash=yes;arclineview.linewidth=6.0;return arclineview;}return nil;}
效果如图:
// 添加多边形覆盖物cllocationcoordinate2d coords[5]={0};coords[0].latitude=39.965;coords[0].longitude=116.604;coords[1].latitude=39.865;coords[1].longitude=116.604;coords[2].latitude=39.865;coords[2].longitude=116.704;coords[3].latitude=39.905;coords[3].longitude=116.654;coords[4].latitude=39.965;coords[4].longitude=116.704;bmkpolygon*polygon =[bmkpolygon polygonwithcoordinates:coords count:5];[_mapview addoverlay:polygon];
#pragma mark -bmkmapviewdelegate/**根据overlay生成对应的bmkoverlayview@param mapview 地图view@param overlay 指定的overlay@return 生成的覆盖物view*/-(bmkoverlayview*)mapview:(bmkmapview*)mapview viewforoverlay:(id <bmkoverlay>)overlay{if([overlay iskindofclass:[bmkpolygonclass]]){bmkpolygonview* polygonview =[[bmkpolygonview alloc] initwithoverlay:overlay];polygonview.strokecolor=[[uicolor alloc] initwithred:0.0green:0blue:0.5alpha:1];polygonview.fillcolor=[[uicolor alloc] initwithred:0green:1blue:1alpha:0.2];polygonview.linewidth=2.0;polygonview.linedash=yes;return polygonview;}return nil;}
效果如图:
// 添加圆形覆盖物cllocationcoordinate2d coor;coor.latitude=39.915;coor.longitude=116.404;bmkcircle*circle =[bmkcircle circlewithcentercoordinate:coor radius:5000];[_mapview addoverlay:circle];
#pragma mark -bmkmapviewdelegate/**根据overlay生成对应的bmkoverlayview@param mapview 地图view@param overlay 指定的overlay@return 生成的覆盖物view*/-(bmkoverlayview*)mapview:(bmkmapview*)mapview viewforoverlay:(id <bmkoverlay>)overlay{if([overlay iskindofclass:[bmkcircleclass]]){bmkcircleview* circleview =[[bmkcircleview alloc] initwithoverlay:overlay];circleview.fillcolor=[[uicolor cyancolor] colorwithalphacomponent:0.5];circleview.strokecolor=[[uicolor bluecolor] colorwithalphacomponent:0.5];circleview.linewidth=10.0;return circleview;}return nil;}
效果如图:
// 添加渐变圆覆盖物cllocationcoordinate2d coor =cllocationcoordinate2dmake(39.915,116.404);bmkcircle*gradientcircle =[bmkcircle circlewithcentercoordinate:coor radius:5000];[_mapview addoverlay:gradientcircle];
-(__kindof bmkoverlayview*)mapview:(bmkmapview*)mapview viewforoverlay:(id<bmkoverlay>)overlay {if([overlay iskindofclass:[bmkcircleclass]]){bmkgradientcircleview*gradientcircleview =[[bmkgradientcircleview alloc] initwithoverlay:overlay];/*** 渐变规则如下:* (0 ~ radiusweight * radius) 该部分颜色从 centercolor 渐变至 colorweight * (sidecolor - centercolor);* (radiusweight * radius ~ radius)该部分间颜色从 centercolor colorweight * (sidecolor - centercolor) 渐变至 sidecolor; */gradientcircleview.radiusweight=0.6;gradientcircleview.colorweight=0.1;gradientcircleview.centercolor=[uicolor colorwithred:93.f/255.f green:232.f/255.f blue:204.f/255.f alpha:0.0f];gradientcircleview.sidecolor=[uicolor colorwithred:93.f/255.f green:232.f/255.f blue:204.f/255.f alpha:1.f];// 边框gradientcircleview.linewidth=2.f;gradientcircleview.strokecolor=[uicolor colorwithred:93.f/255.f green:232.f/255.f blue:204.f/255.f alpha:1.f];return gradientcircleview;}return nil;}
效果如图:
图片图层(groundoverlay)又称为图片覆盖物,此功能支持在地图的指定位置上添加一张大小合适的图片。图片可随地图的平移、缩放、旋转等操作做相应的变换。 图片图层是一种特殊的overlay, 它位于底图和底图标注层之间(即图片图层不会遮挡地图标注信息), 此外,图片图层的添加顺序不会影响其他图层(例如:poi搜索图层、我的位置图层等)的叠加关系。
图片图层对象初始化的方法有两种:(1)根据指定经纬度坐标生成 (2)根据指定区域生成。
//添加图片图层覆盖物(第一种:根据指定经纬度坐标生成)cllocationcoordinate2d coord =cllocationcoordinate2dmake(39.910,116.420);/***根据指定经纬度坐标生成一个groundoverlay*@param position 指定的经纬度坐标*@param zoomlevel 不损失精度绘制原始图片的地图等级*@param anchor 绘制图片的锚点*@param icon 绘制使用的图片*@return 新生成的groundoverlay对象*/_ground =[bmkgroundoverlay groundoverlaywithposition:coord zoomlevel:12anchor:cgpointmake(0,0) icon:[uiimage imagenamed:@"groundicon.png"]];//图片纹理透明度,最终透明度 = 纹理透明度 * alpha,取值范围为[0.0f, 1.0f],默认为1.0f_ground.alpha=1;[_mapview addoverlay:ground];//添加图片图层覆盖物(第二种:根据指定区域生成)cllocationcoordinate2d coords[2]={0};coords[0].latitude=39.815;coords[0].longitude=116.404;coords[1].latitude=39.915;coords[1].longitude=116.504;bmkcoordinatebounds bound;bound.southwest= coords[0];bound.northeast= coords[1];bmkgroundoverlay*ground2 =[bmkgroundoverlay groundoverlaywithbounds: boundicon:[uiimage imagenamed:@"groundicon.png"]];[_mapview addoverlay:ground2];
#pragma mark -bmkmapviewdelegate/**根据overlay生成对应的bmkoverlayview@param mapview 地图view@param overlay 指定的overlay@return 生成的覆盖物view*/-(bmkoverlayview*)mapview:(bmkmapview*)mapview viewforoverlay:(id<bmkoverlay>)overlay {if([overlay iskindofclass:[bmkgroundoverlayclass]]){//初始化一个overlay并返回相应的bmkgroundoverlayview的实例bmkgroundoverlayview*groundview =[[bmkgroundoverlayview alloc] initwithgroundoverlay:overlay];return groundview;}return nil;}
效果如图:
//删除单个overlay[_mapview removeoverlay:ground];
批量添加
/***向地图窗口添加一组overlay,需要实现bmkmapviewdelegate的-mapview:viewforoverlay:函数来生成标注对应的view*@param overlays 要添加的overlay数组*/[_mapview addoverlays:overlays];
批量删除
/***移除一组overlay*@param overlays 要移除的overlay数组*/[_mapview removeoverlays:overlays];
上一篇
下一篇
本篇文章对您是否有帮助?