It will probably have several stages, starting with the basic building data storing the footprint shapes and heights. This will be used to render lots of buildings in distance in the most efficient way, a LOD zero. Then there will be a component that instantiates buildings when you get closer, trying to find the best fit for given shape from the provided object collection.
A separate path would be a procedural building generator doing the same - taking the shape data and type hints and rendering a procedurally fitting representation, that can go further than the models - adding more detail as needed, possibly including interiors etc.