Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 向多边形添加孔会将其删除';s填充颜色_Android_Google Maps_Kotlin - Fatal编程技术网

Android 向多边形添加孔会将其删除';s填充颜色

Android 向多边形添加孔会将其删除';s填充颜色,android,google-maps,kotlin,Android,Google Maps,Kotlin,我创建了一个填充整个谷歌地图的多边形 在我添加了几个孔之后,贴图就可以正常工作了。使用多边形填充颜色对贴图进行着色,并渲染孔 但是,添加第三个孔后,这些孔仍然显示多边形的笔划,但多边形填充颜色变为透明 我的孔列表大小是63,但可能会有所不同 一个多边形可以有多少洞?或者我如何绘制一个有多个孔的多边形?所有的洞都包含在地图中 编辑1 我不能添加确切的代码片段,因为它是从我的工作,但这是类似于我所做的事情 fun GoogleMap.render(geoJSONS: List<JSONObje

我创建了一个填充整个谷歌地图的多边形

在我添加了几个孔之后,贴图就可以正常工作了。使用多边形填充颜色对贴图进行着色,并渲染孔

但是,添加第三个孔后,这些孔仍然显示多边形的笔划,但多边形填充颜色变为透明

我的孔列表大小是63,但可能会有所不同

一个多边形可以有多少洞?或者我如何绘制一个有多个孔的多边形?所有的洞都包含在地图中

编辑1

我不能添加确切的代码片段,因为它是从我的工作,但这是类似于我所做的事情

fun GoogleMap.render(geoJSONS: List<JSONObject>) {
    val wholeMapPolygon = PolygonOptions().add(
        LatLng(-89.999999999999, -180.0),
        LatLng(89.99999999999, -180.0),
        LatLng(89.99999999999, 179.99999999),
        LatLng(-89.99999999999, 179.99999999),
        LatLng(-89.99999999999, 0.0)
    ).strokeColor(Color.BLACK)
     .fillColor(Color.WHITE)

    val layers = createGeoJSONLayers(this, geoJSONS)
    val holes = getPolygonsFromGeoJsonLayers()

    for(hole in holes) {
        wholeMapPolygon.addHole(hole) // Here, adding more that 3 makes the wholeMapPolygon fill color dissapear.
    }

    addPolygon(wholeMapPolygon)
}

/**
* In this function, some other functions get called to extract each list of coordinates for each layer polygon.
**/
private fun getPolygonsFromGeoJsonLayers(layers: List<GeoJsonLayer>): List<List<LatLng>> {
   val holes = mutableListOf<List<LatLng>>()
   for(layer in layers) {
      val polygonFeatures = getGeoJsonLayerPolygonFeatures()
      for(polygonFeature in polygonFeatures) {
         holes.addAll(getCoordinatesFromFeature(polygonFeature))
      }
   }
   return holes
}

private fun getGeoJsonLayerPolygonFeatures(features: List<GeoJsonFeature>): List<GeoJsonFeature> = features.filter { feature ->
   feature.geometry.geometryType == "Polygon"
}

private fun getCoordinatesFromFeature(feature: GeoJSONFeature): List<LatLng> {
    val coordinates = mutableListOf<LatLng>()
    (geometry as? GeoJsonPolygon)?.coordinates?.filter {
        it.isNotEmpty()
    }?.forEach {
        coordinates.addAll(it)
    }
    return coordinates
}

private fun createGeoJSONLayers(map: GoogleMap, data: List<JSONObject>) = data?.map { jsonObject ->
   GeoJsonLayer(map, jsonObject)
}
fun GoogleMap.render(geoJSONS:List){
val wholeMapPolygon=polygonoOptions()。添加(
板条(-89.9999999999,-180.0),
LatLng(89.999999999,-180.0),
LatLng(89.999999999179.99999999),
LatLng(-89.999999999179.99999999),
板条(-89.999999999,0.0)
).strokeColor(颜色.黑色)
.fillColor(颜色.白色)
val layers=createGeoJSONLayers(这是geoJSONS)
val holes=getPolygonsFromGeoJsonLayers()
用于(孔中孔){
addHole(hole)//在这里,添加更多的3会使整个AppolyGon填充颜色消失。
}
添加多边形(整体多边形)
}
/**
*在这个函数中,会调用一些其他函数来提取每个层多边形的每个坐标列表。
**/
private fun getPolygonsFromGeoJsonLayers(层:列表):列表{
val holes=mutableListOf()
用于(逐层){
val polygonFeatures=getGeoJsonLayerPolygonFeatures()
用于(polygonFeatures中的polygonFeature){
孔.addAll(从特征获取坐标(多边形特征))
}
}
返回孔
}
private fun getGeoJsonLayerPolygonFeatures(功能:列表):列表=功能。过滤器{feature->
feature.geometry.geometryType==“多边形”
}
private fun GetCoordinates fromFeature(功能:GeoJSONFeature):列表{
val坐标=mutableListOf()
(几何体为?GeoJsonPolygon)?。坐标?过滤器{
it.isNotEmpty()
}?forEach{
坐标。添加所有(it)
}
返回坐标
}
private fun createGeoJSONLayers(地图:谷歌地图,数据:列表)=数据?.map{jsonObject->
GeoJsonLayer(地图,jsonObject)
}

问题似乎在于孔的位置。关于多边形,如下所示:

如果孔与多边形的轮廓相交,则多边形将 没有任何填充的渲染

各国:

孔必须完全包含在轮廓内。可以使用多个孔 但不支持重叠孔

填充颜色

默认值是透明的(0x00000000)。如果多边形几何体 未正确指定(外形和孔见上文),则无 将绘制填充图


希望这有帮助

发布一些代码和截图我不能发布确切的代码,因为它是从我的公司,我会发布类似的东西