当前位置: 首页 > 知识库问答 >
问题:

在MapBox Android SDK中对geoJSON中的多边形形状着色

柴茂材
2023-03-14

我正在使用geoJSON在Android MapBox中显示一个形状。在geoJSON中,我有很多多边形,每个多边形在“属性”JSONObject中都有一个值,下面是一个示例:

{
"geometry": {
    "type": "Polygon",
    "coordinates": [
        [
            [
                2.3303745,
                39.841098
            ],
            [
                2.3303464,
                39.8410976
            ],
            [
                2.3303261,
                39.8411054
            ]
        ]
    ]
},
"type": "Feature",
"properties": {
    "value": 169
}
}

我想根据值用特定颜色填充多边形。

GeoJsonSource geoJsonSource = new GeoJsonSource("geojson",stringbuilder.toString());
mapboxMap.addSource(geoJsonSource);
mapboxMap.addLayer(new FillLayer("geojson", "geojson"));

我应该怎么做来给形状上色?

  1. 在JSON中为“poperties”对象添加一个“fill”值?(还没有为我工作。)
  2. 手动解析JSON并在“PolygonOptions”对象中使用“fillColor”函数?(将添加大量工作,因为有许多多边形)

共有2个答案

郭洋
2023-03-14

在数据驱动的样式出现在下一版本之前,您需要为每种颜色创建单独的层,并将它们覆盖在彼此的顶部。与您可能认为的相反,这不应妨碍性能,只需多做一点工作:)

许沛
2023-03-14
JSONArray features = json.getJSONArray("features");

//Get the value for each features and create geojsonsource
for (int i = 0; i < features.length(); i++) {
    JSONObject feature = features.getJSONObject(i);
    Double value=-1.0;

    if (feature != null) {
        JSONObject properties = feature.getJSONObject("properties");
        if (properties != null && properties.has("value")) {
            value = properties.getDouble("value");
        }
        GeoJsonSource geoJsonSource = new GeoJsonSource("geojson" + i, feature.toString());

        if (!values.contains(value))
            values.add(value);
        list_value_geojson.add(new AbstractMap.SimpleEntry<>(value, geoJsonSource));
    }
}

在我的AsyncTask的postExecute函数中:

for (int i=0; i < list_value_geojson.size(); i++){
    Map.Entry<Double, GeoJsonSource> entry = list_value_geojson.get(i);
    if (mapboxMap != null && entry != null) {
        mapboxMap.addSource(entry.getValue());
        FillLayer fillLayer = new FillLayer(entry.getValue().getId(), entry.getValue().getId());
        fillLayer.setProperties(PropertyFactory.fillColor(Color.parseColor(hashMap    Colors.get(entry.getKey()))));
    mapboxMap.addLayer(fillLayer);

    }
}
 类似资料:
  • 有没有办法在python中合并两个重叠的GEOJSON多边形,返回一个合并的GEOJSON对象?

  • 为什么这工作正常: 这会产生运行时错误 错误: 这没有任何意义。第一个代码工作正常,三角形画好了,但第二个代码不行。有人能解释一下我做错了什么吗...

  • 我的python3脚本创建了变量,其值是一个shapefiles列表,每个shapefiles都是一个多边形,表示一个地理区域 但它给出的结果是:AttributeError:“Shape”对象没有属性“union” 我看到了另一种方法,它涉及创建一个shapefilewriter对象,然后依次覆盖列表https://gis.stackexchange.com/questions/103033/u

  • 下面是我使用的代码: 有办法让它起作用吗?在中似乎没有简单的方法来获取多边形的边界。

  • 我有一个来自服务器的json响应,其中包含GeoJson格式的多边形信息,如下所示: 现在我想将此json转换为mapbox多边形,我正在使用gson转换器进行改装,以从服务器接收响应: ,但是我有这个错误: 我怎样才能解决这个问题?

  • 我目前正在使用JavaFX研究不同形状之间的边界相交。我想检测两个多边形在它们的点上的碰撞,而不是在它们的边界上(即2个多边形)。 请参阅图1:不期望的行为,以及图2:期望的行为。 是否有任何现有的算法可以帮助我或使用任何库?提前感谢:) 在这里找到我的解决方案: 输出: 它似乎工作正常,我将使用Path对象进行测试以替换多边形objets。