Отображение маркера в середине полигона openstreetmap (iOS) - PullRequest
0 голосов
/ 17 ноября 2018

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

Поэтому я использовал http://overpass -turbo.eu для извлечения данных.

Затем я использую mapbox для отображения данных. К сожалению, я новичок в openstreetmap и связанных SDK.

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

Я следовал этому уроку из mapbox, чтобы отобразить круги на точке данных, но он рисует круг по каждой координате в многоугольниках ...

Так как же я могу указать mapbox добавить только изображение в центре многоугольника? Должен ли я изменить данные, полученные от путепровода? Могу ли я запросить путепровод по-другому, чтобы получить только центроиды?

Спасибо за любые указатели

EDIT Меня попросили добавить код. На самом деле код не так много, поэтому я не думаю, что он имеет здесь большое значение, так как я спрашиваю, каков наилучший подход к проблеме. Это делегат для добавления источника, который содержит данные (в быстром)

    func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {

    let source = MGLVectorTileSource(identifier: "export-ddqmvm", configurationURL: URL(string: "mapbox://mobdesign.9zilzleo")!)
    style.addSource(source)

    let layer = MGLCircleStyleLayer(identifier: "landmarks", source: source)
    layer.sourceLayerIdentifier = "export-ddqmvm"
    layer.circleColor = NSExpression(forConstantValue: #colorLiteral(red: 0.67, green: 0.28, blue: 0.13, alpha: 1))
    layer.circleOpacity = NSExpression(forConstantValue: 0.8)
    style.addLayer(layer)

}

Также вот урок, из которого я получил этот код: https://www.mapbox.com/help/ios-dds-circle-layer/

1 Ответ

0 голосов
/ 22 ноября 2018

Я наконец понял, что если я использую MGLSymbolStyleLayer вместо MGLCircleStyleLayer, то символ добавляется только один раз для формы.Достижение эффекта, который я искал.

Вот код, соответствующий приведенному выше коду:

    let markerLayer = MGLSymbolStyleLayer(identifier: "playgrounds", source: source)
    markerLayer.sourceLayerIdentifier = "export-ddqmvm"
    markerLayer.iconImageName = NSExpression(forConstantValue: "mapMarker")
    markerLayer.iconAnchor = NSExpression(forConstantValue: "bottom")
    markerLayer.iconAllowsOverlap = NSExpression(forConstantValue: "YES")

    style.addLayer(markerLayer)
    style.setImage(UIImage(named: "mapMarker")!, forName: "mapMarker")

Я надеюсь, что это поможет кому-то еще

...