В настоящее время я использую карты MapBox для Android v10.3.0. Мое приложение написано на Котлине.
Используя МногоугольникАннотация, PolygonAnnotationManager и PolygonAnnotationOptions, я могу нарисовать и заштриховать многоугольник на карте.
// Create an instance of the Annotation API and get the polygon manager.
val annotationApi = mapView.annotations
val polygonAnnotationManager = annotationApi.createPolygonAnnotationManager()
// Define a list of geographic coordinates to be connected.
val points = listOf(
listOf(
Point.fromLngLat(17.94, 59.25),
Point.fromLngLat(18.18, 59.25),
Point.fromLngLat(18.18, 59.37),
Point.fromLngLat(17.94, 59.37)
)
)
// Set options for the resulting fill layer.
val polygonAnnotationOptions: PolygonAnnotationOptions = PolygonAnnotationOptions()
.withPoints(points)
// Style the polygon that will be added to the map.
.withFillColor("#ee4e8b")
.withFillOpacity(0.4)
// Add the resulting polygon to the map.
polygonAnnotationManager.create(polygonAnnotationOptions)
Я хотел бы заштриховать область вне полигона и иметь площадь внутри полигона без заливки. Как мне это сделать?
Вы можете создать многоугольник, занимающий весь мир, и добавить дыру внутри этого многоугольника:
val points = listOf(
listOf(
Point.fromLngLat(-180.0, 90.0),
Point.fromLngLat(180.0, 90.0),
Point.fromLngLat(180.0, -90.0),
Point.fromLngLat(-180.0, -90.0),
Point.fromLngLat(-180.0, 90.0)
),
listOf(
Point.fromLngLat(17.94, 59.25),
Point.fromLngLat(18.18, 59.25),
Point.fromLngLat(18.18, 59.37),
Point.fromLngLat(17.94, 59.37),
Point.fromLngLat(17.94, 59.25)
)
)
Спасибо. Это очень полезная тактика.