Как показать полилинии, добавленные в исходный код в mapbox ios? - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь показать полилинии, взятые из GeoJson, затем добавленные в тот же источник, но с плохими результатами.

NSString *jsonString = @"{\"type\": \"FeatureCollection\",\"features\": [{\"type\": \"Feature\",\"properties\": {},\"geometry\": {\"type\": \"LineString\",\"coordinates\": [[4.873809814453125,52.3755991766591],[4.882049560546875,52.339534544106435],[4.94659423828125,52.34708539110632],[4.94659423828125,52.376437538867776],[5.009765625,52.370568669179654]]}},{\"type\": \"Feature\",\"properties\": {},\"geometry\": {\"type\": \"LineString\",\"coordinates\": [[4.73785400390625,52.32694693334544],[4.882049560546875,52.32778621884898],[4.872436523437499,52.29420237796669],[4.9713134765625,52.340373590787394]]}}]}";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

MGLShapeCollectionFeature *shapeCollectionFeature = (MGLShapeCollectionFeature *)[MGLShape shapeWithData:jsonData encoding:NSUTF8StringEncoding error:NULL];
MGLMultiPolyline *polylines = [MGLMultiPolyline multiPolylineWithPolylines:shapeCollectionFeature.shapes];
MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"transit" shape:polylines options:nil];
[self.mapView.style addSource:source];

MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"layer" source:source];
[self.mapView.style addLayer:lineLayer];

Я зарегистрировал исходный объект, и внутри есть две полилинии. Но почему они не показаны? что я делаю не так?

Я использую mapbox SDK 3.7.6 для IOS.

1 Ответ

0 голосов
/ 15 апреля 2019

Используете ли вы метод -[MGLMapViewDelegate mapView:didFinishLoadingStyle], чтобы убедиться, что ваша карта правильно инициализирована перед добавлением слоя стиля? Если нет, то вы, скорее всего, столкнетесь с проблемой гонки, когда добавляете данные, которые немедленно перезаписываются при загрузке стиля.

Если вы измените свой код, чтобы гарантировать, что источник и стиль не будут добавлены преждевременно, я ожидаю, что ваши проблемы будут решены.

- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style {
    MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"transit" shape:polylines options:nil];
    [self.mapView.style addSource:source];

    MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"layer" source:source];
    [self.mapView.style addLayer:lineLayer];
}

⚠️ Отказ от ответственности: в настоящее время я работаю в Mapbox ⚠️

...