У меня есть FillLayer с полигонами, сгенерированными из локального файла geojson. Я хочу добавить интерактивности этим полигонам, но не знаю, как это сделать с помощью iOS SDK. Я нашел пример, который может сделать что-то похожее на то, что мне нужно сделать, но в среде Mapbox-GL-JS:
https://docs.mapbox.com/mapbox-gl-js/example/polygon-popup-on-click/
Вы можете добавить распознаватель жестов на карту в iOS SDK следующим образом.
mapView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.mapClickedFunction)))
но вы не можете добавить распознаватель жестов к слою или многоугольникам внутри слоя. Любая помощь в этом будет высоко оценена!





Используйте точку касания, полученную от распознавателя жестов, чтобы запросить на карте визуализированные объекты в заданной точке в указанном слое.
@objc public func findFeatures(_ sender: UITapGestureRecognizer) {
let tapPoint = sender.location(in: mapView)
mapView.mapboxMap.queryRenderedFeatures(
with: tapPoint,
options: RenderedQueryOptions(layerIds: ["US-states"], filter: nil)) { [weak self] result in
switch result {
case .success(let queriedfeatures):
if let firstFeature = queriedfeatures.first?.feature.properties,
case let .string(stateName) = firstFeature["STATE_NAME"] {
self?.showAlert(with: "You selected \(stateName)")
}
case .failure(let error):
self?.showAlert(with: "An error occurred: \(error.localizedDescription)")
}
}
}
Это фрагмент кода из примеров MapBox. Логика заключается в том, чтобы поместить распознаватель жестов в представление карты. Когда получен жест касания, вы получаете место, где пользователь коснулся, как координату CGPoint внутри представления карты. Затем вы отправляете его MapboxMap, чтобы получить список функций, которые содержат эту точку.
Я рекомендую вам взглянуть на официальный репозиторий Mapbox, который содержит множество способов сделать что-то: https://github.com/mapbox/mapbox-maps-ios/tree/main/Apps/Examples
Хорошего дня!