Determining Solar Potential for Rooftops of Multipatch Feature Types

Part of the Modelling Reality in 3D series

Often times there are problems that simply have to be solved in 3 dimensions in order to attain the appropriate results. This doesn’t have to be scary though! Through this series of blog posts – Modelling Reality in 3D, we’re going to uncover some simple and practical uses for 3D GIS.

In this demo we’ll be using tools that are nestled away in the Spatial Analyst extension and often overlooked in order to determine the production potential of rooftops of multipatch feature classes (Esri’s geometry type for 3D features) for generating electricity harnessing the power of the sun!

For this exercise we’ll be using a multipatch feature class from HERE’s 3D Landmark dataset of the Dome in Northgate, Randburg as its construction lends itself quite nicely to an exercise of this kind. This workflow should be perfectly acceptable to use on any other multipatches with a ‘roof’ area with minimal tweaking to the model as long as you keep in mind that this model assumes that skyward facing portions of the multipatch are rooftop areas.


The high level workflow and tools used for this exercise are as follows:


A toolbox can be downloaded HERE in which you can delve further into the parameters set for this demo. We will be discussing it on a conceptual level on the blog.

 Prepare Usable Roof Area

This model will be calculating the maximum potential that can be harnessed by a rooftop, therefore we need to define what this region is. The Area Solar Radiation tool, which we’ll discuss later on, requires a DEM as input and provides results based on a square metre, so we know that this rooftop needs to be represented as a DEM and to make calculations easier later on we will be using 1 metre squared pixels.


Using the Slope and Raster Calculator tools from the Spatial Analyst Extension we extract all of the areas with a slope of 36 degrees or less – this gives us a good approximation of the rooftop area that could hold a photovoltaic cell – we then use a number of other raster-based tools from this extension to clean up the roof area we will be working with.


Using the rooftop area we then extract from the DEM of the building only the portions of the DEM that relate to the roof area that we require for our analysis.


Calculate Global Solar Radiation

Using the Area Solar Radiation tool we determine the global radiation expected to hit the roof of this building in an entire year – this is a combination of both the direct and diffuse radiation and the pixel values have the unit of watt-hour per square metre. In this exercise I used all of the default values as they were well suited for the area in which this building lies, however you can change a number of parameters related to the amount of light that would eventually reach your rooftop.


Additional outputs include views of both the direct and diffuse radiation which make up the global radiation as seen above as well as a DirectDuration ‘map’ which indicates in hours the amount of time each pixel would receive direct solar radiation.


Prepare Basic Contextual Statistics

Now that we have a result, we need to make sense of it and often times the best way to about this is by providing context. The following statistics were calculated based on the global solar radiation values.




Total Global Radiation

3 192 297 067 wH

Conditions modelled in the Area Solar Radiation Tool are correctly indicative of an average year for the site.

Total Area

21 189 m2

Solar Electricity Potential

3 192 297 kWh

Largest Possible System Cost

R35 455 711

Based on a solar panel with the following specifications:

Module Output: 310W

Cost: R3246.86 per unit

Size: 1.940352 m2

Largest Possible System Size

3 385 200 kW

Solar System Potential

4 077 473 kWh/year

Based on a running time of 5 hours of maximum output for the largest possible system every day for a year with loss factors accounting for temperature (6%), dust (7%), wiring (5%) and DC/AC conversion (20%)

Number of households that could be powered per month, either:

Low Consumption


500kWh per month

Medium Consumption


1500 kWh per month

High Consumption


3000 kWh per month


Obviously this approach is based on a number of assumptions which would be made clearer on a true project of this nature and scale. A number of factors have also been disregarded such as the weight of the system and how much load the roof structure could bare. What this model does do is quickly provide an indication of the potential of rooftop-based solar energy in South Africa and hopefully showcases both the power of tools within our software within a 3D context!

ArcGIS Earth is here!

ArcGIS Earth Logo

Version 1 of ArcGIS Earth was officially released mid-January 2016. The application offers functionality to share data in a similar way that Google Earth does.

For Esri customers ArcGIS Earth offers additional value as it makes data viewing in realistic 3D and data sharing possible across the platform – from the desktop, mobile, server or custom developments, the same authoritative data can now be viewed in ArcGIS Earth.

Some advantages of ArcGIS Earth are:

1. Basemaps

ArcGIS Earth offers a choice of 10 global Basemaps ranging from street maps, to terrain and imagery at the click of a button. Simply set the Basemaps to suit the data that is displayed. This means you always have access to high quality, global data that is being constantly updated for you.

ArcGIS Earth screen shot

Multiple datasets from various online or offline sources can be viewed in context of a Basemaps of your choice.


2. Collaboration & Content

If you are an existing Esri client with a Portal (or ArcGIS Online) identity you have full access to your organization’s authoritative content in the form of map and feature services, which means you can do your work quicker and easier than before. Sharing data requires no conversion, saving you time and money.

3. Ownership & Security

With ArcGIS Earth you have the ability to share GIS content that is 100% secure in an existing ArcGIS Online or Portal environment.

  • The level of data access is controlled by your Portal identity. Users can only access data they have been granted access to.
  • When information is added to ArcGIS Earth it remains the property of organisation/person who published it. This is different from other software providers may keep data even after you have removed it.
  • It is not possible to extract or download data from ArcGIS Earth. You can share a view of your data without giving it away. This is great because you can rest assured that your company’s data is safe and secure while using the latest technology to do your work.

4. Save your last session

There are several setting that can be customized. Among them is the possibility to have the Start-up view to continue where you left off. This setting remembers your location, Basemaps and all the other layers that were added during your last session. This can save you time when starting to work each day!

5. Limitations

