建物の描画の描画は難しいものではない。 しかし、OSM地図の地物としては全体の過半数を占める。それゆえ、描画に要する時間が気にかかる。
建物の描画プログラムを示す。建物は線路の上や高架の下にあったりする。 他の地物との上下関係をコントロールするのが layer である。詳細は、別のページとする。
public class RenderBuilding extends SuperRenderer { static Paint paintBuilding = getPaintFill(colorBuildingYes); static Paint paintRoof = getPaintFill(colorBuildingRoof); static Paint paintWater = getPaintFill(colorWater); void render(Canvas cv, TileToRender tile, OSM[] osms, int fromIndex, int toIndex, int layer) { for (int n = fromIndex; n < toIndex; n++) { OSM osm = osms[n]; if (osm.type < 2 || (osm.tag_flags & bitBuilding) == 0 || osm.layer != layer) { continue; } Tag.Val building = osm.getVal(Tag.Key.building); if (building == Tag.Val.roof) { osm.fillPolygon(cv, tile, paintRoof); } else if (building != Tag.Val.no) { osm.fillPolygon(cv, tile, paintBuilding); } } for (int n = fromIndex; n < toIndex; n++) { OSM osm = osms[n]; if (osm.type < 2 || (osm.tag_flags & bitLeisure) == 0) { continue; } if (osm.getVal(Tag.Key.leisure) == Tag.Val.swimming_pool && osm.layer == layer) { osm.fillPolygon(cv, tile, paintWater); } } } }
この段階での画面当たりのレンダリング&描画時間を下に示す。
建物の描画は zoom 13、14以上である。この範囲の描画時間の増加は 10%程度である。
ズーム 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 平均 郊 外 238 214 137 258 171 128 78 117 69 79 58 58 50 58 51 118ms 東 京 223 225 173 213 172 91 62 123 104 88 59 53 68 62 50 118ms