{"id":1480432,"date":"2022-02-11T09:37:16","date_gmt":"2022-02-11T17:37:16","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1480432"},"modified":"2024-04-12T03:49:28","modified_gmt":"2024-04-12T10:49:28","slug":"arcgis-runtime-create-hillshade-effects-with-geospatial-code","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code","title":{"rendered":"ArcGIS Runtime: Create hillshade effects with geospatial code"},"author":10242,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23771,738191],"tags":[662971,29101,32321,29381],"industry":[],"product":[761642,36561,36901,763892],"class_list":["post-1480432","blog","type-blog","status-publish","format-standard","hentry","category-3d-gis","category-developers","tag-arcgis-runtime-sdk-for-java","tag-code","tag-hillshade","tag-scene","product-platform","product-arcgis-pro","product-api-java","product-runtime-sdk"],"acf":{"short_description":"Learn how to use the ArcGIS Runtime API for Java to apply a hillshade effect to raster data, and create a 3D surface from it.","flexible_content":[{"acf_fc_layout":"content","content":"<p style=\"text-align: center;\"><strong><em>This is the first in a series of blog posts intended for GIS professionals who have an interest in learning how to code geospatial workflows, using Esri&#8217;s ArcGIS Runtime API for Java.<\/em><\/strong><\/p>\n<p style=\"text-align: center;\"><strong><em>In this blog, I&#8217;ll share a bite-sized geospatial code workflow to apply a hillshade renderer to open source LiDAR data in 3D.<\/em><\/strong><\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1481232,"id":1481232,"title":"HillshadeRendererOnArran","filename":"HillshadeRendererOnArran.png","filesize":324264,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeRendererOnArran.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\/hillshaderendereronarran","alt":"Hillshade renderer applied to raster data of the Isle of Arran, Scotland","author":"10242","description":"","caption":"Mountains of the Isle of Arran, Scotland, using 1m resolution open source LiDAR data to create a realistic hillshade effect, with a low angle light source simulating sunset. The view is north oriented. Made using ArcGIS Runtime API for Java, data Copyright Scottish Government and SEPA (2014).","name":"hillshaderendereronarran","status":"inherit","uploaded_to":1480432,"date":"2022-02-14 13:00:31","modified":"2022-02-16 11:54: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":824,"height":370,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeRendererOnArran-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeRendererOnArran.png","medium-width":464,"medium-height":208,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeRendererOnArran.png","medium_large-width":768,"medium_large-height":345,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeRendererOnArran.png","large-width":824,"large-height":370,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeRendererOnArran.png","1536x1536-width":824,"1536x1536-height":370,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeRendererOnArran.png","2048x2048-width":824,"2048x2048-height":370,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeRendererOnArran.png","card_image-width":824,"card_image-height":370,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeRendererOnArran.png","wide_image-width":824,"wide_image-height":370}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Falling in love with hillshade<\/h2>\n<p>The first cartographic technique I really fell in love with during my early career as a geologist was that of applying hillshade renderers to <a href=\"https:\/\/www.esri.com\/en-us\/arcgis\/products\/imagery-remote-sensing\/capabilities\/management\">raster data<\/a>. I love how they transform a dull, flat, greyscale raster into life as a realistic 3D landscape with depth and dimension, using highlights and shadows. It is an invaluable tool in picking out subtle landscape features during the desk study phase of any geological investigation, and was one of my favourite tools when using ArcGIS Pro (well, ArcMap at the time!). Many an hour disappeared playing with the settings to maximise low-lying topographical features (e.g. glacially formed eskers or moraines) that could later become the focus of a field survey.<\/p>\n<p>When I joined the ArcGIS Runtime API for Java team as a product engineer, I was delighted to discover much of the functionality I loved from ArcGIS Pro was present in their rich geospatial API.<\/p>\n<h3>Hillshade Rendering: ArcGIS Pro vs ArcGIS Runtime<\/h3>\n<p>There are many great blogs\/tutorials out there on <a href=\"https:\/\/www.esri.com\/about\/newsroom\/arcuser\/create-amazing-hillshade-effects-quickly-and-easily-in-arcgis-pro\/\">hillshade rendering<\/a> in Esri&#8217;s flagship product ArcGIS Pro, so I won&#8217;t detail that here. Instead, I&#8217;ll share an alternative, coded approach to using ArcGIS Pro to achieve similar visually stunning hillshaded results using ArcGIS Runtime.<\/p>\n<p>I&#8217;ll show how easy it is to:<\/p>\n<ol>\n<li>Load raster data into a desktop application using the <a href=\"https:\/\/developers.arcgis.com\/java\/\">ArcGIS Runtime API for Java<\/a><\/li>\n<li>Apply a hillshade renderer to it<\/li>\n<li>Create a 3D visually realistic virtual landscape<\/li>\n<\/ol>\n<p>The results are as you would expect from ArcGIS Pro (see image below for generalised workflow comparison), but with the added fun of you getting to code it up yourself and customise your application however you want.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1481242,"id":1481242,"title":"ArcGISProRuntimeComparisonArran","filename":"ArcGISProRuntimeComparisonArran.png","filesize":304238,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/ArcGISProRuntimeComparisonArran.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\/arcgisproruntimecomparisonarran","alt":"Flow chart comparing the ArcGIS Pro workflow with the ArcGIS Runtime API for Java workflow","author":"10242","description":"","caption":"","name":"arcgisproruntimecomparisonarran","status":"inherit","uploaded_to":1480432,"date":"2022-02-14 13:01:38","modified":"2022-02-16 11:55:01","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":824,"height":499,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/ArcGISProRuntimeComparisonArran-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/ArcGISProRuntimeComparisonArran.png","medium-width":431,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/ArcGISProRuntimeComparisonArran.png","medium_large-width":768,"medium_large-height":465,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/ArcGISProRuntimeComparisonArran.png","large-width":824,"large-height":499,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/ArcGISProRuntimeComparisonArran.png","1536x1536-width":824,"1536x1536-height":499,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/ArcGISProRuntimeComparisonArran.png","2048x2048-width":824,"2048x2048-height":499,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/ArcGISProRuntimeComparisonArran-768x465.png","card_image-width":768,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/ArcGISProRuntimeComparisonArran.png","wide_image-width":824,"wide_image-height":499}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Data<\/h2>\n<p>I&#8217;m using the open source Scottish Public Sector LiDAR data from the <a href=\"https:\/\/remotesensingdata.gov.scot\/\">Scottish Remote Sensing Portal<\/a>, made available under the Open Government Licence v3 (<em>copyright Scottish Government and SEPA (2014)<\/em>).<\/p>\n<p>This is an amazing resource with\u00a0incredibly detailed data sets covering parts of Scotland, including complete 1m resolution coverage of the Isle of Arran (via the LiDAR for Scotland Phase II DTM dataset). Arran is a geological playground with spectacular varied topography, and having this caliber of data freely and openly available to play with is amazing. Let&#8217;s jump in!<\/p>\n<h2>Geospatial code and hillshade: using ArcGIS Runtime API for Java<\/h2>\n<p><em>In this blog, I&#8217;ll be dropping straight in to our geospatial code in a Java class to show you how to set up a hillshade renderer. If you want to learn more about setting up an application using the ArcGIS Runtime API for Java, see our <a href=\"https:\/\/developers.arcgis.com\/java\/maps-2d\/tutorials\/display-a-map\/\">getting started tutorial<\/a>.<\/em><\/p>\n<p><em>Note: whilst I&#8217;m using the Java API in this blog, please note a<\/em><em>ny of the <a href=\"https:\/\/developers.arcgis.com\/documentation\/mapping-apis-and-services\/apis-and-sdks\/#native-apis\">ArcGIS Runtime APIs<\/a>, including the mobile ones, can be used in the same way.<\/em><\/p>\n<p>To begin, we need a 3D space to create, display and render our data.<\/p>\n<p>Start by creating an <code>ArcGISScene<\/code> class along with a new <code>SceneView<\/code>. The <code>ArcGISScene<\/code> is the equivalent of a 3D scene in ArcGIS Pro, and hosts layers that can be displayed in 3D. The <code>SceneView<\/code> is the user interface that displays scene layers and graphics in 3D, and is the equivalent of the view pane in ArcGIS Pro.<\/p>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\"><span style=\"color: #008000;\">\/\/ create a scene and scene view<\/span>\r\nvar scene = <span style=\"color: #0000ff;\">new<\/span> ArcGISScene();\r\nvar sceneView = <span style=\"color: #0000ff;\">new<\/span> SceneView();\r\n<\/pre>\n<\/div>\n<p>Next, reference the data in the class (you can either download your own data, or access the LiDAR tiles for Arran via a <a href=\"https:\/\/arcgisruntime.maps.arcgis.com\/home\/item.html?id=ce99a45b9e664b4ebe3cb1cedf552b1d\">hosted open item on ArcGIS Online<\/a>):<\/p>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\">List&lt;String&gt; geoTiffFiles = <span style=\"color: #0000ff;\">new<\/span> ArrayList&lt;&gt;(Arrays.asList(\r\n  <span style=\"color: #0000ff;\">new<\/span> File(<span style=\"color: #a31515;\">\".\/data\/arran-lidar-data\/NS02_1M_DTM_PHASE2.tif\"<\/span>).getAbsolutePath(),\r\n  <span style=\"color: #0000ff;\">new<\/span> File(<span style=\"color: #a31515;\">\".\/data\/arran-lidar-data\/NS03_1M_DTM_PHASE2.tif\"<\/span>).getAbsolutePath(),\r\n  <span style=\"color: #0000ff;\">new<\/span> File(<span style=\"color: #a31515;\">\".\/data\/arran-lidar-data\/NS04_1M_DTM_PHASE2.tif\"<\/span>).getAbsolutePath(),\r\n  <span style=\"color: #0000ff;\">new<\/span> File(<span style=\"color: #a31515;\">\".\/data\/arran-lidar-data\/NR82_1M_DTM_PHASE2.tif\"<\/span>).getAbsolutePath(),\r\n  <span style=\"color: #0000ff;\">new<\/span> File(<span style=\"color: #a31515;\">\".\/data\/arran-lidar-data\/NR83_1M_DTM_PHASE2.tif\"<\/span>).getAbsolutePath(),\r\n  <span style=\"color: #0000ff;\">new<\/span> File(<span style=\"color: #a31515;\">\".\/data\/arran-lidar-data\/NR84_1M_DTM_PHASE2.tif\"<\/span>).getAbsolutePath(),\r\n  <span style=\"color: #0000ff;\">new<\/span> File(<span style=\"color: #a31515;\">\".\/data\/arran-lidar-data\/NR93_1M_DTM_PHASE2.tif\"<\/span>).getAbsolutePath(),\r\n  <span style=\"color: #0000ff;\">new<\/span> File(<span style=\"color: #a31515;\">\".\/data\/arran-lidar-data\/NR92_1M_DTM_PHASE2.tif\"<\/span>).getAbsolutePath(),\r\n  <span style=\"color: #0000ff;\">new<\/span> File(<span style=\"color: #a31515;\">\".\/data\/arran-lidar-data\/NR94_1M_DTM_PHASE2.tif\"<\/span>).getAbsolutePath(),\r\n  <span style=\"color: #0000ff;\">new<\/span> File(<span style=\"color: #a31515;\">\".\/data\/arran-lidar-data\/NR95_1M_DTM_PHASE2.tif\"<\/span>).getAbsolutePath()\r\n));<\/pre>\n<\/div>\n<p>The raster data at this stage has no hillshade renderer applied: the topographical detail in the digital terrain model is visible but ghostly. We need a hillshade renderer to draw out the topographical features and make the stunning landscape of Arran <strong>pop<\/strong>!<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1481252,"id":1481252,"title":"2DPreHillshadeArran","filename":"2DPreHillshadeArran-e1644941142417.png","filesize":117520,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DPreHillshadeArran-e1644941142417.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\/2dprehillshadearran","alt":"Digital terrain model of Arran, created using ArcGIS Runtime API for Java","author":"10242","description":"","caption":"Digital terrain model of Arran (no hillshade renderer applied). Data Copyright Scottish Government and SEPA (2014).","name":"2dprehillshadearran","status":"inherit","uploaded_to":1480432,"date":"2022-02-14 13:02:54","modified":"2022-02-16 11:55:12","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":290,"height":476,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DPreHillshadeArran-e1644941142417.png","thumbnail-width":122,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DPreHillshadeArran-e1644941142417.png","medium-width":159,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DPreHillshadeArran-e1644941142417.png","medium_large-width":290,"medium_large-height":476,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DPreHillshadeArran-e1644941142417.png","large-width":290,"large-height":476,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DPreHillshadeArran-e1644941142417.png","1536x1536-width":290,"1536x1536-height":476,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DPreHillshadeArran-e1644941142417.png","2048x2048-width":290,"2048x2048-height":476,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DPreHillshadeArran-e1644941142417.png","card_image-width":283,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DPreHillshadeArran-e1644941142417.png","wide_image-width":290,"wide_image-height":476}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h3>Hillshade renderer settings<\/h3>\n<p>Now for the fun part! The hillshade renderer parameters are set up via the constructor for a new <code>HillshadeRenderer<\/code> class. If you are familiar with ArcGIS Pro&#8217;s hillshade toolset, you&#8217;ll recognise the <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/tool-reference\/3d-analyst\/how-hillshade-works.htm\">same parameters:<\/a><\/p>\n<ul>\n<li><code>altitude<\/code> &#8211; light&#8217;s angle of elevation above the horizon, in degrees<\/li>\n<li><code>azimuth<\/code> &#8211; light&#8217;s relative angle along the horizon, in degrees; measured clockwise, 0 is north<\/li>\n<li><code>zFactor<\/code> &#8211; factor to convert z unit to x,y units<\/li>\n<\/ul>\n"},{"acf_fc_layout":"image","image":{"ID":1484912,"id":1484912,"title":"HillshadeCartoon_Arran","filename":"HillshadeCartoon_Arran.png","filesize":214105,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeCartoon_Arran.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\/hillshadecartoon_arran","alt":"Cartoon demonstrating hillshade settings","author":"10242","description":"","caption":"","name":"hillshadecartoon_arran","status":"inherit","uploaded_to":1480432,"date":"2022-02-16 16:22:09","modified":"2022-02-16 16:22:18","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":824,"height":534,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeCartoon_Arran-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeCartoon_Arran.png","medium-width":403,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeCartoon_Arran.png","medium_large-width":768,"medium_large-height":498,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeCartoon_Arran.png","large-width":824,"large-height":534,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeCartoon_Arran.png","1536x1536-width":824,"1536x1536-height":534,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeCartoon_Arran.png","2048x2048-width":824,"2048x2048-height":534,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeCartoon_Arran-718x465.png","card_image-width":718,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/HillshadeCartoon_Arran.png","wide_image-width":824,"wide_image-height":534}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>I&#8217;ll choose parameters that mimic sunset conditions in early winter, to create a visually striking hillshade effect and emphasize the deepening shadows in the valleys of the Isle of Arran before the sun falls below the horizon:<\/p>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: .2em .6em; border: solid gray; border-width: .0em .0em .0em .2em; margin: 0; line-height: 125%; font-size: 15px;\">var hillshadeRenderer = <span style=\"color: #0000ff;\">new<\/span> HillshadeRenderer(10, 210, 1); <span style=\"color: #008000;\">\/\/ altitude, azimuth, zFactor<\/span>\r\n<\/pre>\n<\/div>\n<p>This hillshade renderer instance can be applied to multiple raster layers, which we have to programatically make from the data.<\/p>\n<p>Loop over each GeoTIFF. For each one of them, create a new <code>Raster<\/code>, and then create a <code>RasterLayer<\/code> from the raster. A <code>Raster<\/code> class represents raster data that can be rendered using a <code>RasterLayer<\/code>, and in this demo&#8217;s case, can be created from a raster file on device. A <code>RasterLayer<\/code> is required to display raster data in the scene.<\/p>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\"><span style=\"color: #0000ff;\">for<\/span> (String geoTiffFile : geoTiffFiles) {\r\n\r\n  <span style=\"color: #008000;\">\/\/ create a raster from every GeoTIFF<\/span>\r\n  var raster = <span style=\"color: #0000ff;\">new<\/span> Raster(geoTiffFile);\r\n  <span style=\"color: #008000;\">\/\/ create a raster layer from the raster<\/span>\r\n  var rasterLayer = <span style=\"color: #0000ff;\">new<\/span> RasterLayer(raster);\r\n}\r\n<\/pre>\n<\/div>\n<p>Now we can apply the hillshade renderer to the raster layers, and add them to the <code>ArcGISScene<\/code>&#8216;s collection of operational layers in order to display them in the scene:<\/p>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\"><span style=\"color: #008000;\">\/\/ set a hillshade renderer to the raster layer<\/span>\r\nrasterLayer.setRasterRenderer(hillshadeRenderer);\r\n<span style=\"color: #008000;\">\/\/ add the raster layer to the scene's operational layers<\/span>\r\narcGISScene.getOperationalLayers().add(rasterLayer);\r\n<\/pre>\n<\/div>\n<p>The hillshade renderer is applied, and the raster data is displayed on the scene. It looks great, just like you&#8217;d expect from the equivalent ArcGIS Pro hillshade toolset. Already, features in the landscape are <strong>popping<\/strong>\u00a0into life in the same exciting way I remember from my ArcGIS Pro days.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1481272,"id":1481272,"title":"2DHillshadeRendererGlenRosa","filename":"2DHillshadeRendererGlenRosa.png","filesize":372393,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DHillshadeRendererGlenRosa.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\/2dhillshaderendererglenrosa","alt":"Hillshade renderer over Glen Rosa, Arran, created using ArcGIS Runtime API for Java","author":"10242","description":"","caption":"The hillshade renderer is applied to the raster data, creating a visual 3D effect. This view, oriented north, is looking directly down on to the bowl shaped glacial corrie at the head of Glen Rosa, Arran. Data Copyright Scottish Government and SEPA (2014).","name":"2dhillshaderendererglenrosa","status":"inherit","uploaded_to":1480432,"date":"2022-02-14 13:05:56","modified":"2022-02-16 11:55:35","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":824,"height":475,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DHillshadeRendererGlenRosa-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DHillshadeRendererGlenRosa.png","medium-width":453,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DHillshadeRendererGlenRosa.png","medium_large-width":768,"medium_large-height":443,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DHillshadeRendererGlenRosa.png","large-width":824,"large-height":475,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DHillshadeRendererGlenRosa.png","1536x1536-width":824,"1536x1536-height":475,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DHillshadeRendererGlenRosa.png","2048x2048-width":824,"2048x2048-height":475,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DHillshadeRendererGlenRosa-807x465.png","card_image-width":807,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/2DHillshadeRendererGlenRosa.png","wide_image-width":824,"wide_image-height":475}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Creating a 3D surface from raster data<\/h2>\n<p>The final bonus twist in this bitesized geospatial coding tale is to make full use of the GeoTIFF data. Not only can we make the landscape <em>look<\/em> 3D, but we can actually <strong>make<\/strong>\u00a0it 3D, by creating a 3D surface.<\/p>\n<p>We do this by instantiating a new <code>RasterElevationSource<\/code> with the list of GeoTIFFs provided as a parameter. Create a new <code>Surface<\/code>, get its list of elevation sources and add the <code>rasterElevationSource<\/code> to it. Finally, set the surface as the base surface of the <code>ArcGISScene<\/code>:<\/p>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\"><span style=\"color: #008000;\">\/\/ create an elevation source from the GeoTIFF (raster) collection<\/span>\r\nvar rasterElevationSource = <span style=\"color: #0000ff;\">new<\/span> RasterElevationSource(geoTiffFiles);\r\n\r\n<span style=\"color: #008000;\">\/\/ create a surface, get its elevation sources, and add the raster elevation source to the collection<\/span>\r\nvar surface = <span style=\"color: #0000ff;\">new<\/span> Surface();\r\nsurface.getElevationSources().add(rasterElevationSource);\r\n<span style=\"color: #008000;\">\/\/ set the surface to the scene<\/span>\r\narcGISScene.setBaseSurface(surface);\r\n<\/pre>\n<\/div>\n"},{"acf_fc_layout":"image","image":{"ID":1481282,"id":1481282,"title":"3DSurfaceGoatFell","filename":"3DSurfaceGoatFell.png","filesize":278251,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/3DSurfaceGoatFell.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\/3dsurfacegoatfell","alt":"3D surface with hillshade renderer over Goatfell, Arran, created using ArcGIS Runtime API for Java geospatial code","author":"10242","description":"","caption":"The surface of the ArcGIS Scene is now truly 3D, with the GeoTIFF data used to create an elevation source. This view is oriented east, and is looking towards the western flank of the mountain of Goatfell, Arran. Data Copyright Scottish Government and SEPA (2014).","name":"3dsurfacegoatfell","status":"inherit","uploaded_to":1480432,"date":"2022-02-14 13:07:08","modified":"2022-02-16 11:55: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":824,"height":405,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/3DSurfaceGoatFell-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/3DSurfaceGoatFell.png","medium-width":464,"medium-height":228,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/3DSurfaceGoatFell.png","medium_large-width":768,"medium_large-height":377,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/3DSurfaceGoatFell.png","large-width":824,"large-height":405,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/3DSurfaceGoatFell.png","1536x1536-width":824,"1536x1536-height":405,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/3DSurfaceGoatFell.png","2048x2048-width":824,"2048x2048-height":405,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/3DSurfaceGoatFell.png","card_image-width":824,"card_image-height":405,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/3DSurfaceGoatFell.png","wide_image-width":824,"wide_image-height":405}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>And tada, that&#8217;s it! In only a few lines of geospatial code, a hillshade effect is rendered quickly and easily using the open source LiDAR data. We&#8217;ve also created a 3D surface, altogether creating a simple, high resolution 3D digital twin of the topography of the Isle of Arran. All in code, using the ArcGIS Runtime API for Java.<\/p>\n<p><strong>You can also find the source code for this blog on <a href=\"https:\/\/github.com\/Esri\/arcgis-runtime-java-demos\/tree\/main\/create-hillshade-effects\">Github<\/a>: clone this to run the application on your machine.<\/strong><\/p>\n<h2>Summary<\/h2>\n<p>As when using ArcGIS Pro, visual analysis of this data running in an ArcGIS Runtime native application is invaluable for desktop studies. You can customise this application even further by exploring the functionality that the <a href=\"https:\/\/developers.arcgis.com\/documentation\/mapping-apis-and-services\/apis-and-sdks\/#native-apis\">native geospatial APIs from Esri<\/a> give you, or integrate it into your workflow to create powerful geospatial applications.<\/p>\n<p>If you&#8217;re a GIS professional interested in coding, I hope you feel inspired and empowered to give it a go!<\/p>\n<h2>Where next?<\/h2>\n<p>In the next blog in this series, we&#8217;ll explore how to take this geospatial application further. In its current form, it acts as a 3D <a href=\"https:\/\/www.esri.com\/en-us\/digital-twin\/overview\">digital twin<\/a> of the landscape on Arran but the application has much more potential.<\/p>\n<p>For example, we can add a widget to dynamically change the hillshade renderer&#8217;s lighting angles\/azimuth to tease further features out of the landscape. Beyond visual effects, we can set viewpoints at key locations to navigate across the island for a virtual field trip&#8230;the possibilities are endless!<\/p>\n<p><em>If there&#8217;s another geospatial workflow you&#8217;d like to see translated from ArcGIS Pro to ArcGIS Runtime, please leave a comment.\u00a0<\/em><\/p>\n"}],"authors":[{"ID":10242,"user_firstname":"Rachael","user_lastname":"Ellen","nickname":"Rachael Ellen","user_nicename":"rellen","display_name":"Rachael Ellen","user_email":"rellen@esri.com","user_url":"https:\/\/dev.to\/rachaele\/","user_registered":"2019-11-29 11:58:45","user_description":"Rachael is a senior product engineer in the Developer Outreach team for the ArcGIS Maps SDKs for Native Apps. Following an academic career in geology, she switched careers by learning to code and now enjoys building apps with the Native Maps SDKs. She loves sharing code examples, fun geospatial development workflows and the latest product updates with developers via blogs and talks.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/01\/LinkedIn_Photo-465x465.jpeg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":[{"ID":526032,"post_author":"6971","post_date":"2019-06-13 13:32:04","post_date_gmt":"2019-06-13 20:32:04","post_content":"","post_title":"Throwing Shade","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"throwing-shade","to_ping":"","pinged":"","post_modified":"2019-06-17 07:31:22","post_modified_gmt":"2019-06-17 14:31:22","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=526032","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":1435482,"post_author":"294642","post_date":"2022-01-05 03:33:22","post_date_gmt":"2022-01-05 11:33:22","post_content":"","post_title":"Defining scale-based symbology using ArcGIS Runtime SDK","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"defining-scale-based-symbology-using-arcgis-runtime-sdk","to_ping":"","pinged":"","post_modified":"2024-04-12 03:50:16","post_modified_gmt":"2024-04-12 10:50:16","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1435482","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/ArranCard.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/BannerArran.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>ArcGIS Runtime: Create hillshade effects with geospatial code<\/title>\n<meta name=\"description\" content=\"Learn how to use the ArcGIS Runtime API for Java to apply a hillshade effect to raster data, and create a 3D surface from it.\" \/>\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\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ArcGIS Runtime: Create hillshade effects with geospatial code\" \/>\n<meta property=\"og:description\" content=\"Learn how to use the ArcGIS Runtime API for Java to apply a hillshade effect to raster data, and create a 3D surface from it.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\" \/>\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=\"2024-04-12T10:49:28+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\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\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\"},\"author\":{\"name\":\"Rachael Ellen\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/d12aeaaab25c748cdf66a320bf0e72cd\"},\"headline\":\"ArcGIS Runtime: Create hillshade effects with geospatial code\",\"datePublished\":\"2022-02-11T17:37:16+00:00\",\"dateModified\":\"2024-04-12T10:49:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\"},\"wordCount\":8,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"ArcGIS Runtime SDK for Java\",\"Code\",\"Hillshade\",\"scene\"],\"articleSection\":[\"3D Visualization &amp; Analytics\",\"Developers\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\",\"name\":\"ArcGIS Runtime: Create hillshade effects with geospatial code\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2022-02-11T17:37:16+00:00\",\"dateModified\":\"2024-04-12T10:49:28+00:00\",\"description\":\"Learn how to use the ArcGIS Runtime API for Java to apply a hillshade effect to raster data, and create a 3D surface from it.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ArcGIS Runtime: Create hillshade effects with geospatial code\"}]},{\"@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\/d12aeaaab25c748cdf66a320bf0e72cd\",\"name\":\"Rachael Ellen\",\"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\/2024\/01\/LinkedIn_Photo-465x465.jpeg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/01\/LinkedIn_Photo-465x465.jpeg\",\"caption\":\"Rachael Ellen\"},\"description\":\"Rachael is a senior product engineer in the Developer Outreach team for the ArcGIS Maps SDKs for Native Apps. Following an academic career in geology, she switched careers by learning to code and now enjoys building apps with the Native Maps SDKs. She loves sharing code examples, fun geospatial development workflows and the latest product updates with developers via blogs and talks.\",\"sameAs\":[\"https:\/\/dev.to\/rachaele\/\",\"https:\/\/www.linkedin.com\/in\/rachael-ellen-8a852729\/\",\"https:\/\/x.com\/Geolocoder\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/rellen\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ArcGIS Runtime: Create hillshade effects with geospatial code","description":"Learn how to use the ArcGIS Runtime API for Java to apply a hillshade effect to raster data, and create a 3D surface from it.","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\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code","og_locale":"en_US","og_type":"article","og_title":"ArcGIS Runtime: Create hillshade effects with geospatial code","og_description":"Learn how to use the ArcGIS Runtime API for Java to apply a hillshade effect to raster data, and create a 3D surface from it.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2024-04-12T10:49:28+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code"},"author":{"name":"Rachael Ellen","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/d12aeaaab25c748cdf66a320bf0e72cd"},"headline":"ArcGIS Runtime: Create hillshade effects with geospatial code","datePublished":"2022-02-11T17:37:16+00:00","dateModified":"2024-04-12T10:49:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code"},"wordCount":8,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["ArcGIS Runtime SDK for Java","Code","Hillshade","scene"],"articleSection":["3D Visualization &amp; Analytics","Developers"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code","name":"ArcGIS Runtime: Create hillshade effects with geospatial code","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2022-02-11T17:37:16+00:00","dateModified":"2024-04-12T10:49:28+00:00","description":"Learn how to use the ArcGIS Runtime API for Java to apply a hillshade effect to raster data, and create a 3D surface from it.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-java\/developers\/arcgis-runtime-create-hillshade-effects-with-geospatial-code#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"ArcGIS Runtime: Create hillshade effects with geospatial code"}]},{"@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\/d12aeaaab25c748cdf66a320bf0e72cd","name":"Rachael Ellen","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\/2024\/01\/LinkedIn_Photo-465x465.jpeg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2024\/01\/LinkedIn_Photo-465x465.jpeg","caption":"Rachael Ellen"},"description":"Rachael is a senior product engineer in the Developer Outreach team for the ArcGIS Maps SDKs for Native Apps. Following an academic career in geology, she switched careers by learning to code and now enjoys building apps with the Native Maps SDKs. She loves sharing code examples, fun geospatial development workflows and the latest product updates with developers via blogs and talks.","sameAs":["https:\/\/dev.to\/rachaele\/","https:\/\/www.linkedin.com\/in\/rachael-ellen-8a852729\/","https:\/\/x.com\/Geolocoder"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/rellen"}]}},"text_date":"February 11, 2022","author_name":"Rachael Ellen","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/rellen","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/02\/BannerArran.png","primary_product":"ArcGIS Runtime SDK for Java","tag_data":[{"term_id":662971,"name":"ArcGIS Runtime SDK for Java","slug":"arcgis-runtime-sdk-for-java","term_group":0,"term_taxonomy_id":662971,"taxonomy":"post_tag","description":"","parent":0,"count":3,"filter":"raw"},{"term_id":29101,"name":"Code","slug":"code","term_group":0,"term_taxonomy_id":29101,"taxonomy":"post_tag","description":"","parent":0,"count":8,"filter":"raw"},{"term_id":32321,"name":"Hillshade","slug":"hillshade","term_group":0,"term_taxonomy_id":32321,"taxonomy":"post_tag","description":"","parent":0,"count":31,"filter":"raw"},{"term_id":29381,"name":"scene","slug":"scene","term_group":0,"term_taxonomy_id":29381,"taxonomy":"post_tag","description":"","parent":0,"count":5,"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":686,"filter":"raw"},{"term_id":738191,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":738191,"taxonomy":"category","description":"","parent":0,"count":420,"filter":"raw"}],"product_data":[{"term_id":761642,"name":"ArcGIS Location Platform","slug":"platform","term_group":0,"term_taxonomy_id":761642,"taxonomy":"product","description":"","parent":36601,"count":213,"filter":"raw"},{"term_id":36561,"name":"ArcGIS Pro","slug":"arcgis-pro","term_group":0,"term_taxonomy_id":36561,"taxonomy":"product","description":"","parent":0,"count":2035,"filter":"raw"},{"term_id":36901,"name":"ArcGIS Runtime SDK for Java","slug":"api-java","term_group":0,"term_taxonomy_id":36901,"taxonomy":"product","description":"","parent":36601,"count":59,"filter":"raw"},{"term_id":763892,"name":"ArcGIS Runtime SDKs","slug":"runtime-sdk","term_group":0,"term_taxonomy_id":763892,"taxonomy":"product","description":"","parent":756692,"count":20,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=api-java","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/1480432","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\/10242"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=1480432"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/1480432\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=1480432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=1480432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=1480432"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=1480432"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=1480432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}