@a2f0/skyline 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/NOTICE.md +20 -0
  2. package/README.md +52 -2
  3. package/docs/package.md +222 -0
  4. package/docs/skyline-geography.md +503 -0
  5. package/lib/models/aon-center.d.ts +4 -0
  6. package/lib/models/aon-center.js +60 -0
  7. package/lib/models/aon-geographic.d.ts +9 -0
  8. package/lib/models/aon-geographic.js +35 -0
  9. package/lib/models/aon-tower.d.ts +23 -0
  10. package/lib/models/aon-tower.js +130 -0
  11. package/lib/models/blue-cross-geographic.d.ts +14 -0
  12. package/lib/models/blue-cross-geographic.js +248 -0
  13. package/lib/models/borg-warner-geographic.d.ts +20 -0
  14. package/lib/models/borg-warner-geographic.js +143 -0
  15. package/lib/models/buckingham-geographic.d.ts +10 -0
  16. package/lib/models/buckingham-geographic.js +121 -0
  17. package/lib/models/building-kit.d.ts +84 -0
  18. package/lib/models/building-kit.js +358 -0
  19. package/lib/models/celebrations.d.ts +39 -0
  20. package/lib/models/celebrations.js +44 -0
  21. package/lib/models/chicago-athletic-association-geographic.d.ts +32 -0
  22. package/lib/models/chicago-athletic-association-geographic.js +173 -0
  23. package/lib/models/crain-communications.d.ts +5 -0
  24. package/lib/models/crain-communications.js +75 -0
  25. package/lib/models/crain-geographic.d.ts +10 -0
  26. package/lib/models/crain-geographic.js +69 -0
  27. package/lib/models/crain-tower.d.ts +32 -0
  28. package/lib/models/crain-tower.js +378 -0
  29. package/lib/models/facade-grid.d.ts +18 -0
  30. package/lib/models/facade-grid.js +176 -0
  31. package/lib/models/gage-geographic.d.ts +19 -0
  32. package/lib/models/gage-geographic.js +154 -0
  33. package/lib/models/heritage-at-millennium-park.d.ts +3 -0
  34. package/lib/models/heritage-at-millennium-park.js +284 -0
  35. package/lib/models/heritage-geographic.d.ts +11 -0
  36. package/lib/models/heritage-geographic.js +208 -0
  37. package/lib/models/hyatt-west-tower-geographic.d.ts +26 -0
  38. package/lib/models/hyatt-west-tower-geographic.js +86 -0
  39. package/lib/models/keith-ascher-geographic.d.ts +29 -0
  40. package/lib/models/keith-ascher-geographic.js +110 -0
  41. package/lib/models/kemper-geographic.d.ts +8 -0
  42. package/lib/models/kemper-geographic.js +153 -0
  43. package/lib/models/kemper.d.ts +2 -0
  44. package/lib/models/kemper.js +78 -0
  45. package/lib/models/lake-view-geographic.d.ts +15 -0
  46. package/lib/models/lake-view-geographic.js +134 -0
  47. package/lib/models/maclean-center-geographic.d.ts +20 -0
  48. package/lib/models/maclean-center-geographic.js +162 -0
  49. package/lib/models/michigan-boulevard-geographic.d.ts +12 -0
  50. package/lib/models/michigan-boulevard-geographic.js +157 -0
  51. package/lib/models/michigan-plaza-south-geographic.d.ts +7 -0
  52. package/lib/models/michigan-plaza-south-geographic.js +84 -0
  53. package/lib/models/michigan-plaza-south.d.ts +2 -0
  54. package/lib/models/michigan-plaza-south.js +68 -0
  55. package/lib/models/millennium-park-plaza-geographic.d.ts +9 -0
  56. package/lib/models/millennium-park-plaza-geographic.js +103 -0
  57. package/lib/models/monroe-geographic.d.ts +19 -0
  58. package/lib/models/monroe-geographic.js +177 -0
  59. package/lib/models/north-michigan-180-geographic.d.ts +14 -0
  60. package/lib/models/north-michigan-180-geographic.js +117 -0
  61. package/lib/models/north-wabash-geographic.d.ts +14 -0
  62. package/lib/models/north-wabash-geographic.js +122 -0
  63. package/lib/models/on-the-park-geographic.d.ts +11 -0
  64. package/lib/models/on-the-park-geographic.js +245 -0
  65. package/lib/models/one-prudential-geographic.d.ts +12 -0
  66. package/lib/models/one-prudential-geographic.js +55 -0
  67. package/lib/models/one-prudential-plaza.d.ts +5 -0
  68. package/lib/models/one-prudential-plaza.js +72 -0
  69. package/lib/models/one-prudential-tower.d.ts +45 -0
  70. package/lib/models/one-prudential-tower.js +246 -0
  71. package/lib/models/peoples-gas-geographic.d.ts +23 -0
  72. package/lib/models/peoples-gas-geographic.js +250 -0
  73. package/lib/models/railway-exchange-geographic.d.ts +18 -0
  74. package/lib/models/railway-exchange-geographic.js +176 -0
  75. package/lib/models/river-plaza-geographic.d.ts +16 -0
  76. package/lib/models/river-plaza-geographic.js +104 -0
  77. package/lib/models/sheraton-grand-geographic.d.ts +24 -0
  78. package/lib/models/sheraton-grand-geographic.js +112 -0
  79. package/lib/models/six-north-michigan-geographic.d.ts +16 -0
  80. package/lib/models/six-north-michigan-geographic.js +180 -0
  81. package/lib/models/skyline-geography-data.d.ts +44 -0
  82. package/lib/models/skyline-geography-data.js +607 -0
  83. package/lib/models/skyline-geography.d.ts +23 -0
  84. package/lib/models/skyline-geography.js +322 -0
  85. package/lib/models/swissotel-geographic.d.ts +24 -0
  86. package/lib/models/swissotel-geographic.js +79 -0
  87. package/lib/models/three-illinois-center-geographic.d.ts +26 -0
  88. package/lib/models/three-illinois-center-geographic.js +86 -0
  89. package/lib/models/trump-geographic.d.ts +14 -0
  90. package/lib/models/trump-geographic.js +51 -0
  91. package/lib/models/trump-international-tower.d.ts +4 -0
  92. package/lib/models/trump-international-tower.js +84 -0
  93. package/lib/models/trump-tower.d.ts +43 -0
  94. package/lib/models/trump-tower.js +229 -0
  95. package/lib/models/two-illinois-center-geographic.d.ts +26 -0
  96. package/lib/models/two-illinois-center-geographic.js +85 -0
  97. package/lib/models/two-prudential-geographic.d.ts +25 -0
  98. package/lib/models/two-prudential-geographic.js +47 -0
  99. package/lib/models/two-prudential-plaza.d.ts +8 -0
  100. package/lib/models/two-prudential-plaza.js +55 -0
  101. package/lib/models/two-prudential-tower.d.ts +53 -0
  102. package/lib/models/two-prudential-tower.js +441 -0
  103. package/lib/models/university-club-geographic.d.ts +24 -0
  104. package/lib/models/university-club-geographic.js +217 -0
  105. package/lib/models/willoughby-tower-geographic.d.ts +17 -0
  106. package/lib/models/willoughby-tower-geographic.js +195 -0
  107. package/lib/models/window-illumination.d.ts +14 -0
  108. package/lib/models/window-illumination.js +64 -0
  109. package/lib/package-assets.d.ts +5 -0
  110. package/lib/package-assets.js +9 -0
  111. package/lib/skyline-package.d.ts +23 -0
  112. package/lib/skyline-package.js +25 -0
  113. package/lib/skyline-scene.d.ts +25 -0
  114. package/lib/skyline-scene.js +86 -0
  115. package/lib/study-types.d.ts +49 -0
  116. package/lib/study-types.js +1 -0
  117. package/lib/vendor/three-r186.d.ts +1 -0
  118. package/lib/vendor/three-r186.js +1 -0
  119. package/package.json +64 -4
  120. package/site/building-detail.html +54 -0
  121. package/site/building-detail.js +84 -0
  122. package/site/building-study.html +58 -0
  123. package/site/building-study.js +3 -0
  124. package/site/index.html +407 -0
  125. package/site/models/aon-center.js +60 -0
  126. package/site/models/aon-geographic.js +35 -0
  127. package/site/models/aon-tower.js +130 -0
  128. package/site/models/blue-cross-geographic.js +248 -0
  129. package/site/models/borg-warner-geographic.js +143 -0
  130. package/site/models/buckingham-geographic.js +121 -0
  131. package/site/models/building-kit.js +358 -0
  132. package/site/models/celebrations.js +44 -0
  133. package/site/models/chicago-athletic-association-geographic.js +173 -0
  134. package/site/models/crain-communications.js +75 -0
  135. package/site/models/crain-geographic.js +69 -0
  136. package/site/models/crain-reference.svg +10 -0
  137. package/site/models/crain-tower.js +378 -0
  138. package/site/models/facade-grid.js +176 -0
  139. package/site/models/gage-geographic.js +154 -0
  140. package/site/models/heritage-at-millennium-park.js +284 -0
  141. package/site/models/heritage-geographic.js +208 -0
  142. package/site/models/hyatt-west-tower-geographic.js +86 -0
  143. package/site/models/keith-ascher-geographic.js +110 -0
  144. package/site/models/kemper-geographic.js +153 -0
  145. package/site/models/kemper.js +78 -0
  146. package/site/models/lake-view-geographic.js +134 -0
  147. package/site/models/maclean-center-geographic.js +162 -0
  148. package/site/models/michigan-boulevard-geographic.js +157 -0
  149. package/site/models/michigan-plaza-south-geographic.js +84 -0
  150. package/site/models/michigan-plaza-south.js +68 -0
  151. package/site/models/millennium-park-plaza-geographic.js +103 -0
  152. package/site/models/monroe-geographic.js +177 -0
  153. package/site/models/north-michigan-180-geographic.js +117 -0
  154. package/site/models/north-wabash-geographic.js +122 -0
  155. package/site/models/on-the-park-geographic.js +245 -0
  156. package/site/models/one-prudential-geographic.js +55 -0
  157. package/site/models/one-prudential-plaza.js +72 -0
  158. package/site/models/one-prudential-tower.js +246 -0
  159. package/site/models/peoples-gas-geographic.js +250 -0
  160. package/site/models/railway-exchange-geographic.js +176 -0
  161. package/site/models/river-plaza-geographic.js +104 -0
  162. package/site/models/sheraton-grand-geographic.js +112 -0
  163. package/site/models/six-north-michigan-geographic.js +180 -0
  164. package/site/models/skyline-geography-data.js +607 -0
  165. package/site/models/skyline-geography.js +322 -0
  166. package/site/models/skyline-panorama.svg +3491 -0
  167. package/site/models/skyline-reference.svg +3090 -0
  168. package/site/models/swissotel-geographic.js +79 -0
  169. package/site/models/three-illinois-center-geographic.js +86 -0
  170. package/site/models/trump-geographic.js +51 -0
  171. package/site/models/trump-international-tower.js +84 -0
  172. package/site/models/trump-tower.js +229 -0
  173. package/site/models/two-illinois-center-geographic.js +85 -0
  174. package/site/models/two-prudential-geographic.js +47 -0
  175. package/site/models/two-prudential-plaza.js +55 -0
  176. package/site/models/two-prudential-tower.js +441 -0
  177. package/site/models/university-club-geographic.js +217 -0
  178. package/site/models/willoughby-tower-geographic.js +195 -0
  179. package/site/models/window-illumination.js +64 -0
  180. package/site/skyline-3d.html +92 -0
  181. package/site/skyline-3d.js +333 -0
  182. package/site/skyline-animated.svg +18795 -0
  183. package/site/skyline-comparison.js +97 -0
  184. package/site/skyline-original-fit.svg +18312 -0
  185. package/site/skyline-scene.js +86 -0
  186. package/site/skyline-study.html +83 -0
  187. package/site/skyline-study.js +109 -0
  188. package/site/skyline-webgl.html +667 -0
  189. package/site/stars.svg +176 -0
  190. package/site/study-loader.js +20 -0
  191. package/site/study-types.js +1 -0
  192. package/site/study-viewer.js +605 -0
  193. package/site/study.css +204 -0
  194. package/site/vendor/THREE-LICENSE.txt +21 -0
  195. package/site/vendor/three-r186.js +4228 -0
