2

我正在研究 WhirlyGlobe 组件测试器应用程序(mousebird 团队为 ios 中的地球应用程序提供的出色框架)并尝试创建纬度和经度。我已经使用以下方法在地球上创建了经度:- (void)addGreatCircles:(LocationInfo *)locations len:(int)len stride:(int)stride offset:(int)offset 并在数组中分配值:LocationInfo locations[NumLocations] 但是当我尝试通过在 as 中给出坐标来创建地球上的纬度时

LocationInfo locations[NumLocations] = {
{"twenty five",0, 180},
{"twenty six",0, -10}
 // {"three",30,180.0},
 //  {"four",30,0},
// {"five",60, 180},
 //{"six",60, 0},
}

和儿子...我只能得到地球上纬度线的一半。我不知道为什么会出现这个问题。这是由于 OpenGL 还是什么。有人请帮我正确地做。当我给出起点(0,-180)终点(0,0)时的屏幕截图如图所示 - 1,2:

图像-1 在此处输入图像描述

图像-2 在此处输入图像描述

我需要的是在地球上绘制的完整纬度线。使用起点(0,0)到终点(0,360)给我一个空白输出(地球上没有画线)。我已经尝试使用起点(0,10)终点(0,-10),以便这条线覆盖整个地球,但还没有成功。请帮助大家!

4

1 回答 1

3

首先,您需要转到 github 上的开发分支。那是即将发布的 2.2 版。

我已经在测试应用程序中添加了一个完全执行此操作的示例。

在此处输入图像描述

这就是我们如何做到这一点的。

- (void)addLinesLon:(float)lonDelta lat:(float)latDelta color:(UIColor *)color
{
    NSMutableArray *vectors = [[NSMutableArray alloc] init];
    NSDictionary *desc = @{kMaplyColor: color, kMaplySubdivType: kMaplySubdivSimple, kMaplySubdivEpsilon: @(0.001), kMaplyVecWidth: @(4.0), kMaplyDrawPriority: @(1000)};
    // Longitude lines
    for (float lon = -180;lon < 180;lon += lonDelta)
    {
        MaplyCoordinate coords[3];
        coords[0] = MaplyCoordinateMakeWithDegrees(lon, -90);
        coords[1] = MaplyCoordinateMakeWithDegrees(lon, 0);
        coords[2] = MaplyCoordinateMakeWithDegrees(lon, +90);
        MaplyVectorObject *vec = [[MaplyVectorObject alloc] initWithLineString:coords numCoords:3 attributes:nil];
        [vectors addObject:vec];
    }
    // Latitude lines
    for (float lat = -90;lat < 90;lat += latDelta)
    {
        MaplyCoordinate coords[5];
        coords[0] = MaplyCoordinateMakeWithDegrees(-180, lat);
        coords[1] = MaplyCoordinateMakeWithDegrees(-90, lat);
        coords[2] = MaplyCoordinateMakeWithDegrees(0, lat);
        coords[3] = MaplyCoordinateMakeWithDegrees(90, lat);
        coords[4] = MaplyCoordinateMakeWithDegrees(+180, lat);
        MaplyVectorObject *vec = [[MaplyVectorObject alloc] initWithLineString:coords numCoords:5 attributes:nil];
        [vectors addObject:vec];
    }

    latLonObj = [baseViewC addVectors:vectors desc:desc];
}

WhirlyGlobe-Maply 2.2 为矢量渲染和细分添加了一些技巧。您现在可以告诉工具包将行细分到一个 epsilon 以使它们可以接受。我们也可以在另一个之上渲染一个东西,而不用担心 z 缓冲。所以你去吧,现在很容易。

这里唯一真正的诡计是我们必须将线条分成几部分。我们至少需要三个点,否则细分逻辑只会检测到退化的情况。纬度的 5 点线适用于一些错误测试逻辑。

于 2013-07-31T18:57:44.383 回答