我正在尝试创建一个显示儿童游乐场的应用程序。我发现开放的街道地图实际上对此有很好的数据。
因此,我使用了http://overpass-turbo.eu来提取数据。
然后我正在使用mapbox显示数据。 不幸的是,我是openstreetmap和相关SDK的初学者。
我遇到的问题是其中一些公园是多边形。我只希望能够在公园所在的地图上显示标记,而不是绘制公园的形状。
我从mapbox开始按照本教程在数据点上显示圆,但是它在多边形的每个坐标上绘制了一个圆...
那么我怎么能告诉mapbox在多边形中心仅添加一个图像呢?我是否需要修改从立交桥获得的数据?我可以不同地查询立交桥以仅获取质心吗?
感谢任何指针
编辑 我被要求添加代码。确实代码还没有很多,所以我在这里问它是什么,因为我在问什么是解决问题的最佳方法。这是添加包含数据的源的委托(迅速)
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/
答案 0 :(得分:1)
我终于弄清楚了,如果我使用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")
我希望它可以帮助其他人