Just wanted to add I tested editing the assembly to change both the limitchecker()'s and the constants for NetManager, ZoneManager, and BuildingManager to 64k (and lanes to 512k). Running with the patched assembly without other mods (actually I've have a few minor ones running) I've yet to have any problems, your mileage may vary depending on your system and mod choices.
I actually was able to finish up adding a couple thousand more road segments and then play the OP's map. I'm also in the process of exceeding the zone\building manager limits on another custom 25x map, so far without issue though I've only pushed the limits just north of 42k to date. BTW OP's map design while very pretty and symmetric isn't the best for traffic, not without some changes, but thankfully that was possible once I jacked up the limits. lol
In case someone is thinking of asking hey can you post the patched version... no I will not pass around the modified assembly, not only is that bad joojoo legally, but upon the next update it wouldn't work anyway. So it's best for someone to know how to just do this themselves as it'll need to be repeated after every update. The basic instructions for doing it are below, it's not rocket science, or complicated and only requires some basic knowledge upon the reader:
1. Install Telerik's JustDecompile (free). (JDC)
2. Install the ReflexIL plugin for it (free).
3. [optional]Copy the managed game dlls from your game folder (CitesData\Managed) to a staging area (we'll call this c:\stage\CSL)
4. In JDC open the Assembly-CSharp.dll from the staging area.
5. Navigate down the class tree to NetManager and expand it exposing the code in the right.
6. Activate the Reflexil plugin (top menu: Plugins\Reflixil), you'll get an added section on the right splitting the code view.
7. At the top of NetManager class code find MAX_NODE_COUNT, MAX_SEGMENT_COUNT, and MAX_LANE_COUNT
8. Click on each of those mentioned in step 7, and in the Reflixil window for each change the value from 32768 to 64000, you may have to hit enter, or after changing just click on another area of dialog like const.type just to make sure the new value takes (test that it takes by clicking on something else and then back making sure it still reads 64k). For the Lane Count I used 512000, probably should be slightly higher but unless you really plan on hitting the new limits it should be fine.
9. Now in the same class scroll down and find the CheckLimits() function, click on it, Reflexil window will update showing you the MSIL code for the function.
10. Inside the reflexil dialog scroll down and find the two instances of 32256 and change them to 64000, find the 258048 figure and change it to 512000, you change each by selecting the line and right clicking selecting edit, making the change in the change dialog and pressing update.
11. Do the same for the Awake() function for m_nodes and m_segments, m_lanes.
12. When you've made all the changes you want navigate back up the class tree on the left and select the assembly root node, right click, select the Reflexil sub menu and select Save As.., select a name to save the modified dll as, Assembly-CSharp.patched.dll will be fine our example.
13. Now we're basically done, goto your game folder in steam (you know where you copied things from in #3) rename Assembly-CSharp.dll to Assembly-CSharp_Original.dll. Copy your patched version into that folder and remove .patched from your patched dll file name so it's got the original name.
14. Fire up CSL and enjoy your new limits.
Suggestion - Backup your newly patched dll incase you verifty your steam cache or something else happens where your modified version get's overwritten.
Note 1: This example was for road limits, if you want to screw with Zoneable blocks you can do the same as the above only the values are in the ZoneManger class, if you want to change the building limits it's in the BuildingManager class, if you want more then 256 transport lines (really??).... it's in the TransportManager(65k max), if 127 districts are not enough for you (really?) then DistrictManager (256max cause Array8 type). I suggest making all your changes at once instead of loading up your patched dll version over and over and re-saving. If your wondering why I used 64000 and not the real ushort limit of 65536, well first it's cause I don't think I'm going to exceed that amount, and second I noticed in a couple places CO actually limits the player to a number about 512 less than what the type allows so figured keep it roughly the same reserving a small amount for margin of safety.
Note 2: To restore the original, exit the game, rename your dll back to .patched (or just delete it) and rename your *_Original.dll back to the original name.
Note 3: I've avoided using any mods (serious game changing ones) with this unlimited version that I know use modified versions of the aforementioned classes, maybe some work, maybe some don't I just haven't bothered to look into it much for now as I wanted to test pushing the limits with a mostly vanilla game. Though if some do replace the original class wholesale you could always repeat the above on their versions.
Note 4: This may or may not break some other stuff in the game or melt your computer while playing the game ..etc..etc.. do at your own risk etc..etc disclaimer.
But i've yet to see any issues so far in limited testing, but I expect some performance overhead issues if I ever do start getting close to the new limits, particularly for someone who is ram limited or on a slower cpu system.
Think of it this way, the game used to have to keep track of ~32k items in each of the said categories, and it probably looped through those 32k item arrays when doing look-ups or other such updates and checks that happen every second or so (less or more depending). It's now gotta do that with 64k item arrays so in theory it's going to take twice as long (at least), what that effect is going to be long term I don't know, so far I've not noticed a difference, the only difference I have noticed is more memory use (and file size), which of course is going to happen since we're now allowing it to store more data, but again I've only tried things to around the 41k mark.
Note 5: Hey can I edit the CitizenManager the same way to increase the 1048576 citizen pop limit? Yes, you certainly could, same for Unit_Count, I have not though. On that note don't screw with the Instance_Count (number of actively simulated\animated items) it's already at it's 65k type max, unless you want to change it's type to Array32 and any related\associated plumbing and references that were expecting ushort's as well, which is beyond the scope of this little tweaking how-to.