{"id":2971529,"date":"2026-07-01T00:30:44","date_gmt":"2026-07-01T07:30:44","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2971529"},"modified":"2026-07-02T00:23:11","modified_gmt":"2026-07-02T07:23:11","slug":"publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python","title":{"rendered":"Publishing custom metrics from ArcGIS CityEngine to ArcGIS Urban using Python"},"author":360672,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23771,615021,37151],"tags":[25781,760632,781171,756352,26171],"industry":[],"product":[36781],"class_list":["post-2971529","blog","type-blog","status-publish","format-standard","hentry","category-3d-gis","category-aec","category-design-planning","tag-3d","tag-arcgis-cityengine","tag-python-api","tag-urban-design","tag-urban-planning","product-city-engine"],"acf":{"authors":[{"ID":6031,"user_firstname":"Simon","user_lastname":"Haegler","nickname":"shaegler","user_nicename":"shaegler","display_name":"Simon Haegler","user_email":"SHaegler@esri.com","user_url":"","user_registered":"2018-03-02 00:17:52","user_description":"I'm a software developer in the field of computer graphics, specialized in procedural modeling. I have a background in electrical engineering (hardware development), general software development (C++, multiple scripting languages, build environments) and expert knowledge in Linux systems (several platforms).\r\n\r\nMy main interest currently lies in the application of procedural 3d modeling techniques in AEC and M&amp;E (special effects and environments for movies and computer games), as well as digital set building and production pipeline tools.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/11\/1517701153747-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":340412,"user_firstname":"Matthias","user_lastname":"Matti","nickname":"Matthias Matti","user_nicename":"mmatti","display_name":"Matthias Matti","user_email":"mmatti@esri.com","user_url":"","user_registered":"2023-06-07 12:39:07","user_description":"Matthias Matti is a Software Engineer in the CityEngine team at the Esri R&amp;D Center in Zurich. He holds an MSc in Computer Science from ETH Zurich and combines his background in architecture with an interest in mathematics, geometry, and design.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/profile-1-465x465.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":360672,"user_firstname":"Jennifer","user_lastname":"Johnson","nickname":"Jen Johnson","user_nicename":"jenjohnson","display_name":"Jen Johnson","user_email":"jenjohnson@esri.com","user_url":"","user_registered":"2024-08-26 13:49:44","user_description":"Jen Johnson is a Product Engineer on the ArcGIS CityEngine team at the Esri R&amp;D Center in Zurich. Her background is in landscape architecture, urban planning, geodesign and sustainable design for passive development strategies. She has otherwise used her GIS knowledge to support humanitarian initiatives worldwide.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_6204-2-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"short_description":"Use Python in ArcGIS CityEngine to compute CGA reports on spaces and publish them as custom metrics back into your ArcGIS Urban plan.","flexible_content":[{"acf_fc_layout":"content","content":"<p>The integration of\u00a0<span class=\"ph\">ArcGIS CityEngine with\u00a0<\/span>ArcGIS Urban\u00a0allows you to do the following:<\/p>\n<ul>\n<li>Import\u00a0<span class=\"ph\">ArcGIS Urban<\/span>\u00a0plans (spaces, existing buildings, zoning and overlay boundaries, and\u00a0scenarios) in\u00a0<span class=\"ph\">ArcGIS CityEngine as scenes.<\/span><\/li>\n<li>Edit the imported parcel layers and save the changes to\u00a0<span class=\"ph\">ArcGIS Urban<\/span>.<\/li>\n<li>Publish\u00a0<span class=\"ph\">CityEngine<\/span>\u00a0models as scene layers to\u00a0<span class=\"ph\">ArcGIS Online<\/span>\u00a0and link them to a scenario in an\u00a0<span class=\"ph\">ArcGIS Urban<\/span>\u00a0plan<\/li>\n<\/ul>\n"},{"acf_fc_layout":"content","content":"<p>In this example project for ArcGIS CityEngine 2026.0 you learn how to use our new Python 3 capabilities to extend the ArcGIS Urban integration in a specific way: computing and publishing custom metrics to\u00a0ArcGIS Urban and then view them in the Urban metrics\u00a0dashboard. The custom metrics are derived from CGA reports on space shapes (i.e. floor plates).<\/p>\n"},{"acf_fc_layout":"content","content":"<p>Please note that this example is intended for users who are already familiar with the ArcGIS Planning System and its\u00a0terminology. Please reference\u00a0our\u00a0<a class=\"external-link\" href=\"https:\/\/doc.arcgis.com\/en\/cityengine\/latest\/help\/help-urban-integration.htm\" rel=\"nofollow\">ArcGIS Urban Integration<\/a>\u00a0documentation\u00a0and\u00a0<a class=\"external-link\" href=\"https:\/\/doc.arcgis.com\/en\/urban\/latest\/get-started\/get-started-what-is-urban.htm\" rel=\"nofollow\">What is ArcGIS Urban<\/a>\u00a0for more\u00a0information.<\/p>\n<h1 id=\"PythonExample3:CustommetricsforUrban-Howtoruntheexample\" style=\"text-align: left\">How to run the example<\/h1>\n<h2 id=\"PythonExample3:CustommetricsforUrban-ArcGISAccountRequirements\">ArcGIS Account Requirements<\/h2>\n<ul>\n<li>This example requires both ArcGIS CityEngine and ArcGIS Urban licenses, this means a<a class=\"external-link\" href=\"https:\/\/www.esri.com\/en-us\/arcgis\/products\/user-types\/explore\/professional#products\" rel=\"nofollow\">\u00a0user type\u00a0<\/a>of &#8220;Professional Plus&#8221; is required.<\/li>\n<li>To create an ArcGIS Urban API key, the account must also have these additional developer privileges. This is typically done through\u00a0<a class=\"external-link\" href=\"https:\/\/doc.arcgis.com\/en\/arcgis-online\/administer\/member-roles.htm#ESRI_SECTION1_30C4E874B2A94ACFBDCC0F13400E5B4E\" rel=\"nofollow\">custom member roles<\/a>.\n<ul>\n<li>General privileges &gt; Content &gt; Generate API keys<\/li>\n<li>General privileges &gt; Content &gt; Assign privileges to OAuth 2.0 applications<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 id=\"PythonExample3:CustommetricsforUrban-InitialSetupinArcGISUrban\">Initial Setup in ArcGIS Urban<\/h2>\n"},{"acf_fc_layout":"image","image":{"ID":2974489,"id":2974489,"title":"U3","filename":"image-2026-6-29_22-45-12.png","filesize":3089634,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-45-12.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/image-2026-6-29_22-45-12","alt":"","author":"360672","description":"","caption":"","name":"image-2026-6-29_22-45-12","status":"inherit","uploaded_to":2971529,"date":"2026-07-01 19:34:27","modified":"2026-07-01 19:34:56","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2560,"height":1277,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-45-12-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-45-12.png","medium-width":464,"medium-height":231,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-45-12.png","medium_large-width":768,"medium_large-height":383,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-45-12.png","large-width":1920,"large-height":958,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-45-12-1536x766.png","1536x1536-width":1536,"1536x1536-height":766,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-45-12-2048x1022.png","2048x2048-width":2048,"2048x2048-height":1022,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-45-12-826x412.png","card_image-width":826,"card_image-height":412,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-45-12-1920x958.png","wide_image-width":1920,"wide_image-height":958}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>In this setup phase we create a write-able private copy of the public &#8220;Boston&#8221; example of ArcGIS Urban:<\/p>\n<ol>\n<li>Sign-in to\u00a0<a class=\"external-link\" href=\"https:\/\/urban.arcgis.com\/\" rel=\"nofollow\">ArcGIS Urban<\/a>\u00a0and select &#8220;Open Example&#8221;<\/li>\n<li>Select &#8220;Plans&#8221; and open &#8220;South Boston Dot Ave&#8221;<\/li>\n<li>Select &#8220;Create a copy&#8221; and choose a unique name (we will reference it later). Leave &#8220;Save plan to another Urban Model&#8221; unchecked.<\/li>\n<li>Patience please: copying the plan takes a few minutes &#8230;<\/li>\n<li>Open the ArcGIS item for your new plan: go to &#8220;Configure plan&#8221; in the plan drop-down menu<\/li>\n<\/ol>\n"},{"acf_fc_layout":"image","image":{"ID":2974497,"id":2974497,"title":"configure-plan","filename":"configure-plan.png","filesize":97099,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/configure-plan.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/configure-plan","alt":"","author":"360672","description":"","caption":"","name":"configure-plan","status":"inherit","uploaded_to":2971529,"date":"2026-07-01 19:49:41","modified":"2026-07-01 19:49:41","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":471,"height":264,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/configure-plan-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/configure-plan.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/configure-plan.png","medium_large-width":471,"medium_large-height":264,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/configure-plan.png","large-width":471,"large-height":264,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/configure-plan.png","1536x1536-width":471,"1536x1536-height":264,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/configure-plan.png","2048x2048-width":471,"2048x2048-height":264,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/configure-plan.png","card_image-width":471,"card_image-height":264,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/configure-plan.png","wide_image-width":471,"wide_image-height":264}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p style=\"padding-left: 40px\">6. Select &#8220;Open item detail page&#8221;<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2974498,"id":2974498,"title":"open-item-detail-page","filename":"open-item-detail-page.png","filesize":19990,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/open-item-detail-page.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/open-item-detail-page","alt":"","author":"360672","description":"","caption":"","name":"open-item-detail-page","status":"inherit","uploaded_to":2971529,"date":"2026-07-01 19:50:53","modified":"2026-07-01 19:50:53","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":579,"height":360,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/open-item-detail-page-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/open-item-detail-page.png","medium-width":420,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/open-item-detail-page.png","medium_large-width":579,"medium_large-height":360,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/open-item-detail-page.png","large-width":579,"large-height":360,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/open-item-detail-page.png","1536x1536-width":579,"1536x1536-height":360,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/open-item-detail-page.png","2048x2048-width":579,"2048x2048-height":360,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/open-item-detail-page.png","card_image-width":579,"card_image-height":360,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/open-item-detail-page.png","wide_image-width":579,"wide_image-height":360}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p style=\"padding-left: 40px\">7. Review the details page, by opening this you will get to the Urban Design Database item in ArcGIS Online. Later, you will reference it in the code and you will preview it from within CityEngine.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2974477,"id":2974477,"title":"image-2026-6-29_22-49-8","filename":"image-2026-6-29_22-49-8-1.png","filesize":156900,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-49-8-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/image-2026-6-29_22-49-8-2","alt":"","author":"360672","description":"","caption":"","name":"image-2026-6-29_22-49-8-2","status":"inherit","uploaded_to":2971529,"date":"2026-07-01 18:58:32","modified":"2026-07-01 18:58:32","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1045,"height":1217,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-49-8-1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-49-8-1.png","medium-width":224,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-49-8-1.png","medium_large-width":768,"medium_large-height":894,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-49-8-1.png","large-width":927,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-49-8-1.png","1536x1536-width":1045,"1536x1536-height":1217,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-49-8-1.png","2048x2048-width":1045,"2048x2048-height":1217,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-49-8-1-399x465.png","card_image-width":399,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-49-8-1-927x1080.png","wide_image-width":927,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p style=\"padding-left: 40px\">8. On <a class=\"external-link\" href=\"http:\/\/arcgis.com\/\" rel=\"nofollow\">ArcGIS.com<\/a>, use &#8220;New item&#8221; &gt; &#8220;Developer credentials&#8221; to create a new API key for your Urban Design Database item as described\u00a0in\u00a0<a class=\"external-link\" href=\"https:\/\/developers.arcgis.com\/documentation\/security-and-authentication\/api-key-authentication\/tutorials\/create-an-api-key\/location-platform\/\" rel=\"nofollow\">this tutorial<\/a>.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2974600,"id":2974600,"title":"image-2026-6-29_22-50-18","filename":"image-2026-6-29_22-50-18-1.png","filesize":95983,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-50-18-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/image-2026-6-29_22-50-18-2","alt":"","author":"360672","description":"","caption":"","name":"image-2026-6-29_22-50-18-2","status":"inherit","uploaded_to":2971529,"date":"2026-07-02 00:45:16","modified":"2026-07-02 00:45:16","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1074,"height":904,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-50-18-1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-50-18-1.png","medium-width":310,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-50-18-1.png","medium_large-width":768,"medium_large-height":646,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-50-18-1.png","large-width":1074,"large-height":904,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-50-18-1.png","1536x1536-width":1074,"1536x1536-height":904,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-50-18-1.png","2048x2048-width":1074,"2048x2048-height":904,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-50-18-1-552x465.png","card_image-width":552,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-50-18-1.png","wide_image-width":1074,"wide_image-height":904}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>7. Store the API Key in a secure location for later use.<\/p>\n<h2 id=\"PythonExample3:CustommetricsforUrban-InitialSetupinArcGISCityEngine\">Initial Setup in ArcGIS CityEngine<\/h2>\n"},{"acf_fc_layout":"image","image":{"ID":2974478,"id":2974478,"title":"U7","filename":"image-2026-6-29_22-41-46.png","filesize":2027799,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-41-46.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/image-2026-6-29_22-41-46","alt":"","author":"360672","description":"","caption":"","name":"image-2026-6-29_22-41-46","status":"inherit","uploaded_to":2971529,"date":"2026-07-01 19:00:18","modified":"2026-07-01 19:00:39","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2560,"height":1392,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-41-46-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-41-46.png","medium-width":464,"medium-height":252,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-41-46.png","medium_large-width":768,"medium_large-height":418,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-41-46.png","large-width":1920,"large-height":1044,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-41-46-1536x835.png","1536x1536-width":1536,"1536x1536-height":835,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-41-46-2048x1114.png","2048x2048-width":2048,"2048x2048-height":1114,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-41-46-826x449.png","card_image-width":826,"card_image-height":449,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-41-46-1920x1044.png","wide_image-width":1920,"wide_image-height":1044}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>We import the private copy of the &#8220;Boston&#8221; plan into ArcGIS CityEngine and configure the example script:<\/p>\n<ol>\n<li>In ArcGIS CityEngine, go to the Urban Navigator and search for your new Plan\/Urban Database item by name.<\/li>\n<li>Select &#8220;File Preview&#8221; on the plan and copy\/paste the &#8220;Design Database ID&#8221; into the corresponding field at the top of &#8220;\/Example_Python_03_Urban_Metric\/scripts\/main.py&#8221;.<\/li>\n<\/ol>\n"},{"acf_fc_layout":"image","image":{"ID":2974589,"id":2974589,"title":"file-preview","filename":"file-preview.png","filesize":326258,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/file-preview.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/file-preview","alt":"","author":"360672","description":"","caption":"","name":"file-preview","status":"inherit","uploaded_to":2971529,"date":"2026-07-02 00:12:02","modified":"2026-07-02 00:12:02","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":983,"height":712,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/file-preview-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/file-preview.png","medium-width":360,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/file-preview.png","medium_large-width":768,"medium_large-height":556,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/file-preview.png","large-width":983,"large-height":712,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/file-preview.png","1536x1536-width":983,"1536x1536-height":712,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/file-preview.png","2048x2048-width":983,"2048x2048-height":712,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/file-preview-642x465.png","card_image-width":642,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/file-preview.png","wide_image-width":983,"wide_image-height":712}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p style=\"padding-left: 40px\">3. From the RMB context menu, run &#8220;Import as new scene&#8221; to create a new CityEngine scene with the Plan\/Urban Database item.<\/p>\n<p style=\"padding-left: 40px\">4. Patience please: importing the plan takes 5\u201315 minutes &#8230;<\/p>\n<p style=\"padding-left: 40px\">5. Switch the scene to the &#8220;Refined&#8221; scenario.<\/p>\n<p style=\"padding-left: 40px\">6. Optionally hide the &#8220;Zoning&#8221; layer group to make it easier to select Spaces.<\/p>\n"},{"acf_fc_layout":"content","content":"<h2 id=\"PythonExample3:CustommetricsforUrban-RunningtheExample:PublishingCGA-basedmetricsforSpaces\">Publishing CGA-based metrics for Spaces<\/h2>\n<p>The main work flow consists of assigning CGA rules to Spaces, using reports to compute metrics, and then publishing\u00a0those metrics to ArcGIS Urban. Here is how to use the bundled CGA rules to report the window glass area to ArcGIS Urban:<\/p>\n<ol>\n<li>In the CityEngine scene, select one or more Urban Spaces (floor shapes) and assign the rule &#8220;\/Example_Python_03_Urban_Metric__2026_0\/rules\/floor_with_windows.cga&#8221;. This very simple rule has the main purpose of reporting the window glass pane area per floor.<\/li>\n<\/ol>\n"},{"acf_fc_layout":"image","image":{"ID":2974492,"id":2974492,"title":"image-2026-6-29_22-54-26","filename":"image-2026-6-29_22-54-26.png","filesize":1686166,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-54-26.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/image-2026-6-29_22-54-26","alt":"","author":"360672","description":"","caption":"","name":"image-2026-6-29_22-54-26","status":"inherit","uploaded_to":2971529,"date":"2026-07-01 19:42:10","modified":"2026-07-01 19:42:10","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2560,"height":1392,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-54-26-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-54-26.png","medium-width":464,"medium-height":252,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-54-26.png","medium_large-width":768,"medium_large-height":418,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-54-26.png","large-width":1920,"large-height":1044,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-54-26-1536x835.png","1536x1536-width":1536,"1536x1536-height":835,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-54-26-2048x1114.png","2048x2048-width":2048,"2048x2048-height":1114,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-54-26-826x449.png","card_image-width":826,"card_image-height":449,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-2026-6-29_22-54-26-1920x1044.png","wide_image-width":1920,"wide_image-height":1044}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p style=\"padding-left: 40px\">2. Click to Select and see the reported &#8220;window_area&#8221; in Inspector\/Reports for each floor.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2974612,"id":2974612,"title":"U9","filename":"UrbanCE_Thumbnail-scaled.png","filesize":1414274,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-scaled.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/urbance_thumbnail","alt":"","author":"360672","description":"","caption":"","name":"urbance_thumbnail","status":"inherit","uploaded_to":2971529,"date":"2026-07-02 01:23:08","modified":"2026-07-02 01:23:27","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2560,"height":1440,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-scaled.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-scaled.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-scaled.png","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-1536x864.png","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-2048x1152.png","2048x2048-width":2048,"2048x2048-height":1152,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-1920x1080.png","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p style=\"padding-left: 40px\">3. To publish the &#8220;window_area&#8221; for a parcel, select one or more <em>space shapes (floors)<\/em>\u00a0and run &#8220;\/Example_Python_03_Urban_Metric__2026_0\/scripts\/main.py&#8221;. Optionally, you can open the Python console to see the script status progress.<\/p>\n<h1 id=\"PythonExample3:CustommetricsforUrban-ConnectingtheCityEngineandUrbanPythonAPIs\">Connecting the CityEngine and Urban Python APIs<\/h1>\n<p>This examples makes use of a few key capabilities enabled or simplified by Python 3. Let&#8217;s look at a few key code locations in the example:<\/p>\n<h2 id=\"PythonExample3:CustommetricsforUrban-ScriptedexporttocollectCGAreports\">Scripted export to collect CGA reports<\/h2>\n<p>In our simple CGA rule &#8220;\/Example_Python_03_Urban_Metric__2026_0\/rules\/floor_with_windows.cga&#8221; we setup a report &#8220;window_area&#8221;. In function &#8220;get_cga_reports_by_parcel&#8221;, we trigger a scripted export (use of &#8220;ScriptExportModelSettings&#8221;) to collect the CGA report values in a JSON file.<\/p>\n"},{"acf_fc_layout":"sidebar","content":"","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"sems = ScriptExportModelSettings()\r\nsems.setScript(f'\/{example_project_name}\/scripts\/urban_metric\/ce\/extract_reports.py')\r\nce.export(spaces, sems)","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<p>The callbacks in the co-export script &#8220;extract_reports.py&#8221; simply look for the &#8220;window_area&#8221; CGA report.<\/p>\n"},{"acf_fc_layout":"sidebar","content":"","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"report_sums = {}\r\n \r\n \r\ndef finishModel(exportContextOID, shapeOID, modelOID):\r\n    shape = Shape(shapeOID)\r\n    model = Model(modelOID)\r\n    reports = model.getReports()\r\n    if 'window_area' in reports:\r\n         report_sum = sum(reports['window_area'])\r\n         report_sums[ce.getOID(shape)] = report_sum\r\n \r\n     \r\ndef finishExport(exportContextOID):\r\n    data_file_path = ce.toFSPath(f'\/{ce.project()}\/data\/cga_reports.json')\r\n    with open(data_file_path, 'w') as f:\r\n        json.dump(report_sums, f)","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<p>We then sum the CGA report values over all shapes and group them by parcel:<\/p>\n"},{"acf_fc_layout":"sidebar","content":"","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"cga_reports_ws = f'\/{ce.project()}\/data\/cga_reports.json'\r\ncga_reports_fs = ce.toFSPath(cga_reports_ws)\r\nwith open(cga_reports_fs, 'r') as f:\r\n    cga_reports = json.load(f)  # space OID -&gt; report sum\r\n \r\nsummed_reports_by_parcel = {}\r\nfor space_oid, rep_val in cga_reports.items():\r\n    space_shape = ce.findByOID(space_oid)\r\n    parcel_id = ce.getAttribute(space_shape, 'ParcelID')\r\n    num_rep_val = float(rep_val)\r\n    if parcel_id in summed_reports_by_parcel:\r\n        summed_reports_by_parcel[parcel_id].append(num_rep_val)\r\n    else:\r\n        summed_reports_by_parcel[parcel_id] = [num_rep_val]\r\n \r\nfor k, v in summed_reports_by_parcel.items():\r\n    summed_reports_by_parcel[k] = sum(v)\r\n \r\nreturn summed_reports_by_parcel","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<h2 id=\"PythonExample3:CustommetricsforUrban-CallingtheUrbanAPIviaobjectmodel\">Calling the Urban API via object model<\/h2>\n<p>With Python 3, you can now directly fetch and generate the Urban API GraphQL object model as convenient Python module, see the\u00a0<a class=\"external-link\" href=\"https:\/\/developers.arcgis.com\/arcgis-urban-api\/guides\/getstarted-sgqlc-python\/#object-queries\" rel=\"nofollow\">pre-generated<\/a>\u00a0file at &#8220;\/Example_Python_03_Urban_Metric__2026_0\/scripts\/urban_metric\/urban\/api.py&#8221;.<\/p>\n<p>This allows us to compactly write the summed up report values (&#8220;metric_value&#8221;) to the receiving container (&#8220;metric_id&#8221;) for each parcel (&#8220;parcel_id&#8221;):<\/p>\n"},{"acf_fc_layout":"sidebar","content":"","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"def mutate_metric_value(..., parcel_id, metric_id, metric_value):\r\n \r\n    parcel_update = UpdateParcelInput(\r\n        attributes=UpdateParcelAttributesInput(\r\n            global_id=parcel_id,\r\n            extended_metric_parameters=[ExtendedMetricParameterInput(\r\n                metric_id=metric_id,\r\n                value=metric_value,\r\n            )]\r\n        )\r\n    )\r\n \r\n    op = Operation(Mutation)\r\n    update = op.update_parcels(urban_database_id=db_id, parcels=[parcel_update])\r\n    ...","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<h2 id=\"PythonExample3:CustommetricsforUrban-SecureAPIkeystorage\">Secure API key storage<\/h2>\n<p>Last but not least, your API key must be kept secure. It is recommended practice to use the\u00a0<code>keyring<\/code>\u00a0module for API key storage. Here is a handy pattern to ask the user for the API key at first run and then securely store it:<\/p>\n"},{"acf_fc_layout":"sidebar","content":"","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"def get_access_token():\r\n    service = 'arcgis.com'\r\n    account = 'My ArcGIS Urban API Key'\r\n    access_token = keyring.get_password(service, account)\r\n    if not access_token:\r\n        access_token = input_message_box_gui(\"Urban API Key\", \"Enter ArcGIS Urban API key:\")\r\n        if not access_token:\r\n            return None\r\n        keyring.set_password(service, account, access_token)\r\n    return access_token","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<p>After the script finishes, open the plan in the ArcGIS Urban application to see the result and click to expand the Dashboard tab in the right panel. If you scroll down you will see the Window Area metric that you created in CityEngine.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2974611,"id":2974611,"title":"New Metrics","filename":"New-Metrics-1.png","filesize":12817,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/New-Metrics-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/new-metrics-2","alt":"","author":"360672","description":"","caption":"","name":"new-metrics-2","status":"inherit","uploaded_to":2971529,"date":"2026-07-02 01:09:49","modified":"2026-07-02 01:09:49","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":690,"height":184,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/New-Metrics-1-213x184.png","thumbnail-width":213,"thumbnail-height":184,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/New-Metrics-1.png","medium-width":464,"medium-height":124,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/New-Metrics-1.png","medium_large-width":690,"medium_large-height":184,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/New-Metrics-1.png","large-width":690,"large-height":184,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/New-Metrics-1.png","1536x1536-width":690,"1536x1536-height":184,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/New-Metrics-1.png","2048x2048-width":690,"2048x2048-height":184,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/New-Metrics-1.png","card_image-width":690,"card_image-height":184,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/New-Metrics-1.png","wide_image-width":690,"wide_image-height":184}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"image","image":{"ID":2974584,"id":2974584,"title":"U9","filename":"image-5.png","filesize":36415,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-5.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/image-5-15","alt":"","author":"360672","description":"","caption":"","name":"image-5-15","status":"inherit","uploaded_to":2971529,"date":"2026-07-02 00:03:20","modified":"2026-07-02 00:03:28","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":686,"height":815,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-5-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-5.png","medium-width":220,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-5.png","medium_large-width":686,"medium_large-height":815,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-5.png","large-width":686,"large-height":815,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-5.png","1536x1536-width":686,"1536x1536-height":815,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-5.png","2048x2048-width":686,"2048x2048-height":815,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-5-391x465.png","card_image-width":391,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-5.png","wide_image-width":686,"wide_image-height":815}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>The published Window Area value is stored as a parcel parameter in ArcGIS Urban. Now, click on the metric to see the visualization update!<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2974585,"id":2974585,"title":"image (6)","filename":"image-6-scaled.png","filesize":2744693,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-6-scaled.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/image-6-18","alt":"","author":"360672","description":"","caption":"","name":"image-6-18","status":"inherit","uploaded_to":2971529,"date":"2026-07-02 00:05:34","modified":"2026-07-02 00:05:34","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2560,"height":1247,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-6-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-6-scaled.png","medium-width":464,"medium-height":226,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-6-scaled.png","medium_large-width":768,"medium_large-height":374,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-6-scaled.png","large-width":1920,"large-height":935,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-6-1536x748.png","1536x1536-width":1536,"1536x1536-height":748,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-6-2048x997.png","2048x2048-width":2048,"2048x2048-height":997,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-6-826x402.png","card_image-width":826,"card_image-height":402,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-6-1920x935.png","wide_image-width":1920,"wide_image-height":935}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Parcel parameters can be inspected for individual parcels and are included in dashboard views: <em>see <a href=\"https:\/\/doc.arcgis.com\/en\/urban\/latest\/help\/help-metrics-plan.htm#ESRI_SECTION1_7A627DDEC0C24BBA86A7AAE8A5F447AA\">parcel parameters.<\/a><\/em><\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2974593,"id":2974593,"title":"metrics-single-dashboard","filename":"metrics-single-dashboard.png","filesize":1274819,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metrics-single-dashboard.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/metrics-single-dashboard","alt":"","author":"360672","description":"","caption":"","name":"metrics-single-dashboard","status":"inherit","uploaded_to":2971529,"date":"2026-07-02 00:19:51","modified":"2026-07-02 00:19:51","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2098,"height":1318,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metrics-single-dashboard-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metrics-single-dashboard.png","medium-width":415,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metrics-single-dashboard.png","medium_large-width":768,"medium_large-height":482,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metrics-single-dashboard.png","large-width":1719,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metrics-single-dashboard-1536x965.png","1536x1536-width":1536,"1536x1536-height":965,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metrics-single-dashboard-2048x1287.png","2048x2048-width":2048,"2048x2048-height":1287,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metrics-single-dashboard-740x465.png","card_image-width":740,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metrics-single-dashboard-1719x1080.png","wide_image-width":1719,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>In the new metrics view, ArcGIS Urban automatically creates a metric node for that parcel parameter. This lets you use the published value as an input when authoring metrics. For background on parcel parameter metrics, <em>see <a href=\"https:\/\/doc.arcgis.com\/en\/urban\/latest\/help\/help-metrics-plan.htm#ESRI_SECTION1_7A627DDEC0C24BBA86A7AAE8A5F447AA\">Work with the dashboard.<\/a>\u00a0<\/em><\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2974586,"id":2974586,"title":"metric-node","filename":"metric-node.png","filesize":85938,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metric-node.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/metric-node","alt":"","author":"360672","description":"","caption":"","name":"metric-node","status":"inherit","uploaded_to":2971529,"date":"2026-07-02 00:08:31","modified":"2026-07-02 00:08:31","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1359,"height":911,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metric-node-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metric-node.png","medium-width":389,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metric-node.png","medium_large-width":768,"medium_large-height":515,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metric-node.png","large-width":1359,"large-height":911,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metric-node.png","1536x1536-width":1359,"1536x1536-height":911,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metric-node.png","2048x2048-width":1359,"2048x2048-height":911,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metric-node-694x465.png","card_image-width":694,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/metric-node.png","wide_image-width":1359,"wide_image-height":911}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>This can be aggregated with the other data in the metrics providing summarized statistics to consider in your design.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2974587,"id":2974587,"title":"image (7)","filename":"image-7.png","filesize":340486,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-7.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\/image-7-17","alt":"","author":"360672","description":"","caption":"","name":"image-7-17","status":"inherit","uploaded_to":2971529,"date":"2026-07-02 00:09:20","modified":"2026-07-02 00:09:20","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2063,"height":851,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-7-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-7.png","medium-width":464,"medium-height":191,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-7.png","medium_large-width":768,"medium_large-height":317,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-7.png","large-width":1920,"large-height":792,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-7-1536x634.png","1536x1536-width":1536,"1536x1536-height":634,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-7-2048x845.png","2048x2048-width":2048,"2048x2048-height":845,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-7-826x341.png","card_image-width":826,"card_image-height":341,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/image-7-1920x792.png","wide_image-width":1920,"wide_image-height":792}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>The final step is to apply this to your urban planning and design workflows. You now have the power to create and share calculated metrics as a result of your detailed work in CityEngine using the Python API.<\/p>\n"}],"related_articles":"","show_article_image":true,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-3-1.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-3-3.png"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Publish custom metrics from ArcGIS CityEngine to ArcGIS Urban<\/title>\n<meta name=\"description\" content=\"Another example of what you can do with the Python API! Enrich your ArcGIS Urban plan metrics with custom design variables from CityEngine.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Publishing custom metrics from ArcGIS CityEngine to ArcGIS Urban using Python\" \/>\n<meta property=\"og:description\" content=\"Another example of what you can do with the Python API! Enrich your ArcGIS Urban plan metrics with custom design variables from CityEngine.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-02T07:23:11+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\"},\"author\":{\"name\":\"Jen Johnson\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f67d314a51e642c08cc0b93efa68d60e\"},\"headline\":\"Publishing custom metrics from ArcGIS CityEngine to ArcGIS Urban using Python\",\"datePublished\":\"2026-07-01T07:30:44+00:00\",\"dateModified\":\"2026-07-02T07:23:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\"},\"wordCount\":11,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"3D\",\"arcgis cityengine\",\"Python api\",\"Urban Design\",\"Urban Planning\"],\"articleSection\":[\"3D Visualization &amp; Analytics\",\"Architecture, Engineering, and Construction\",\"Design and Planning\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\",\"name\":\"Publish custom metrics from ArcGIS CityEngine to ArcGIS Urban\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2026-07-01T07:30:44+00:00\",\"dateModified\":\"2026-07-02T07:23:11+00:00\",\"description\":\"Another example of what you can do with the Python API! Enrich your ArcGIS Urban plan metrics with custom design variables from CityEngine.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Publishing custom metrics from ArcGIS CityEngine to ArcGIS Urban using Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f67d314a51e642c08cc0b93efa68d60e\",\"name\":\"Jen Johnson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_6204-2-213x200.jpg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_6204-2-213x200.jpg\",\"caption\":\"Jen Johnson\"},\"description\":\"Jen Johnson is a Product Engineer on the ArcGIS CityEngine team at the Esri R&amp;D Center in Zurich. Her background is in landscape architecture, urban planning, geodesign and sustainable design for passive development strategies. She has otherwise used her GIS knowledge to support humanitarian initiatives worldwide.\",\"knowsLanguage\":[\"English\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/jenjohnson\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Publish custom metrics from ArcGIS CityEngine to ArcGIS Urban","description":"Another example of what you can do with the Python API! Enrich your ArcGIS Urban plan metrics with custom design variables from CityEngine.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python","og_locale":"en_US","og_type":"article","og_title":"Publishing custom metrics from ArcGIS CityEngine to ArcGIS Urban using Python","og_description":"Another example of what you can do with the Python API! Enrich your ArcGIS Urban plan metrics with custom design variables from CityEngine.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2026-07-02T07:23:11+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","twitter_misc":{"Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python"},"author":{"name":"Jen Johnson","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f67d314a51e642c08cc0b93efa68d60e"},"headline":"Publishing custom metrics from ArcGIS CityEngine to ArcGIS Urban using Python","datePublished":"2026-07-01T07:30:44+00:00","dateModified":"2026-07-02T07:23:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python"},"wordCount":11,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["3D","arcgis cityengine","Python api","Urban Design","Urban Planning"],"articleSection":["3D Visualization &amp; Analytics","Architecture, Engineering, and Construction","Design and Planning"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python","name":"Publish custom metrics from ArcGIS CityEngine to ArcGIS Urban","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2026-07-01T07:30:44+00:00","dateModified":"2026-07-02T07:23:11+00:00","description":"Another example of what you can do with the Python API! Enrich your ArcGIS Urban plan metrics with custom design variables from CityEngine.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Publishing custom metrics from ArcGIS CityEngine to ArcGIS Urban using Python"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f67d314a51e642c08cc0b93efa68d60e","name":"Jen Johnson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_6204-2-213x200.jpg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_6204-2-213x200.jpg","caption":"Jen Johnson"},"description":"Jen Johnson is a Product Engineer on the ArcGIS CityEngine team at the Esri R&amp;D Center in Zurich. Her background is in landscape architecture, urban planning, geodesign and sustainable design for passive development strategies. She has otherwise used her GIS knowledge to support humanitarian initiatives worldwide.","knowsLanguage":["English"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/jenjohnson"}]}},"text_date":"July 1, 2026","author_name":"Multiple Authors","author_page":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/publishing-custom-metrics-from-arcgis-cityengine-to-arcgis-urban-using-python","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/UrbanCE_Thumbnail-3-3.png","primary_product":"ArcGIS CityEngine","tag_data":[{"term_id":25781,"name":"3D","slug":"3d","term_group":0,"term_taxonomy_id":25781,"taxonomy":"post_tag","description":"","parent":0,"count":354,"filter":"raw"},{"term_id":760632,"name":"arcgis cityengine","slug":"arcgis-cityengine","term_group":0,"term_taxonomy_id":760632,"taxonomy":"post_tag","description":"","parent":0,"count":8,"filter":"raw"},{"term_id":781171,"name":"Python api","slug":"python-api","term_group":0,"term_taxonomy_id":781171,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":756352,"name":"Urban Design","slug":"urban-design","term_group":0,"term_taxonomy_id":756352,"taxonomy":"post_tag","description":"","parent":0,"count":21,"filter":"raw"},{"term_id":26171,"name":"Urban Planning","slug":"urban-planning","term_group":0,"term_taxonomy_id":26171,"taxonomy":"post_tag","description":"","parent":0,"count":89,"filter":"raw"}],"category_data":[{"term_id":23771,"name":"3D Visualization &amp; Analytics","slug":"3d-gis","term_group":0,"term_taxonomy_id":23771,"taxonomy":"category","description":"","parent":0,"count":708,"filter":"raw"},{"term_id":615021,"name":"Architecture, Engineering, and Construction","slug":"aec","term_group":0,"term_taxonomy_id":615021,"taxonomy":"category","description":"","parent":0,"count":141,"filter":"raw"},{"term_id":37151,"name":"Design and Planning","slug":"design-planning","term_group":0,"term_taxonomy_id":37151,"taxonomy":"category","description":"","parent":0,"count":123,"filter":"raw"}],"product_data":[{"term_id":36781,"name":"ArcGIS CityEngine","slug":"city-engine","term_group":0,"term_taxonomy_id":36781,"taxonomy":"product","description":"","parent":36591,"count":87,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=city-engine","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2971529","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/360672"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2971529"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2971529\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2971529"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2971529"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2971529"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2971529"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2971529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}