python:如何使用相同颜色但不同的不透明度的多边形生成json文件

时间:2015-06-20 11:14:59

标签: python json plot geojson

我正在使用python生成一个包含大量多边形的json文件,并为每个多边形分配一个值,如下所示:

[{'cell':{'type':'Polygon', 'coordinates':[[[121,47],[122,48],[122,47],[121,47]]]}, 'value':2.45},
 {'cell':{'type':'Polygon', 'coordinates':[[[120,48],[123,48.5],[122,48],[120,48]]]}, 'value':1.45},
 ...]

我想在geojson.io上绘制这些多边形,并且每个单元格都是红色。但每个多边形的不透明度取决于值,值越高,越不透明;值越小,不透明度越低。

我认为我应该首先对所有值进行标准化,然后我需要使用

Feature(properties={'fill':'#ff0000', 'opacity':normalized_value})

但我认为这有点复杂。我可以只使用属性中每个单元格的原始值,并且会自动调整不透明度吗?

1 个答案:

答案 0 :(得分:0)

所以我去了geojson.io。我得到了:

{
    "type": "Feature",
    "properties": {
        "stroke": "#555555",
        "stroke-width": 2,
        "stroke-opacity": 1,
        "fill-opacity": 0.67,
        "fill": "#ff0000"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": []
    }
}

我现在忽略了坐标,因为它们占用了太多的空间。 首先让我们创建一个返回dict的小类。必须具有的设置,颜色和不透明度。

class Polygon:

    def __init__(self, opacity, coordinates):
        self.opacity = opacity
        self.fill = "#ff0000"

        c=coordinates
        coordinates = [[
            c[0],
            c[1],
            c[2],
            c[3],
            c[0]
        ]]
        self.coordinates = coordinates

    def json(self):
        return {
            "type": "Feature",
            "properties": {
                "fill-opacity": self.opacity,
                "fill": self.fill
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": self.coordinates
            }
        }

features = [Polygon(random.random(), rand_coords()) for i in range(10)]
print(json.dumps({
    "type": "FeatureCollection",
    "features": [i.json() for i in features]
}))

如果您希望能够使用您拥有的单元格格式。你可以这样做。

cell_list = [
    {'cell':{'type':'Polygon', 
    'coordinates':[[[121,47],[122,48],[122,47],[121,47]]]}, 'value':2.45},
    {'cell':{'type':'Polygon',
    'coordinates':[[[120,48],[123,48.5],[122,48],[120,48]]]}, 'value':1.45}
]

#get a list of polygons.
features = [
    Polygon(cell['value'], cell['cell']['coordinates'][0]) for cell in cell_list
]

#largest value
max_opacity = max(feature.opacity for feature in features)

#normalise
for feature in features:
    feature.opacity /= max_opacity

#get the compatible json data
 print(json.dumps({
    "type": "FeatureCollection",
    "features": [i.json() for i in features]
}, sort_keys=True, indent=4, separators=(',', ': ')))

这不是最好的工作系统。当我执行它并复制输出时,我得到了位于中国右上角的三角形...... 然而,三角形不透明度是不同的。

我没有对形状做任何事情,因为没有问过。但是我可以将输入更改为有效输出。全红色,相对不透明。

您可以检查它是否正常here。但是,将鼠标悬停在形状上以查看设置是什么。我的颜色设置为'#ff0000'。