我正在使用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})
但我认为这有点复杂。我可以只使用属性中每个单元格的原始值,并且会自动调整不透明度吗?
答案 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'。