Как показать полилинии, добавленные в исходный код в mapbox ios?
Я пытаюсь показать полилинии, взятые из 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 ответ
Вы используете -[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 ⚠️