I have up until now generated individual houses placed in a random location within a larger polygon, just like forests and other natural features. Settlements are not natural and they follow some simple heuristics for placing buildings.
In my implementation I have assumed that settlements are represented by a rectangle with a regular size of building plot – a simple grid.
Buildings will be placed within that grid based on their proximity to a road. I use a simple algorithm to generate axis aligned roads like this;
This shows a simple 12×12 grid with orthogonal roads (brown). A simple algorithm that places houses next to roads 50% of the time, rising to 80% of the time if there is a house already adjacent seems to give good results. Buildings are shown in black here.
This gives reasonable results when repeated, even with very large and very small grids. This gives a classic “ribbon development” pattern with no settlement nucleation around a natural centre point.