大佬教程收集整理的这篇文章主要介绍了ios – 无法绘制跨越经度的MKPolylineView / -180,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
简而言之,MKMapView似乎并不了解世界是圆的.有没有办法按照预期画线,从日本东行到旧金山?
我有一个截图显示问题:
The Polyline http://www.builtlight.org/pub/MKPolylineView.png
解决方法是将/ -180交叉分成“东”和“西”部分.
对于环球旅行(完成==开始),您可以将交叉点的“西”部分放在折线的前面.
例如:
CLLOCATIOnCoordinate2D newYorkCoord = CLLOCATIOnCoordinate2DMake(40.7141667,-74.0063889); CLLOCATIOnCoordinate2D londonCoord = CLLOCATIOnCoordinate2DMake(51.5,-0.116667); CLLOCATIOnCoordinate2D japanCoord = CLLOCATIOnCoordinate2DMake(36,138); CLLOCATIOnCoordinate2D sanFranciscoCoord = CLLOCATIOnCoordinate2DMake(37.775,-122.4183333); CLLOCATIOnCoordinate2D japanToSFMidpointEast; //use average calc as crude way to find midpoint... japanToSFMidpointEast.latitude = (japanCoord.latitude + sanFranciscoCoord.latitudE)/2.0; japanToSFMidpointEast.longitude = 180; CLLOCATIOnCoordinate2D japanToSFMidpointWest; japanToSFMidpointWest.latitude = japanToSFMidpointEast.latitude; japanToSFMidpointWest.longitude = -180; int pointsCount = 6; CLLOCATIOnCoordinate2D *points = malloc(pointsCount * sizeof(CLLOCATIOnCoordinate2D)); points[0] = japanToSFMidpointWest; points[1] = sanFranciscoCoord; points[2] = newYorkCoord; points[3] = londonCoord; points[4] = japanCoord; points[5] = japanToSFMidpointEast; MKPolyline *polyline = [MKPolyline polylineWithCoordinates:points count:pointsCount]; [mapView addOverlay:polyline]; free(points); points = NULL;
如果旅行不在世界各地(完成!=开始),您将不得不使用两条折线.
这个例子从日本到SF:
CLLOCATIOnCoordinate2D japanCoord = CLLOCATIOnCoordinate2DMake(36,-122.4183333); CLLOCATIOnCoordinate2D japanToSFMidpointEast; japanToSFMidpointEast.latitude = (japanCoord.latitude + sanFranciscoCoord.latitudE)/2.0; japanToSFMidpointEast.longitude = 180; CLLOCATIOnCoordinate2D japanToSFMidpointWest; japanToSFMidpointWest.latitude = japanToSFMidpointEast.latitude; japanToSFMidpointWest.longitude = -180; int eastPointsCount = 2; CLLOCATIOnCoordinate2D *eastPoints = malloc(eastPointsCount * sizeof(CLLOCATIOnCoordinate2D)); eastPoints[0] = japanCoord; eastPoints[1] = japanToSFMidpointEast; MKPolyline *eastPolyline = [MKPolyline polylineWithCoordinates:eastPoints count:eastPointsCount]; [mapView addOverlay:eastPolyline]; free(eastPoints); eastPoints = NULL; int WestPointsCount = 2; CLLOCATIOnCoordinate2D *WestPoints = malloc(WestPointsCount * sizeof(CLLOCATIOnCoordinate2D)); WestPoints[0] = japanToSFMidpointWest; WestPoints[1] = sanFranciscoCoord; MKPolyline *WestPolyline = [MKPolyline polylineWithCoordinates:WestPoints count:WestPointsCount]; [mapView addOverlay:WestPolyline]; free(WestPoints); WestPoints = NULL;
以上是大佬教程为你收集整理的ios – 无法绘制跨越经度的MKPolylineView / -180全部内容,希望文章能够帮你解决ios – 无法绘制跨越经度的MKPolylineView / -180所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。