ArcGIS Earth is great as a free tool for realistic 3D data visualization and sharing data in collaboration with your colleagues and customers. As with all software, there are currently a few limitations:

  • The file based data formats are limited to shp and kmz/kml. If you wish to use data from other Esri sources it must be published to a map or feature service first.
  • Where the symbology of file based features can be changed and the popups are visible, this is not the case for feature and map services. It is not possible to change the symbology or transparency of service layers to view data in context of layers below. It is also not possible to label or set popups for a service layer.

In conclusion

ArcGIS Earth version 1 has many useful features and boasts unrivaled global Basemap content. It is a great way to share your data securely with anyone, any place, anytime. So, have a go! You can download it for free.


Modelling Reality in 3D with ArcGIS – Blog Series

modelling reality - logo

Welcome to 2016! This is going to be a bumper year on the Esri South Africa blog so be sure to keep checking back for new content (or you can subscribe using by clicking the FOLLOW US button on the right).

Following our successful demonstration of CCTV camera placement at the Africa User Conference, we are pleased to introduce a new blogging series that will showcase some new and innovative ideas for leveraging the power of 3D modelling and analysis within the ArcGIS Platform. The entries will be created by our team of 3D experts here at Esri South Africa and will include step by step guides on how to do it yourself.

If you have any specific requests for 3D modelling or analysis scenarios, please drop us a line using the comments below.

The first entry in the series, entitled “Determining Solar Potential for Rooftops using Multipatch Feature Types”, will be available next week!

– Richard

Migrating Python Scripts to ArcGIS Pro

What’s new?


With the migration towards 64-bit processing in ArcGIS Pro, some big changes have come to the Python environment as well.

  1. Python in ArcGIS Pro has been upgraded to version 3.4. All other ArcGIS products are still using version 2.7. Both versions of Python are being developed in parallel and share much the same functionality.
  2. Changes have been made to the functionality within the arcpy site package. This includes the dropping of some functionality and the augmentation of others, e.g. arcpy.mapping has been replaced with in ArcGIS Pro to support ArcGIS Pro’s mapping workflows. For a detailed overview of changes consult the following page.

Assessing the situation

ArcGIS Pro comes with a geoprocessing tool called Analyze Tools for Pro (Data Management Tools > General). This uses the Python utility 2to3 to identify issues when migrating a script and even goes so far as to identify functionality that has not been migrated to ArcGIS Pro. Running this tool will generate an output for you that will state which lines have errors and suggest appropriate changes which you can manually go through and assess. Often the required changes are small and can be make quickly without automation.

Converting your scripts

Sometimes a script is simply too big to go through manually. Thankfully Python 3 comes with a tool to help automate the conversion process.

NOTE: The following steps make changes to the input script. We recommend making a copy of the script being converted and appending 34 to the end of it and making changes to this version of your script so that you leave the original intact. E.g. -> If you choose not to do this, don’t worry, the script creates a copy of the file in the directory with a .bak extension to ensure the original script is preserved.

  1. Run Command Prompt as an Administrator
  2. Type in the following:


where C:\ is the path to the script you want to convert

  1. Once done, the script should have most of the changes done required to make a script functional using Python 3 in ArcGIS Pro. We say most because some functionality within Python could potentially have moved, been renamed or replaced which would require manual intervention on your behalf where 2to3 utility could not make the required changes.

Writing scripts to work in both Python 2 and Python 3

The following tips will help greatly in ensuring a Python script will work in both ArcMap and ArcGIS Pro as long as the tools referenced in the script are available in the ArcGIS Pro version of arcpy. By making these practices a habit when scripting in the Python 2 environment, you will greatly ease the transition into the world of Python 3.

  • Tip 1:

Adding the following line to the top of your script will import some of the new rules enforced in Python 3 to your Python 2 script:



The print statement has been replaced with the print function. This function is also available in Python 2 and by using it you ensure your scripts will work in both environments.



Python 3 handles division of integers in a more natural line of thinking. This is one of my favourite new things as it makes things far less confusing for people just starting out with Python.

Python 2: 3/2 = 1
Python 3: 3/2 = 1.5

If you find you need to use the old truncating division, you can simply use ‘//’ instead of ‘/’.


The behavior in Python 3 means that by default top level imports are honoured. Lower level imports need to be explicitly stated. This relates to complex scripts referencing other scripts and for the most part will not affect the majority of users. For more on the implications of this click here.


String literals are unicode on Python 3 and making them unicode on Python 2 leads to more consistency of your string types across the two runtimes. This can make it easier to understand and debug your code!

Basically “Some string” in Python 3 is now equivalent to u”Some string” in Python 2.

If you want to use 8-bit strings like the default in Python 2, simply place a ‘b’ in front of it and you’re good to go.

  • Tip 2:

Import known modules with changes in the following fashion to ensure that the required functionality will be available within your script:


Cheat sheet to changes in Python 3

  • Adding the following line at the top of your script will enforce encoding within your script in Python 3 as it’s parsed to utf-8: PythonInPro34_5

You no longer have to cast to string in Python 3 – anything within quotation marks will explicitly be treated as an encoded string of the document’s encoding type!

  • Exceptions are no longer iterable, you are required to use the exception attribute args to print messages:


  • int and long types have been merged. Before, one could simply write 5L and the 5 would be a long integer, now this will give you a syntax error. If you explicitly need to set a long integer the following approach is required:


One of the foundations of the ArcGIS Platform is the concept of extensibility – the ability to allow users to extend the functionality of the software beyond it’s out-of-the box processing capabilities to suit the required workflow. The Python scripting language lends itself very effectively to this end. Using some of the tips outlined in this post you’ll be well on your way towards producing adaptable Python scripts that speak to the needs of users within multiple environments.

Happy scripting!