You can pick the starting locations in the map script
Fall from Heaven 2 does this in the Erebus.py map script that comes with it via the already mentioned assignStartingPlots function in its StartingPlotFinder class. It works by including data for what each civilization prefers for various factors (moisture, altitude, distance from other civs, need coastal, can start on forest).
I expanded the system some in a new version of that map script that comes with the latest patch for Rocks 2 Rockets, R2R_Erebus_1_09R.py (which also tweaks the map generation some).My new version adds a "region type" to the civ preference data (since the Erebus map is broken up into regions) which adds preferences for what types of terrain are in the region, preferred min and max number of plots in the locations BFC for terrain types and features, preferences for minimum number of hill plots, and min and max number of peak plots, and whether or nor the location must be on a hill. (Although I have not yet actually gotten around to adding the list of what things the various civs in R2R actually want in their vicinity...)
So you cold use the regular Erebus map script or my modified version as an example of how to modify other map scripts to get some placement checking done for a variety of requirements. You probably can't use it directly (without tweaking) since it places the wider range of terrains used by R2R, which has more than most mods.