Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Esri DevSummit 2015 - ArcGIS for Server: Publis...

Esri DevSummit 2015 - ArcGIS for Server: Publishing and Using Map Services

Esri DevSummit 2015 - ArcGIS for Server: Publishing and Using Map Services technical workshop slides

Craig Williams

March 11, 2015
Tweet

More Decks by Craig Williams

Other Decks in Technology

Transcript

  1. Agenda • Platform overview • Publishing services - Demo: Publishing

    hosted feature service • Map services - Demo: layer IDs, dynamic layers, query statistics, query layers • Standardized queries with services • Questions
  2. The ArcGIS Platform • Online / Portal • Desktop •

    Server • Apps • Developer • Solutions Desktop Web Device Server Online Content and Services Online / Portal
  3. Information Sharing is Critical Transparency and easy information access are

    now expected… Users Search & Use . . . Sharing With a Group, Organization, or the Open Web
  4. Sharing as Services • Our goal: make it easier to

    share GIS resources - Unified sharing experience - Comprehensive analysis - Sharing to servers in the enterprise and to ArcGIS Online / Portal Professional to Everyone ArcGIS
  5. Sharing as Services ArcGIS Online / Portal ArcGIS Server On

    The Cloud ArcGIS Server On-premises Desktop
  6. Hosted Mapping on ArcGIS Online • Sharing the easy way

    - No Server to buy, install, or maintain - Scales automatically - No Firewall or IT issues • Limitations - Only Tiled Map and Feature Services supported - Data is private to each service ArcGIS
  7. ArcGIS Server in the Enterprise • Recent improvements - Successful

    publishing of shared data - Comprehensive analysis - Simple publishing with copying of data • When to use? - Need the full functionality of ArcGIS Server - Want full control over all hard and software - Want to publish services on live, shared data
  8. ArcGIS Server Data Stores • Server has a list of

    registered Data Stores • Data Store is of type - Enterprise Geodatabase - Folder - Tip: register top-most folder level possible for maximal benefit • Access to the Data Store is validated during registration - On all machines in the site • Replicated data stores for separate data instances - Tip: Read Help Topic About registering your data with the server Data Stores are a key concept for publishing to ArcGIS Server
  9. Service Definition (.sd) • File format for publishing all services

    - For all services (Map, Geoprocessing, etc.) • Contains everything required to create a service: - GIS resources (Map, Globe, etc.) - embeddable fonts (if needed) - Service Configuration - Data (if it needs to be copied to the server) • Uploaded to the server when publishing • Can be saved and published later - Using Catalog or Server Manager
  10. Review of Map Services Since ArcGIS 10.1 • One unified

    map service - An updated optimized map service - Supports additional capabilities, data types, layers, renderers • New extension capabilities: - Network Analysis • Can be used to display Geoprocessing results Application ArcGIS Server Map Server http
  11. Preserving Layer/Table IDs Layer/Table IDs do not change when map

    service is republished Service directory 3 5 With immutable layers Without immutable layers Re-publish • Introduced at 10.3 • This ensures that Layer IDs are unique (as usual) • and preserves the IDs originally assigned
  12. Preserving Layer/Table IDs How to enable? In ArcMap, set Data

    Frame Properties … In the Layer Properties you can assign your own ID if you like. ArcGIS will ensure it is unique. By default the option is unchecked
  13. Preserving Layer/Table IDs Things to remember • You can now

    add, remove, shuffle layers • Your layer IDs will remain and your apps won’t break • You need to republish …
  14. Pagination (ver 10.3) • Check the layer/table resources to make

    sure it support pagination • Two properties are added to the Query operation
  15. • Supported data sources - Most enterprise databases e.g. SQL

    Server (ver 2012+), Oracle, PostgreSQL - QueryLayer • FileGDBs support at 10.3.1 • File based datasource e.g. Shape files do not support pagination Pagination (ver 10.3)
  16. Query by Distance and ReturnExtents (ver 10.3.1) • Check the

    layer/table resources to make sure it support pagination • 3 properties are added to the Query operation
  17. How to enable dynamicLayer? Change layer’s renderer Add new layer

    Use client side data with map service Query layer MapService: DynamicLayers
  18. Dynamic Layers: The Concept • Capability with the map service

    that allows for per-request changes to the map - Optional capability of map services • Allows for: - Updating renderers and symbols - Removing and reordering layers - Changing layer data sources - Adding new layers from registered data sources
  19. Dynamic Layers: Use Cases • Simple updates to the map

    service - Remove layers or reorder layers • Thematic mapping - Updates to renderers • Adding content to the map service - Add data from registered workspaces - Including query layers • Add to the map on a per-request basis - ArcGIS APIs handle this for you Application Map Service REST Workspaces http json
  20. Thematic Mapping • Special case of dynamic layers supported via

    - Ability to change renderer - Ability to change data sources – including joins - Map service API for constructing renderer classes • Generate renderer operation - Supports class breaks and unique value class generation - Popular classification types from ArcGIS for Desktop
  21. Thematic Mapping • When do I use dynamic layers instead

    of feature layers on the client for thematic mapping? - large number of features - complex geometries that cannot be generalized - when it provides a performance advantage • Each approach has tradeoffs - e.g. Client side features scale better and provide more interactive behavior - Generate renderer can be used with both approaches When to use?
  22. Dynamic Layers • See the topic About dynamic layers in

    the ArcGIS Server help • REST API – See the Dynamic Layer / Table resource help More Information
  23. Getting aggregated values in a Query result in Map Services

    • Support for order by, output statistics, and group by statistics was added for both layers / tables - count | sum | min | max | avg | std dev | var • Additional query capabilities - Optional ability to return M and Z values for features - Can query a specific geodatabase version - Query response contains a flag when maxRecordCount was reached by the query
  24. Database Agnostic Way to Query • One SQL syntax runs

    against all databases! - e.g. one date query syntax --- YEAH! - incident_time = date '3/16/2000 3:45:47 PM‘ - upper(name) = ‘JOHN EDWARD’ • Based on SQL92 query syntax and functions - Does not accept any DB vendor specific queries - http://resources.arcgis.com/en/help/main/10.2/index.html#/Supported_SQL_functions_ in_ArcGIS_Server/015400000686000000/ • StandardizedQuery is turned on by default Standardized Queries - Introduced at ArcGIS 10.2
  25. Database Agnostic Way to Query • Limitations at 10.2 -

    Only a subset of functions available - Not supported for - Joined table/layer from multiple workspaces or OLE DB tables • Server level property - To switch back: - http://<server>/arcgis/admin/system/properties/update - {"standardizedQueries":"false"} Standardized Queries - Introduced at ArcGIS 10.2
  26. Modify drawingInfo: Change layer’s renderer Define layer’s labels Add new

    layer Use client side data with map service Query layer Sample Code Appendix
  27. Dynamic Layers: Generate Renderer REST request http://esriurl.com/5978 http://.../MapServer/2/generateRenderer? classificationDef =

    { "type": "classBreaksDef", "classificationField": "POP2007", "classificationMethod": "esriClassifyQuantile", "breakCount": 5, "colorRamp": { "type": "algorithmic", "fromColor": [255, 255, 255, 255], "toColor": [0, 0, 255, 255 ], "algorithm": "esriCIELabAlgorithm" } }
  28. Dynamic Layers: Update Renderer REST request http://esriurl.com/5979 http://.../Census/MapServer/export?....& dynamicLayers =

    [ { "source": { "type": "mapLayer", "mapLayerId": 0 }, "drawingInfo": { "renderer": { "type": "classBreaks", "field": "POP2007", "classBreakInfos": [ … ] } } ]
  29. Dynamic Layers: Dynamic Labeling REST request http://esriurl.com/8900 http://.../Census/MapServer/export?....& dynamicLayers =

    [ { "source": { "type": "mapLayer", "mapLayerId": 2 }, "drawingInfo": { ... }, "showLabels": true, "labelingInfo": [ { "labelExpression": "[POP2000]", "labelPlacement": "esriServerPolygonPlacementAlwaysHorizontal", "symbol": { ... } } ] } ] Help on LabelExpression: htttp://esriurl.com/8903
  30. Dynamic Layers: Generate Renderer JavaScript API code http://esriurl.com/5968 var generateRenderer

    = new esri.tasks.GenerateRendererTask("http://serv../cens/MapServer/2"); var params = new esri.tasks.GenerateRendererParameters(); params.classificationDefinition = classDef; generateRenderer.execute(params, applyRenderer, errorHandler) 1 2 3
  31. Dynamic Layers: Update Renderer JavaScript API code http://esriurl.com/8901 generateRenderer.execute(params, applyRenderer,

    errorHandler); function applyRenderer(renderer) { var drawingOptions = new esri.layers.LayerDrawingOptions(); drawingOptions.renderer = renderer; optionsArray[2] = drawingOptions; usaLayer.setLayerDrawingOptions(optionsArray); usaLayer.show(); } 1 2
  32. Dynamic Layers: Dynamic Labeling JavaScript API code http://esriurl.com/8902 var drawingOptions

    = new LayerDrawingOptions(); var labelClass = new LabelClass( { labelExpression: ' "Name: " CONCAT [CNTY_FIPS] CONCAT NEWLINE CONCAT "Count: " CONCAT [POP2000] '}); labelClass.labelPlacement = "always-horizontal"; labelClass.symbol = new TextSymbol( { font: new Font("12", Font.STYLE_NORMAL, Font.VARIANT_NORMAL,Font.WEIGHT_BOLD,"Arial"), color: new Color("#666633"), horizontalAlignment: "left" }); drawingOptions.labelingInfo = [labelClass]; drawingOptions.showLabels = true;
  33. Dynamic Layers: Add Layer from Registered Workspace REST request http://esriurl.com/5980

    http://.../USA/MapServer/export?....& dynamicLayers = [ { "id": 104, "source": { "type": "dataLayer", "dataSource": { "type": "table", "workspaceId": "MyDatabaseWorkspaceIDSSR2", "dataSourceName": "ss6.gdb.Lakes" } }, "drawingInfo": {…} } ]
  34. Dynamic Layers: Add Layer from Registered Workspace JavaScript API code

    http://esriurl.com/5974 var dynamicLayerInfos = usaLayer.createDynamicLayerInfosFromLayerInfos(); var dataSource = new esri.layers.TableDataSource(); dataSource.workspaceId = "MyDatabaseWorkspaceIDSSR2"; dataSource.dataSourceName = "egdb.DBADMIN.USLakes"; var layerSource = new esri.layers.LayerDataSource(); layerSource.dataSource = dataSource; var dynamicLayerInfo = new esri.layers.DynamicLayerInfo(); dynamicLayerInfo.source = layerSource; dynamicLayerInfos.splice(0, 0, dynamicLayerInfo); usaLayer.setDynamicLayerInfos(dynamicLayerInfos); 1 2 3 4
  35. Dynamic Layers: Add Query Layer REST request http://esriurl.com/5982 http://.../USA/MapServer/export?....& dynamicLayers

    = [ { "source": { "type": "dataLayer", "dataSource": { "type": "queryTable", "workspaceId": "MyDatabaseWorkspaceIDSSR2", "query": "SELECT * FROM ss6.gdb.Lakes", "oidFields": "objectid", "geometryType": "esriGeometryPolygon", "spatialReference": { "wkid": 4326 } } }, "drawingInfo": {…} } ]
  36. Dynamic Layers: Add Query Layer JavaScript API code http://esriurl.com/5977 var

    dynamicLayerInfos = usaLayer.createDynamicLayerInfosFromLayerInfos(); var queryDataSource = new esri.layers.QueryDataSource(); queryDataSource.workspaceId = "MyDatabaseWorkspaceIDSSR2"; queryDataSource.query = "SELECT * FROM ss6.gdb.Lakes"; queryDataSource.oidFields = ["objectid"] ; queryDataSource.geometryType = "polygon"; queryDataSource.spatialReference = new esri.SpatialReference({wkid:4326}); layerSource.dataSource = queryDataSource; var dynamicLayerInfo = new esri.layers.DynamicLayerInfo(); dynamicLayerInfo.source = layerSource; dynamicLayerInfos.splice(0, 0, dynamicLayerInfo); usaLayer.setDynamicLayerInfos(dynamicLayerInfos); 1 2 3 4
  37. SQL Query to Compute Population Mean Center select 1 as

    oid, geometry::Point( sum(a.shape.STCentroid().STX * b.Yr_1930) / sum(b.Yr_1930), sum(a.shape.STCentroid().STY * b.Yr_1930) / sum(b.Yr_1930), '102008') as shape from STATES as a inner join USPOP1900TO2013 as b on a.STATE_ABBR = b.STATE_ABBR select 1 as oid, geometry::Point( sum(a.shape.STCentroid().STX * b.Yr_1930) / sum(b.Yr_1930), sum(a.shape.STCentroid().STY * b.Yr_1930) / sum(b.Yr_1930), '102008') as shape from STATES as a inner join USPOP1900TO2013 as b on a.STATE_ABBR = b.STATE_ABBR