我迅速拥有一个iOS应用,该应用已使用Mapbox iOS库成功显示地图。
我还有一些GeoJSON
数据,作为字典,是我从Redis数据库中提取的。拉出数据后,我已经在Xcode控制台中成功打印了该数据,看起来像这样:
Optional(["city": chicago, "data": {
features = (
{
geometry = {
coordinates = (
"-87.86810699999999",
"41.966483"
);
type = Point;
};
properties = {
weight = 1;
};
type = Feature;
},
{
geometry = {
coordinates = (
"-87.866905",
"41.96288"
);
type = Point;
};
properties = {
weight = 3;
};
type = Feature;
},
/*and so on with many more point features...*/
将Redis查询返回的原始数组转换为上述代码中的字典的行如下:
let geojson_dict = (message[0] as! String).convertToDictionary()
我现在想将此GeoJson数据放在代码中定义的MapBox地图视图上:
var mapBoxView: MGLMapView?
在我拥有GeoJson
数据的时刻,mapBoxView
被添加为视图并且可见。
此示例涉及如何执行此操作:
https://docs.mapbox.com/ios/maps/examples/heatmap-example/
但是GeoJson
数据具有不同的结构,它不处理内存中的字典,而是从URL中提取GeoJson
。再加上该示例没有得到很好的文档记录/注释,使它很难适应我的特定用例。
我尝试了以下操作:
let feature = try! MGLShape(data: geojson_dict as Data, encoding: String.Encoding.utf8.rawValue) as! MGLShapeCollectionFeature
,但这似乎不希望将geojson_dict
用作字典,也不会在mapbox
视图中添加热图。
答案 0 :(得分:0)
您的geojson_dict [“ data”]是您的GeoJson词典。我想您已经实例化了mapboxView并将其添加到viewController中(非常类似于MapBox's Heatmap sample),所以这是如何实例化MGLShapeSource的方法。
func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {
guard let dict = geojson_dict else {
return
}
var source : MGLShapeSource
do {
let json = try JSONSerialization.data(withJSONObject: dict[“data"], options: JSONSerialization.WritingOptions())
let shape = try MGLShape(data: json, encoding: String.Encoding.utf8.rawValue)
source = MGLShapeSource(identifier: dict[“city”], shape: shape, options: nil)
mapView.style.addSource(source)
} catch {
// handle any exceptions here
}
// Continue defining your heat layer as on Mapbox sample
…
}