@@ -0,0 +1,503 @@
1
+ # Geographic skyline comparison
2
+
3
+ `skyline-study.html` has two layouts: the original drawing fit and a geographic
4
+ study of the same eight buildings, plus 330 North Wabash, the Blue Cross and Blue
5
+ Shield Tower, 340 on the Park, The Buckingham, Millennium Park Plaza, Willoughby Tower,
6
+ Six North Michigan, the Michigan Boulevard Building, 180 North Michigan Avenue, the
7
+ University Club of Chicago, the Monroe Building, the MacLean Center, the Lake View
8
+ Building, the Peoples Gas Building, the Borg-Warner Building, the Railway Exchange
9
+ Building, the Gage Building, the Edson Keith and Theodore Ascher Buildings, the Chicago
10
+ Athletic Association, Two Illinois Center, River Plaza, the Hyatt Regency Chicago West
11
+ Tower, the Sheraton Grand Chicago Riverwalk, Three Illinois Center, and Swissôtel Chicago,
12
+ which only the geographic layout maps. The page
13
+ opens on the geographic layout; `?layout=original` opens it on the drawing fit, as the
14
+ browser suites and the dev scripts do. Every geographic building carries a detailed facade
15
+ reconstruction on its mapped outlines. The original factories,
16
+ placement and camera remain intact.
17
+
18
+ Ground plan and height comparison use an orthographic camera. Their shared frame, 1,050 m
19
+ east–west by 1,520 m north–south, is set in ground plan. There it holds the original
20
+ layout's platform and every mapped footprint, with about 50 m east and west where a
21
+ portrait phone's width binds it. North and south it runs from about 100 m past River Plaza,
22
+ across the river, to 127 m past the Railway Exchange at Jackson. The geography
23
+ suite checks that each footprint and its label stay inside the plan at desktop and phone
24
+ sizes. Height comparison sees the same
25
+ frame at an angle, and on a portrait phone it can clip the platform's south-west corner.
26
+ A building added farther out needs the frame moved or widened. Switching layouts
27
+ in those views preserves the camera position, target and zoom, including after an
28
+ orbit. The geographic scene is translated to align Crain's mapped footprint
29
+ bounding-box center with the original Crain model's center. This is a comparison
30
+ registration, not a claim that the original drawing is georeferenced. Other
31
+ buildings keep their measured positions relative to Crain. Switching layouts
32
+ from the skyline view, or from a perspective orbit, opens the other layout's
33
+ skyline view, and Reset restores each layout's skyline view.
34
+
35
+ ## Skyline camera
36
+
37
+ The drawing traces a panorama photographed across the harbor from the lakefront.
38
+ The geographic skyline view recovers that photograph's camera rather than
39
+ reusing the original layout's fitted one, which describes the drawing's own
40
+ geometry, not a place. The mapped buildings stay where they are mapped; only
41
+ the camera is fitted.
42
+
43
+ `scripts/fit-geographic-camera.ts` solves the study's orbit camera, aimed at the
44
+ centre of the reference excerpt's frame, against the 26 correspondences in
45
+ `geographicLandmarks` in `tests/skyline-landmarks.ts`. These pair mapped spire
46
+ tips, eaves, roof corners, and Crain's peaks, shoulders, foot and step with
47
+ their drawn points. The eye's height is held at 2 m above the street datum. The
48
+ drawing barely constrains it: a camera hovering about 100 m over the harbor on a
49
+ shorter lens fits the traced heights slightly better, but the photograph was
50
+ taken from the shore. Its ground position is held too, with `--eye`, for the same
51
+ reason: the drawing trades the eye's distance against the lens, and left free the
52
+ eye drifts about 70 m off the walk into the harbor for less than half a layer
53
+ unit. It stands 1472 m east and 1949 m south of Crain, 2.44 km away on the
54
+ lakefront walk about 110 m north of the Adler Planetarium's centre, where an
55
+ earlier free solve put it. The camera's azimuth is 36.12° and it looks up 4.02°,
56
+ with the frame spanning a 10.53° vertical field of view.
57
+
58
+ The fit's RMS error is 30 layer units, about 0.7% of the frame's 4430-unit
59
+ width. Horizontal errors stay within 49 units; the worst landmark, Kemper's west
60
+ roof corner, lies 62 units off.
61
+
62
+ Three sets of landmarks follow the photograph rather than a published or mapped
63
+ figure, and one follows the photograph in naming a different building:
64
+
65
+ - **One Prudential.** Its roof corners stand at the photographed 169.5 m, and its
66
+ tubular mast's top at 259.4 m, where the drawing stops the mast. The slim WGN antenna
67
+ above it, to the 278 m tip, is lost against Trump Tower in the photograph.
68
+ - **Trump.** Its spire's tip stands where the photograph shows it, 4 m west of the mapped
69
+ spire part.
70
+ - **Two Prudential.** Its eaves are the photographed core's corners, at 229.3 m and 8 to
71
+ 10 m inside the mapped north and south walls, and its pyramid's apex stands at the
72
+ photographed 280.2 m; see the [Two Prudential reference audit](two-prudential-reference.md).
73
+ The mapped outline's corners at an inferred 240 m eave had been the fit's worst
74
+ landmarks, drawn about 100 units low.
75
+ - **330 North Wabash.** The tower the drawing labels Michigan Plaza South is 330 North
76
+ Wabash. Its mapped roof corners land on the drawn ones, and One Prudential covers its
77
+ east face where the drawing does. The mapped Michigan Plaza South stands 790–930 units
78
+ right of the drawn tower, behind One Prudential; see the
79
+ [330 North Wabash audit](north-wabash-reference.md).
80
+
81
+ With those in place of the published 183.2 m penthouse top, the 278 m tip, the mapped
82
+ spire, and Two Prudential's outline at its inferred eave and 277 m peak, and with 330 North
83
+ Wabash's roof added, the RMS fell from 67 units to 30. The eye moved about 150 m
84
+ north-west, from 45 m off the planetarium's centre to the walk.
85
+
86
+ The view frames the panorama, `src/models/skyline-panorama.svg`: every building the
87
+ drawing shows, from the Railway Exchange Building on the left to the towers
88
+ around The Buckingham on the right. Its frame is the reference excerpt's,
89
+ widened about the same centre to x −1400 to 7978.5 in layer units, 2.65 times
90
+ as wide as it is tall. The camera's eye, aim and lens are the excerpt's, so
91
+ every landmark lands where it did; only the frame's width changes. The page
92
+ stacks the scene over the drawing, each the page's full width and the viewport's
93
+ height, so both contain their frame at the same scale. The drawing switches to
94
+ the panorama with the geographic layout and back to the excerpt with the
95
+ original one.
96
+
97
+ The skyline viewer's full-screen 3D mode, `skyline-3d.html`, uses the same eye,
98
+ aim and pivot with a different frame: `skyline-animated.svg`'s viewBox, which is
99
+ x −1105.59 to 7395.51 and y 87.26 to 2869.30 in layer units once its
100
+ `skyline-position` translate is undone. It holds that frame centred and on the
101
+ canvas's bottom edge, as the viewer holds the SVG on the window's, through a lens
102
+ shift off the panorama's centre, so the mapped buildings stand on their drawn
103
+ places in the viewer too. The canvas ends at the page's docked control bar, so
104
+ the frame stands on the bar. While the canvas is at most 8501 / 2782 as wide as
105
+ it is tall, its width binds the frame, as the window's then binds the drawing's,
106
+ and the frame sits the bar's height above the drawing's. A wider canvas binds
107
+ the frame on its height, which the bar shortens, so the frame is also a little
108
+ smaller than the drawing's.
109
+ `tests/skyline-3d.test.ts` checks the same landmarks there.
110
+
111
+ The view keeps its eye fixed at every viewport. Its field of view, not its
112
+ distance, changes to contain the frame, so each mapped point lands on the same
113
+ drawn spot at every layout. Other perspective views keep the study's 6° lens.
114
+ `tests/skyline-geography.test.ts` checks that each landmark lies on its mapped
115
+ model, and the eye's position. It also checks each landmark's error, the RMS,
116
+ and that the placement is identical across the skyline test's five layouts and
117
+ a wider sixth, 1600×700, whose canvas fits the frame to its height.
118
+
119
+ ## Coordinates and footprints
120
+
121
+ `src/models/skyline-geography-data.ts` contains a local extract of
122
+ [OpenStreetMap](https://www.openstreetmap.org/copyright), retrieved September 17,
123
+ 2026 through the [map API](https://api.openstreetmap.org/api/0.6/map?bbox=-87.628,41.882,-87.620,41.891).
124
+ 330 North Wabash's outline was added on September 27, 2026, from a
125
+ [wider request](https://api.openstreetmap.org/api/0.6/map?bbox=-87.6300,41.8820,-87.6180,41.8920),
126
+ and the Blue Cross and Blue Shield Tower's outline and parts on September 28, 2026,
127
+ from [another](https://api.openstreetmap.org/api/0.6/map?bbox=-87.6212,41.8845,-87.6180,41.8862),
128
+ as were 340 on the Park's and The Buckingham's from [a third](https://api.openstreetmap.org/api/0.6/map?bbox=-87.6198,41.8842,-87.6168,41.8862),
129
+ and Millennium Park Plaza's, Willoughby Tower's, Six North Michigan's, the Michigan Boulevard Building's, 180 North Michigan Avenue's, the University Club's, the Monroe Building's, the MacLean Center's, the Lake View Building's, the Peoples Gas Building's, the Borg-Warner Building's and the Railway Exchange Building's from [a fourth](https://api.openstreetmap.org/api/0.6/map?bbox=-87.6320,41.8760,-87.6150,41.8920).
130
+ The Gage, Edson Keith and Theodore Ascher Buildings' outlines, the Chicago Athletic
131
+ Association's, Two Illinois Center's, River Plaza's with its parts, and the Hyatt Regency West
132
+ Tower's part were added on September 29, 2026, from the same request, and the Sheraton Grand
133
+ Chicago Riverwalk's tower and corner parts the same day, from
134
+ [a fifth](https://api.openstreetmap.org/api/0.6/map?bbox=-87.6250,41.8860,-87.6050,41.8980),
135
+ and Three Illinois Center's outline and the Swissôtel's tower part the same day, from the
136
+ fourth.
137
+ It includes the selected building outlines and parts. The streets come from a separate
138
+ extract retrieved on September 30, 2026 through the
139
+ [Overpass API](https://overpass-api.de/api/interpreter?data=%5Bout%3Ajson%5D%3Bway%5B%22highway%22%5D%2841.8765%2C-87.6310%2C41.8916%2C-87.6158%29%3Bout%20meta%20geom%3B),
140
+ every `highway` way over the full-screen 3D skyline's platform: the roads and their links,
141
+ and the named service ways other than driveways and parking aisles, on the upper or surface
142
+ level, leaving out tunnels, negative layers and ways named Lower. Each keeps its class, lane
143
+ count and direction and only the nodes that reach the platform. The 3D skyline draws each
144
+ as a roadway 3.3 m to a lane about its centreline, with the class's usual lanes where none
145
+ are mapped (a named service way is one 5 m lane), cut at the platform's edges; divided
146
+ avenues such as Michigan are two one-way ways, so they show as two carriageways. These are
147
+ lane widths, not surveyed curbs. The skyline study draws the same ways as centerlines inside
148
+ its 100 m grid. Each record retains its OSM way ID, version and WGS84
149
+ longitude/latitude vertices. The source XML also includes ways crossing the
150
+ request bounds. Only selected features are retained; contact and unrelated tags
151
+ are excluded. The extract is © OpenStreetMap contributors, under the
152
+ [Open Database License](https://opendatacommons.org/licenses/odbl/1-0/).
153
+
154
+ Coordinates are projected to a local tangent plane centered at
155
+ **41.88482645° N, 87.62497155° W**, the center of Crain's mapped bounding box.
156
+ `projectGround` uses WGS84's prime-vertical and meridional radii at that latitude;
157
+ longitude deltas include the cosine-of-latitude factor. Public coordinates are
158
+ east/north meters. Three.js positions are east/up/south, so ground north becomes
159
+ negative z. Over this approximately 1 km area, linearization is sub-meter; map
160
+ tracing and the interpretation of podium boundaries dominate the uncertainty.
161
+ Street elevation and terrain are not modeled: all buildings share a zero datum.
162
+
163
+ The comparison table reports bounding extents along east and north, **not** the
164
+ lengths of rotated facades. Geographic dimensions include the mapped ground
165
+ outline and podium. Original ground extents come from vertices at ground level,
166
+ after each model's original rotation and scaling. Coordinates represent the
167
+ mapped outline's bounding-box center, which need not coincide with the center
168
+ of its tower. The cyan ground outlines show that distinction.
169
+
170
+ | Building | Ground outline | Main tower/parts |
171
+ | --- | --- | --- |
172
+ | Heritage | [147397547](https://www.openstreetmap.org/way/147397547) | 686199648, 686199649, 686199650 |
173
+ | Kemper | [64389514](https://www.openstreetmap.org/way/64389514) | 685494066, 685494067 |
174
+ | Crain | [210671717](https://www.openstreetmap.org/way/210671717) | 284816227, 284816228, 284816229 |
175
+ | Michigan Plaza South | [127107024](https://www.openstreetmap.org/way/127107024) | Outline with detailed grid |
176
+ | 330 North Wabash | [64596068](https://www.openstreetmap.org/way/64596068) | Outline with detailed curtain wall; not in the original layout |
177
+ | Trump | [64594680](https://www.openstreetmap.org/way/64594680) | Podium plus 188338549, 188338550, 188338548, 188338859, 188356529, 284773992, 284773991 |
178
+ | One Prudential | [127107034](https://www.openstreetmap.org/way/127107034) | 685493609, 685493610, 685493612, 685493614 |
179
+ | Two Prudential | [64388666](https://www.openstreetmap.org/way/64388666) | Outline, with the core, tiers and crown from the photograph |
180
+ | Aon | [64388609](https://www.openstreetmap.org/way/64388609) | Shaft plus rooftop part 284775635 and inferred antenna |
181
+ | Blue Cross | [95486960](https://www.openstreetmap.org/way/95486960) | 284779637, 284779635; not in the original layout |
182
+ | 340 on the Park | [95486949](https://www.openstreetmap.org/way/95486949) | 284789056, 284789058; not in the original layout |
183
+ | The Buckingham | [95486940](https://www.openstreetmap.org/way/95486940) | Outline plus rooftop part 284790189; not in the original layout |
184
+ | Millennium Park Plaza | [127107026](https://www.openstreetmap.org/way/127107026) | Outline with detailed walls; not in the original layout |
185
+ | Willoughby Tower | [124873939](https://www.openstreetmap.org/way/124873939) | Outline, with the shaft, shoulder and crown from the drawing and photographs; not in the original layout |
186
+ | Six North Michigan | [126982631](https://www.openstreetmap.org/way/126982631) | Outline, with the tower and levels from the drawing; not in the original layout |
187
+ | Michigan Boulevard Building | [126982630](https://www.openstreetmap.org/way/126982630) | Outline, with the levels from the drawing; not in the original layout |
188
+ | 180 North Michigan Avenue | [210671714](https://www.openstreetmap.org/way/210671714) | Outline, with the height and levels from the drawing; not in the original layout |
189
+ | University Club of Chicago | [126982632](https://www.openstreetmap.org/way/126982632) | Outline, with the upper floor, roof and levels from the drawing; not in the original layout |
190
+ | Monroe Building | [145498713](https://www.openstreetmap.org/way/145498713) | Outline, with the roof and levels from the drawing; not in the original layout |
191
+ | MacLean Center | [145498712](https://www.openstreetmap.org/way/145498712) | Outline, with the levels from the drawing; not in the original layout |
192
+ | Lake View Building | [145498711](https://www.openstreetmap.org/way/145498711) | Outline, with the levels from the drawing; not in the original layout |
193
+ | Peoples Gas Building | [145498710](https://www.openstreetmap.org/way/145498710) | 1179833660, 1179833658, 1179833661, 1179833659, 1179842408, with the levels from the drawing; not in the original layout |
194
+ | Borg-Warner Building | [124873918](https://www.openstreetmap.org/way/124873918) | Outline, with the levels and rooftop from the drawing; not in the original layout |
195
+ | Railway Exchange Building | [124873931](https://www.openstreetmap.org/way/124873931) | Outline, with the levels from the drawing and the roof from the photograph; not in the original layout |
196
+ | Gage Building | [124865450](https://www.openstreetmap.org/way/124865450) | Outline, with the levels from the drawing; not in the original layout |
197
+ | Edson Keith Building | [126982636](https://www.openstreetmap.org/way/126982636) | Outline, with the levels from the drawing; not in the original layout |
198
+ | Theodore Ascher Building | [126982639](https://www.openstreetmap.org/way/126982639) | Outline, with the levels from the drawing; not in the original layout |
199
+ | Chicago Athletic Association | [147476152](https://www.openstreetmap.org/way/147476152) | Outline, with the levels from the Historic American Buildings Survey; not in the original layout |
200
+ | Two Illinois Center | [236770799](https://www.openstreetmap.org/way/236770799) | Outline, with the floor pitch from the photograph; not in the original layout |
201
+ | River Plaza | [285867424](https://www.openstreetmap.org/way/285867424) | 68796725, 68796733, 285867425; not in the original layout |
202
+ | Hyatt Regency West Tower | [235920252](https://www.openstreetmap.org/way/235920252) | The tower's part of the hotel's outline, 235920251; not in the original layout |
203
+ | Sheraton Grand | [592122464](https://www.openstreetmap.org/way/592122464) | The tower's part of the complex's outline, 188171430, and the corner's round tower, 1269924307; not in the original layout |
204
+ | Three Illinois Center | [95486958](https://www.openstreetmap.org/way/95486958) | Outline; not in the original layout |
205
+ | Swissôtel | [641288601](https://www.openstreetmap.org/way/641288601) | The tower's part of the hotel's outline, 95486966; not in the original layout |
206
+
207
+ For an audit, retrieve `https://api.openstreetmap.org/api/0.6/way/ID/VERSION`
208
+ using the retained ID/version. That gives the historical way's node references;
209
+ historical node coordinates require their history at the way's edit time. The
210
+ stored coordinate snapshot is the source of truth for this version of the study.
211
+ Refresh deliberately from current way/node data and recheck parts and identity;
212
+ do not automatically import every nearby building or substitute address points
213
+ for outlines. No runtime requests to OSM, map tiles or height services are made.
214
+
215
+ ## Heights and limits
216
+
217
+ | Building | Architectural height | Tip | Source |
218
+ | --- | ---: | ---: | --- |
219
+ | Heritage | 192.4 m | 192.4 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/the-heritage-at-millennium-park/1897) |
220
+ | Kemper | 159 m | 159 m | [OSM height tag](https://www.openstreetmap.org/way/64389514) |
221
+ | Crain | 177.4 m | 177.4 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/150-north-michigan-avenue/2441) |
222
+ | Michigan Plaza South | 168.6 m | 168.6 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/michigan-plaza-south/2825) |
223
+ | 330 North Wabash | 211.84 m | 211.84 m | [OSM height tag](https://www.openstreetmap.org/way/64596068), the published 695 ft |
224
+ | Trump | 423.2 m | 423.2 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/trump-international-hotel-tower/203) |
225
+ | One Prudential | 183.2 m | 278 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/one-prudential-plaza/2190) |
226
+ | Two Prudential | 303.3 m | 303.3 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/two-prudential-plaza/489) |
227
+ | Aon | 346.3 m | 362.5 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/aon-center/339) |
228
+ | Blue Cross | 226.7 m | 226.7 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/blue-cross-blue-shield-tower/1160) |
229
+ | 340 on the Park | 204.9 m | 204.9 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/340-on-the-park/1583) |
230
+ | The Buckingham | 121.9 m | 121.9 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/buckingham-plaza/10315) |
231
+ | Millennium Park Plaza | 121.9 m | 121.9 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/millennium-park-plaza/10316) |
232
+ | Willoughby Tower | 133.5 m | 133.5 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/willoughby-tower/9854) |
233
+ | Six North Michigan | 86 m | 86 m | [Chicagology](https://chicagology.com/goldenage/goldenage015/) |
234
+ | Michigan Boulevard Building | 82 m | 83.3 m | [Emporis, archived](https://web.archive.org/web/20070216134331/http://www.emporis.com/en/wm/bu/?id=michiganboulevardbuilding-chicago-il-usa) |
235
+ | 180 North Michigan Avenue | 86.3 m, drawing | 86.3 m | None published; storeys from [Marc Realty](https://marcrealty.com/180-north-michigan-office-space-chicago/) |
236
+ | University Club of Chicago | 67.7 m | 69.75 m | [OSM height tag](https://www.openstreetmap.org/way/126982632) |
237
+ | Monroe Building | 69 m | 69 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/monroe-building/22557) |
238
+ | MacLean Center | 77.4 m | 77.4 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/maclean-center/26975) |
239
+ | Lake View Building | 73.2 m | 73.2 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/lake-view-building/26976) |
240
+ | Peoples Gas Building | 82.9 m | 82.9 m | [City of Chicago](https://www.chicago.gov/content/dam/city/depts/zlup/Historic_Preservation/Publications/Michigan_Blvd_HD_guidelines_04FEB2016.pdf) |
241
+ | Borg-Warner Building | 83.5 m | 83.5 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/borg-warner-building/18617) |
242
+ | Railway Exchange Building | 78.9 m | 78.9 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/santa-fe-building/9587) |
243
+ | Gage Building | 46.94 m | 47.74 m | [City of Chicago](https://www.chicago.gov/content/dam/city/depts/zlup/Historic_Preservation/Publications/Michigan_Blvd_HD_guidelines_04FEB2016.pdf) |
244
+ | Edson Keith Building | 30.78 m | 30.78 m | [HABS IL-1065](https://tile.loc.gov/storage-services/master/pnp/habshaer/il/il0000/il0056/data/il0056data.pdf) |
245
+ | Theodore Ascher Building | 30.78 m | 30.78 m | [HABS IL-1065](https://tile.loc.gov/storage-services/master/pnp/habshaer/il/il0000/il0056/data/il0056data.pdf), the Keith's height |
246
+ | Chicago Athletic Association | 45.52 m | 45.52 m | [HABS IL-1226](https://tile.loc.gov/storage-services/master/pnp/habshaer/il/il0900/il0935/sheet/00004a.tif), measured |
247
+ | Two Illinois Center | 114.3 m | 114.3 m | [Skyscraper Center](https://www.skyscrapercenter.com/chicago/two-illinois-center/11095) |
248
+ | River Plaza | 159.7 m | 159.7 m | [Skyscraper Center](https://www.skyscrapercenter.com/chicago/river-plaza/3383) |
249
+ | Hyatt Regency West Tower | 111.3 m | 111.3 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/hyatt-regency-chicago-west-tower/13132) |
250
+ | Sheraton Grand | 112.3 m | 112.3 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/sheraton-chicago-hotel-towers/10020); its 112.8 m tip is not modelled |
251
+ | Three Illinois Center | 106.7 m | 106.7 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/three-illinois-center/13913) |
252
+ | Swissôtel | 139.3 m | 139.3 m | [Skyscraper Center](https://www.skyscrapercenter.com/building/swissotel-chicago/4362) |
253
+
254
+ Architectural heights include architectural spires and exclude antennas. 180 North
255
+ Michigan Avenue has none published, so its height is read on the drawing, and the page's
256
+ dimension table says so. Where published heights disagree, the layout takes the one
257
+ nearest the drawing's reading. So the Monroe Building, the MacLean Center and the Lake View
258
+ Building take the Skyscraper Center's heights over the lower ones in the City's
259
+ [guide to the Historic Michigan Boulevard District](https://www.chicago.gov/content/dam/city/depts/zlup/Historic_Preservation/Publications/Michigan_Blvd_HD_guidelines_04FEB2016.pdf),
260
+ and the Peoples Gas Building takes the City's 272 ft over the Skyscraper Center's 92 m.
261
+ The Borg-Warner Building's roof and penthouse take the City's 240 and 258 ft, and the block
262
+ behind the penthouse the Skyscraper Center's 83.5 m. The Railway Exchange Building's cornice
263
+ takes the City's 235 ft, and its roof's top the Skyscraper Center's 259 ft. The Gage
264
+ Building's parapet takes the City's 154 ft over Emporis's estimated 139.77 ft. The Edson Keith
265
+ and Theodore Ascher Buildings' take the HABS record's 101 ft for the Keith over the City's
266
+ 100 ft, since the Ascher's seventh storey made it the Keith's height. Their drawn fronts are
267
+ scaled to meet them. The
268
+ table's before/after comparison uses the highest actual rendered vertex, so One
269
+ Prudential's antenna is not compared to its roof. Aon's original copy is the real
270
+ tower from the drawing's 30.6 m datum up at 1.329 times its size, so its antenna
271
+ tip stands 441.1 m above the platform; the geographic model has a 346.3 m
272
+ architectural top and a 362.5 m antenna tip. Both values are shown so the
273
+ comparison does not imply a 362.5 m roof. Published values were checked at the
274
+ time of the extract. OSM's rounded or conflicting overall heights are superseded
275
+ by the cited records; Kemper retains OSM's 159 m value.
276
+
277
+ Intermediate parts have less certainty than the overall height:
278
+
279
+ - Heritage now uses the city's design elevations for its 32.8 m podium terrace,
280
+ 89.5 m lower terrace and 181.2 m main roof, with a separate crown reaching the
281
+ published 192.4 m top. Facade details and intermediate floor spacing remain
282
+ approximate; see the [Heritage reference audit](heritage-geographic-reference.md).
283
+ Its materials describe the facade, rather than encoding height confidence.
284
+ - Kemper's two-floor podium keeps its 7.8 m estimate using 159/41, and the
285
+ tower now carries its marble shell, window bays, mullions, dark crown band
286
+ with light fins, and projecting cap at meter scale; see the
287
+ [Kemper reference audit](kemper-geographic-reference.md).
288
+ - One Prudential's mapped tower part stands between its ten- and three-level
289
+ wing parts, which the map gives no heights. The east wing's 56.4 m roof is
290
+ measured on the photograph, and the west wing, which the photograph cannot
291
+ see, keeps its 13.4 m estimate at 183.2/41 a level. The tower's main roof is
292
+ the photographed 169.5 m, under the 41st floor's observatory band; the
293
+ published 183.2 m is its sign penthouse's top, and the WGN mast reaches the
294
+ 278 m tip at the mapped antenna. Its limestone piers, windows, and wing ribs
295
+ follow the photographed 2.35 m bay and 3.93 m floors; see the
296
+ [One Prudential reference audit](one-prudential-reference.md).
297
+ - Trump's mapped podium and setbacks keep their OSM part heights of 60, 120 and
298
+ 200 m. Above them the photograph, measured down from the published 423.2 m tip,
299
+ puts the main roof at 354.4 m, stepping down to 347.3 m north of the east
300
+ face's notch, and the crown at 364.9 m. The map's 345 and 357 m run about ten
301
+ metres low. The spire's joints are the photographed 377.4 and 402.2 m, and it
302
+ stands where the photograph shows it on the crown. Every tier wears the
303
+ stainless curtain wall on its 6 ft units; see the
304
+ [Trump reference audit](trump-reference.md).
305
+ - Crain's two sloping roof parts keep OSM's downhill bearing of 133°, but not
306
+ its roof tags, which put the two peaks 5 m apart and fall 75 and 73 m. The
307
+ photograph shows both peaks at the published 177.4 m and both roofs falling
308
+ 1.225 m per metre, about 51°. Those planes put the north-east half's step about
309
+ 6.9 m above the south-west half's foot, where the drawing shows 7.3 m. The
310
+ wedge between them is the slot's 152.5 m floor. The halves carry the banded
311
+ curtain wall, glazed roofs with a lit outline, and the notches at both ends of
312
+ the split; see the [Crain reference audit](crain-reference.md).
313
+ - Michigan Plaza South's mapped outline now carries its 44-story curtain-wall
314
+ grid with a roof parapet at the published 168.6 m top; see the
315
+ [Michigan Plaza South reference audit](michigan-plaza-south-geographic-reference.md).
316
+ From the photograph's viewpoint it stands behind One Prudential.
317
+ - 330 North Wabash, which the drawing labels Michigan Plaza South, carries Mies van der
318
+ Rohe's bronze curtain wall on its 5 ft module and 12 ft 6 in floors, its lobby on
319
+ the 25 ft plaza, and its louvered plant floors, to the mapped 211.84 m; see the
320
+ [330 North Wabash reference audit](north-wabash-reference.md). The original layout
321
+ has no model of it apart from the drawn one it calls Michigan Plaza South, so the
322
+ comparison table reports its original extents as not modeled.
323
+ - Two Prudential is the tower as built, from the same generator as its original
324
+ copy. The lobby fills the mapped outline, and the photographed 40.8 × 37.5 m
325
+ limestone core stands on its area centroid, square to its south wall. Each
326
+ face's gable steps a floor a bay from 229.3 m corners to a pointed glass strip at
327
+ 256 m, and a stepped pyramid turned 45° to the plan rises from those points to
328
+ 280.2 m, under the spire to the published 303.3 m. A broad rib runs up each ridge
329
+ from its strip's head, and the steps end on its edges in straight lines to the apex.
330
+ Paired gabled tiers fill the mapped depth north and south, each head on the line of
331
+ its steps; see the [Two Prudential reference audit](two-prudential-reference.md).
332
+ - Aon's mapped shaft keeps its 340 m top and its rooftop enclosure the
333
+ 346.3 m part top. The tube carries granite V-shaped columns enclosing fifteen
334
+ bays per mapped face, with spacing fitted to the trace and glass floor by floor on the
335
+ photograph's 3.87 m pitch, which runs on over the mechanical floors to a
336
+ granite cap. Its notched corners are solid stone, and the inferred antenna
337
+ reaches the published 362.5 m tip; see the
338
+ [Aon reference audit](aon-reference.md).
339
+ - The Blue Cross and Blue Shield Tower stands right of Aon, outside the original
340
+ layout's frame, so that layout has no model of it and the comparison table
341
+ reports its original extents as not modeled. Its mapped block stands forward
342
+ of end bays that open through at the middle of three mechanical bands, where
343
+ the 1997 tower ended, and its emblem screen rises to the published 226.7 m;
344
+ see the [Blue Cross reference audit](blue-cross-reference.md).
345
+ - 340 on the Park stands right of the Blue Cross and Blue Shield Tower, also outside
346
+ the original layout's frame. Its mapped tower has a straight south face, a diagonal
347
+ south-east face and a north face curved for The Buckingham's views. The south face
348
+ carries a white concrete frame: a beam every fifth floor, measured on the drawing
349
+ down from the published 204.9 m top, balcony ladders, the winter garden's tall bay
350
+ and a parapet band. The corner block's roof is measured on a photograph at 51.7 m,
351
+ over the map's 40 m; see the [340 on the Park reference audit](340-on-the-park-reference.md).
352
+ - The Buckingham stands right of 340 on the Park, where the mapped outline projects onto
353
+ the drawn tower. It is a concrete frame of five bays a face with a band at every floor
354
+ over bronze ribbon windows, measured on the drawing down from the mapped 119 m cap.
355
+ The south, east and north faces' end bays stand forward of the middle, balconies stack
356
+ in the two notched corners, and the rooftop enclosure on its mapped part rises to the
357
+ published 121.9 m; see the [Buckingham reference audit](buckingham-reference.md).
358
+ - Millennium Park Plaza is the drawing's tower in front of Michigan Plaza, which the
359
+ geographic camera names; see the
360
+ [building audit](building-labels.md#names-from-the-geographic-camera). A 90 m concrete
361
+ slab stands to the published 121.9 m, with window strips in its narrow ends and punched
362
+ windows in its long faces. Its floor levels are estimates; see the
363
+ [Millennium Park Plaza reference audit](millennium-park-plaza-reference.md).
364
+ - Willoughby Tower stands at Michigan and Madison, left of Six North Michigan in the
365
+ drawing. Its limestone base fills the mapped L to the setback over the 23rd floor; a
366
+ shaft rises at the lot's south-east corner, with a shoulder west of it, to a crown of
367
+ arched windows and pinnacles at the published 133.5 m. The shaft's plan and the levels
368
+ are read from the drawing; see the
369
+ [Willoughby Tower reference audit](willoughby-tower-reference.md).
370
+ - Six North Michigan, the Montgomery Ward Building, stands across Madison from Willoughby
371
+ Tower. Its sixteen-storey block fills the mapped outline under a projecting cornice; the
372
+ stub of its tower, in the middle of the Michigan front, rises through it to an arched
373
+ stage and a panelled top stage under a cap at the published 86 m. The tower's plan and
374
+ the levels are read from the drawing; see the
375
+ [Six North Michigan reference audit](six-north-michigan-reference.md).
376
+ - The Michigan Boulevard Building stands at Michigan and Washington, beyond 20 North
377
+ Michigan. Its terracotta front of five bays rises twenty-one storeys, past a belt course
378
+ over the thirteenth, to an attic under a parapet at the published 82 m, raised over the
379
+ south bay to 83.3 m. Its brick south wall, which the drawing shows above 20 North
380
+ Michigan, is windowed only on its top floors. The levels are read from the drawing; see
381
+ the [Michigan Boulevard Building reference audit](michigan-boulevard-reference.md).
382
+ - 180 North Michigan Avenue, the Harvester Building, stands on the south-west corner of
383
+ Michigan and Lake, its Michigan front hidden behind Millennium Park Plaza. It fills the
384
+ mapped lot with twenty-four storeys of masonry, string courses and a top floor of arched
385
+ windows. No height is published: its 86.3 m parapet is read on the drawing, within a few
386
+ metres; see the [180 North Michigan Avenue reference audit](north-michigan-180-reference.md).
387
+ - The University Club of Chicago stands on the north-west corner of Michigan and Monroe,
388
+ partly behind the Monroe Building. Its Gothic walls carry the tall arched windows of its
389
+ top hall in four bays to each street front, under a band and a crenellated parapet.
390
+ Behind the parapet an upper floor rises to a steep roof whose gable faces Michigan, its
391
+ peak at OpenStreetMap's 67.7 m under a cross. The levels and the upper floor's setbacks
392
+ are read from the drawing; see the
393
+ [University Club reference audit](university-club-reference.md).
394
+ - The Monroe Building stands across Monroe from the University Club. Twelve storeys of
395
+ terracotta over two of granite rise in bays of paired windows to a cornice under a steep
396
+ gable roof holding two more floors, sixteen in all, its gable facing Michigan with small
397
+ arched windows, to the Skyscraper Center's 69 m ridge, the drawn front scaled to meet it;
398
+ see the [Monroe Building reference audit](monroe-reference.md).
399
+ - The MacLean Center, built as the Illinois Athletic Club, stands south of the Monroe
400
+ Building. Its narrow front's five columns of windows rise twelve storeys to the old
401
+ club's projecting cornice and a frieze of round windows, then six more floors from 1985,
402
+ arched on the top one, to a pierced parapet at the Skyscraper Center's 77.4 m, the drawn
403
+ front scaled to meet it; see the [MacLean Center reference audit](maclean-center-reference.md).
404
+ - The Lake View Building stands south of the MacLean Center. Its narrow front of three
405
+ windows to a floor rises seventeen storeys, arched on the sixteenth, with small attic
406
+ windows under a cornice band, to the Skyscraper Center's 73.2 m, the drawn front scaled
407
+ to meet it; see the [Lake View Building reference audit](lake-view-reference.md).
408
+ - The Peoples Gas Building stands south of the Lake View Building, on Adams. Its Michigan
409
+ and Adams fronts rise twenty storeys between wide corner piers: two behind granite
410
+ columns, fourteen of paired windows, three behind a colonnade, and an attic under a
411
+ frieze, a projecting cornice and its cresting, to the City's 272 ft. Its mapped parts
412
+ hold a light court that widens over the seventeenth floor; see the
413
+ [Peoples Gas Building reference audit](peoples-gas-reference.md).
414
+ - The Borg-Warner Building stands across Adams from Peoples Gas. Its curtain wall of
415
+ mullions and a spandrel to each floor wraps the Michigan, Adams and south fronts between
416
+ corner columns, some twenty-two floors at the drawn pitch, to a deep fascia at the City's
417
+ 240 ft. On the roof stand an office penthouse at the City's 258 ft and a block behind it
418
+ at the Skyscraper Center's 83.5 m, both placed from the drawing; see the
419
+ [Borg-Warner Building reference audit](borg-warner-reference.md).
420
+ - The Railway Exchange Building stands at Michigan and Jackson. Its white terracotta fronts
421
+ rise seventeen storeys in eleven bays of paired windows, with a belt under the fourteenth
422
+ floor and round windows in the frieze, to a projecting cornice at the City's 235 ft. Its
423
+ hipped copper roof rises to a flat top at the Skyscraper Center's 259 ft, shaped from the
424
+ photograph; see the [Railway Exchange Building reference audit](railway-exchange-reference.md).
425
+ - The Gage Building stands between the University Club and Willoughby Tower, named through
426
+ the geographic camera. Louis Sullivan's terracotta front rises twelve storeys in three
427
+ bays between tall piers, each bay's window in four, five and four lights, to a parapet at
428
+ the City's 154 ft with cartouches over the inner piers. Its brick south wall, which the
429
+ drawing shows over 24 and 30 South Michigan, carries the drawn windows. The drawn front,
430
+ whose parapet reads 54.2 m, is scaled to meet the published height; see the
431
+ [Gage Building reference audit](gage-reference.md).
432
+ - The Edson Keith and Theodore Ascher Buildings, the Gage Group's lower two at 24 and 30 South
433
+ Michigan, stand between the Gage and the University Club, named through the geographic
434
+ camera. Red brick fronts, three bays and two, of Chicago windows rise seven storeys over
435
+ shopfronts to plain parapets at the HABS record's 101 ft for the Keith. The drawing
436
+ shows only their seventh floors, the drawn fronts scaled to meet that height; see
437
+ the [Edson Keith and Theodore Ascher Buildings reference audit](keith-ascher-reference.md).
438
+ - The Chicago Athletic Association stands between the Gage and Willoughby Tower, whose drawn
439
+ group paints its front. Henry Ives Cobb's Venetian Gothic front of three bays rises through
440
+ a great arcade over three floors to the eighth floor's traceried arcade, a carved frieze,
441
+ a cornice and a top storey of diaper brick pierced by nine roundels. The Historic American
442
+ Buildings Survey's measured drawings give its levels and the parapet's 149 ft 4 in, which
443
+ the drawn front, scaled to meet it, follows within about a metre. The City's 254 ft for it is
444
+ the annex's; see the
445
+ [Chicago Athletic Association reference audit](chicago-athletic-association-reference.md).
446
+ - Two Illinois Center and River Plaza fill the gap between Two Prudential Plaza and Aon
447
+ Center, which the drawing paints as one building. Two Illinois Center stands in front, a
448
+ dark curtain wall on a 5 ft module with its floors at the photograph's pitch and a
449
+ mechanical band under its roof at the published 114.3 m. River Plaza stands behind, a white
450
+ concrete frame of 56 storeys over a podium to OpenStreetMap's 156 m roof, with the mapped
451
+ box on it to the published 159.7 m, the Skyscraper Center's architectural top and tip.
452
+ OpenStreetMap's 166 m for the box stands over that tip. Neither is scaled to the drawing,
453
+ whose top lies between their roofs; see the
454
+ [Two Illinois Center and River Plaza reference audit](river-plaza-two-illinois-center-reference.md).
455
+ - The Hyatt Regency Chicago's West Tower stands between Aon Center and the Blue Cross and Blue
456
+ Shield Tower, where the drawn Blue Cross group paints a dark brown sliver. Its brick slab
457
+ carries narrow window slots on a 3.5 m module between solid corners, under a plain band, to
458
+ the published 111.3 m, on its mapped part of the hotel's outline; see the
459
+ [Hyatt Regency West Tower reference audit](hyatt-west-tower-reference.md).
460
+ - The Sheraton Grand Chicago Riverwalk stands across the river, right of The Buckingham, where
461
+ the drawing paints a lit crown. Its levels stand on the Skyscraper Center's datum, with
462
+ Emporis's floor-to-floor, roof and crown heights over its top floor: the arms' roof at
463
+ 94.76 m, the corner's two floors higher at 100.1 m, and 12.2 m drums of maroon fins on the
464
+ three round ends, the corner's to the published 112.3 m. The Skyscraper Center's tip, 50 cm
465
+ higher, names no feature the photographs resolve, so the model stops at the drum's top; see
466
+ the [Sheraton Grand reference audit](sheraton-grand-reference.md).
467
+ - Three Illinois Center stands between 340 on the Park and The Buckingham from the drawing's
468
+ camera, in a gap no model filled. Its dark bronze curtain wall carries a floor to each
469
+ published 11.5 ft over a lobby of what the 29 floors leave under the published 106.7 m, and
470
+ its top two floors are the windowless mechanical penthouse the 2013 photograph shows. The
471
+ drawn tower there stands about 140 layer units higher, so the drawing's group keeps its
472
+ label; see the [Three Illinois Center reference audit](three-illinois-center-reference.md).
473
+ - Swissôtel Chicago stands behind Three Illinois Center and The Buckingham. Its triangular
474
+ glass tower takes the published 139.3 m over OpenStreetMap's 45 levels, a panel to each,
475
+ and its west corner closes the seam where those two models' corners leave sky; see the
476
+ [Swissôtel reference audit](swissotel-reference.md).
477
+
478
+ These are mapped massing models, not surveyed architectural models. The height
479
+ sources use their own street/entrance datum; translating all of them to a common
480
+ zero plane does not recover absolute roof elevations above sea level.
481
+
482
+ ## Streets and validation
483
+
484
+ In the skyline study, grey lines are mapped street **centerlines**, with no implied road
485
+ or sidewalk width. Tunnels, negative OSM layers and names containing “Lower” are
486
+ excluded. Retained upper/surface roads are flattened to the ground; bridge
487
+ heights, curbs, the river and surrounding buildings are absent. The centerlines are
488
+ cut to the 100 m grid, which runs from 850 m south of Crain, past Jackson, to 650 m north,
489
+ so every mapped building stands among them. The grid and mapped footprints help inspect
490
+ whether the street arrangement fits. The full-screen 3D skyline draws the same ways as grey
491
+ roadways sized from their lanes, cut to its platform's edges 885 m south and 715 m north of
492
+ Crain. Checking curb clearances or Chicago's stacked streets requires additional
493
+ width and elevation data.
494
+
495
+ `tests/skyline-geography.test.ts`, included in `bun run check`, checks independent
496
+ coordinate anchors, meter scale and north direction, all thirty-four rendered ground
497
+ extents and top heights, mesh closure, constant orthographic scale with height,
498
+ camera/zoom preservation when toggling, geographic hover, restoration of the
499
+ original transforms and camera, local-only runtime requests, mobile overflow,
500
+ reduced motion and idle rendering. Existing fidelity checks still run against
501
+ the original layout. Top-level `src/models/*.ts` ships automatically as compiled
502
+ `.js`, and its `.svg` excerpts ship as-is; `skyline-comparison.ts`
503
+ is also explicitly included in the site's deployment allowlist.
@@ -0,0 +1,4 @@
1
+ import type { BuildingModel, Vec3 } from "./building-kit.js";
2
+ export declare const aonSkylineBase = 30.6;
3
+ export declare function createAonCenterBuilding(): BuildingModel;
4
+ export declare const aonFeatures: Record<string, Vec3 | Vec3[]>;
@@ -0,0 +1,60 @@
1
+ import { aonLevels, buildAonTower } from "./aon-tower.js";
2
+ // Aon Center on a clean version of its plan, in real meters, for the skyline study's
3
+ // original layout, which places this copy in skyline-study.ts. aon-tower.ts builds it, and
4
+ // the geographic model on the mapped outline.
5
+ //
6
+ // The plan is the published 59.15 m square. Each face's main run holds fifteen 10 ft bays,
7
+ // as the photograph and the drawing both count and the building's descriptions give.
8
+ // That leaves each corner a 6.7 m notch: a 45° chamfer, a square step, and a second
9
+ // chamfer, in the mapped outline's proportions. The mapped notches run about 1.5 m deeper;
10
+ // the photograph's bays and corner widths fit these. See docs/aon-reference.md. Units are
11
+ // meters; +x is east and +z is south.
12
+ const half = 59.15 / 2, notch = 6.715, chamfer = 1.9, step = notch - 2 * chamfer;
13
+ // The south-east notch, from the south face's east end to the east face's south end.
14
+ const southEast = [
15
+ [half - notch, half],
16
+ [half - notch + chamfer, half - chamfer],
17
+ [half - notch + chamfer, half - chamfer - step],
18
+ [half - notch + chamfer + step, half - chamfer - step],
19
+ [half, half - notch],
20
+ ];
21
+ // Each corner turns the south-east one a quarter further round.
22
+ const turn = ([x, z], quarters) => (quarters === 0 ? [x, z] : turn([z, -x], quarters - 1));
23
+ const outline = [0, 1, 2, 3].flatMap((quarters) => southEast.map((point) => turn(point, quarters)));
24
+ // The rooftop enclosure, centred as the mapped part is, and the antenna at its centre.
25
+ const enclosure = [[-16, -16], [16, -16], [16, 16], [-16, 16]];
26
+ // The skyline drawing shows the tower from the photograph's treeline up, so its platform
27
+ // datum crosses the tower above the street: 30.6 m, fitted with the placement in
28
+ // skyline-study.ts, which scales, turns, and places this copy. Its y = 0 is that datum,
29
+ // and the drawing's top floor band is the eightieth office floor, under the mechanical ones.
30
+ export const aonSkylineBase = 30.6;
31
+ export function createAonCenterBuilding() {
32
+ return buildAonTower({ name: "Aon Center", id: "layer3", outline, enclosure, mast: [0, 0], base: aonSkylineBase });
33
+ }
34
+ // Features the skyline test projects against the drawing, in this copy's coordinates.
35
+ const at = ([x, z], real) => [x, real - aonSkylineBase, z];
36
+ const bays = 15, bay = (southEast[0][0] - -southEast[0][0]) / bays;
37
+ // The columns stand on the bay lines, the end ones drawn in to stay on their face.
38
+ const columnAt = (i) => Math.min(Math.max(i * bay, 0.65), bays * bay - 0.65);
39
+ const southColumn = (i) => [-(half - notch) + columnAt(i), half];
40
+ const eastColumn = (i) => [half, half - notch - columnAt(i)];
41
+ export const aonFeatures = {
42
+ // The roof edge's ends: the west face's south end, the south face's east end, and the
43
+ // east face's north end, at the top of the cap.
44
+ aonRoofWest: at(turn(southEast[0], 3), aonLevels.roof),
45
+ aonRoofNear: at(southEast[0], aonLevels.roof),
46
+ aonRoofEast: at(turn(southEast[0], 1), aonLevels.roof),
47
+ // A point on the south face's glass, clear of every neighbour, for hover.
48
+ aonFrontFacade: at([-(half - notch) + 7.5 * bay, half + 0.07], 230),
49
+ // The columns, halfway out to their points at mid-height: the fourteen after each face's
50
+ // first, which the drawing's fifteen strips on each face match one for one.
51
+ aonFrontPiers: Array.from({ length: 14 }, (_, i) => { const [x, z] = southColumn(i + 1); return [x, 220 - aonSkylineBase, z + 0.35]; }),
52
+ aonSidePiers: Array.from({ length: 14 }, (_, i) => { const [x, z] = eastColumn(i + 1); return [x + 0.35, 220 - aonSkylineBase, z]; }),
53
+ // The notch's two sides at mid-height: the south face's east end and the east face's
54
+ // south end, between which the drawing paints the corner's stone.
55
+ aonNotchFront: at(southEast[0], 200),
56
+ aonNotchEast: at(southEast[4], 200),
57
+ // Window centres across the south face's middle on six office floors, the drawing's
58
+ // eleventh, twenty-third and every twelfth band on from the top.
59
+ aonFloorRows: [70, 58, 46, 34, 22, 10].map((floor) => at([0, half + 0.07], aonLevels.lobbyTop + (floor - 1) * aonLevels.pitch + (aonLevels.sill + aonLevels.head) / 2)),
60
+ };
@@ -0,0 +1,9 @@
1
+ import type { BuildingModel, Plan } from "./building-kit.js";
2
+ import type { GeoBuilding } from "./skyline-geography-data.js";
3
+ export declare const aonGeographicLevels: Readonly<{
4
+ shaftTop: 340;
5
+ enclosureTop: 346.3;
6
+ tip: 362.5;
7
+ floors: 83;
8
+ }>;
9
+ export declare function createAonGeographicBuilding(record: GeoBuilding, projectPlan: (coordinates: [number, number][]) => Plan, offset: [number, number]): BuildingModel;
@@ -0,0 +1,35 @@
1
+ import { polygonOf } from "./building-kit.js";
2
+ import { aonLevels, buildAonTower } from "./aon-tower.js";
3
+ // Aon Center: the geographic layout's model, on the mapped outline 64388609 with its
4
+ // notched corners, the rooftop enclosure part 284775635, and the published heights. The
5
+ // tower is the shared generator in aon-tower.ts, the same one the original layout's copy
6
+ // uses. Each mapped face carries the source plan's fifteen window bays, distributed
7
+ // over its chord; the mapped notches are deeper, so this spacing is approximate. The antenna stands
8
+ // at the enclosure's centre, reaching the published 362.5 m tip; the map gives no antenna
9
+ // geometry. See docs/aon-reference.md. Units are meters; +x is east, +z is south.
10
+ export const aonGeographicLevels = Object.freeze({
11
+ shaftTop: aonLevels.roof, // OSM shaft part top
12
+ enclosureTop: aonLevels.enclosureTop, // OSM part 284775635
13
+ tip: aonLevels.tip, // published tip
14
+ floors: 83,
15
+ });
16
+ const h = aonGeographicLevels;
17
+ export function createAonGeographicBuilding(record, projectPlan, offset) {
18
+ const enclosurePart = record.parts.find((p) => p.way === 284775635);
19
+ const enclosure = polygonOf(projectPlan(enclosurePart.coordinates));
20
+ // The antenna at the enclosure's area centroid: its traced outline carries an extra
21
+ // vertex on one edge, which would pull a mean of its vertices off centre.
22
+ let twice = 0, cx = 0, cz = 0;
23
+ enclosure.forEach(([x, z], i) => {
24
+ const [x2, z2] = enclosure[(i + 1) % enclosure.length], cross = x * z2 - x2 * z;
25
+ twice += cross;
26
+ cx += (x + x2) * cross;
27
+ cz += (z + z2) * cross;
28
+ });
29
+ const mast = [cx / (3 * twice), cz / (3 * twice)];
30
+ const model = buildAonTower({ name: record.name, id: record.id, outline: polygonOf(projectPlan(record.footprint.coordinates)), enclosure, mast, base: 0 });
31
+ model.building.position.set(offset[0], 0, offset[1]);
32
+ model.building.userData["geography"] = record;
33
+ model.building.userData["geographicDetail"] = { levels: h, floors: h.floors, source: "docs/aon-reference.md" };
34
+ return model;
35
+ }