Skip To Content

CreateGeocodeSDDraft

Summary

The function converts a locator into a Service Definition Draft (.sddraft) file, which can be used to create a service definition for publishing a geocode service.

Caution:

Service Definition Draft (.sddraft) files must be converted into Service Definition (.sd) files before they can be used to publish to ArcGIS Server.

Note:

A draft service definition does not contain data. A draft service alone cannot be used to publish a service.

Discussion

CreateGeocodeSDDraft is the first step to automating the publishing of a locator to a geocode service using ArcPy. The output created from the CreateGeocodeSDDraft is a Service Definition Draft (.sddraft) file. A Service Definition Draft is the combination of locator properties, information about the server, and a set of service properties.

All geocode services require a locator. The locator is the main tool for geocoding in ArcGIS and contains all the data necessary to perform address matching. In ArcGIS Pro, you can use the Create Locator tool or the Create Address Locator tool to create a locator. For step-by-step instructions, refer to Create a locator. Composite locators, which combine many locators into one, can also be published to ArcGIS Server. For more information, see Fundamentals of combining multiple locators into a composite locator.

Information about the server includes the server connection, server type being published to, metadata for the service (Item info), and data references (whether or not data is being copied to the server).

Service properties include operations such as geocoding and reverse geocoding supported by the service, maximum number of candidates returned by the service when geocoding a single address, or the maximum number of records to be processed in each batch job when performing batch geocoding.

Note:

The pooling properties for the service, such as the minimum or maximum number of instances per machine, are not exposed as parameters for the function. If you need to modify the values (or any nonexposed parameter), you need to publish the .sddraft first and modify the draft by editing the .sddraft using XML libraries such as xml.dom.minidom. Refer to the examples of modifying anService Definition Draft file for the usage of the library. Although the example is from a map service draft, you can use the same library and method for the geocode service draft since it is an XML file.

The function returns a dictionary containing errors and other potential issues that you should address prior to creating your Service Definition file.

A Service Definition Draft file can be authored without knowing the specific server connection information. In this case, the connection_file_path parameter may be omitted; however, the server_type must be provided. A server connection can be provided later when the Service Definition Draft file is published using the Upload Service Definition tool.

The Service Definition Draft file can then be converted to a fully consolidated Service Definition (.sd) file using the Stage Service tool. Staging compiles all the necessary information needed to successfully publish the GIS resource. If your data is not registered with the server, the data will be added when the Service Definition Draft file is staged. Finally, the Service Definition file can be uploaded and published as a GIS service to a specified GIS server using the Upload Service Definition tool. This step takes the Service Definition file, copies it onto the server, extracts required information, and publishes the GIS resource. For more information, see the An overview of the Publishing toolset.

Syntax

CreateGeocodeSDDraft (loc_path, out_sddraft, service_name, {server_type}, {connection_file_path}, {copy_data_to_server}, {folder_name}, {summary}, {tags}, {max_result_size}, {max_batch_size}, {suggested_batch_size}, {supported_operations}, {overwrite_existing_service})
ParameterExplanationData Type
loc_path

A string that represents the catalog path to the locator files (.loc) in a file folder.

String
out_sddraft

A string that represents the path and file name for the output Service Definition Draft (.sddraft) file.

String
service_name

A string that represents the name of the service. This is the name people will see and use to identify the service. The name can only contain alphanumeric characters and underscores. No spaces or special characters are allowed. The name cannot be more than 120 characters in length.

String
server_type

A string representing the server type. If a connection_file_path parameter is not supplied, then a server_type must be provided. If a connection_file_path parameter is supplied, then the server_type is taken from the connection file. In this case, you can choose FROM_CONNECTION_FILE or skip the parameter entirely.

  • ARCGIS_SERVERArcGIS Server server type.
  • FROM_CONNECTION_FILEGet the server_type as specified in the connection_file_path parameter.

(The default value is ARCGIS_SERVER)

String
connection_file_path

A string that represents the path and file name to the ArcGIS Server connection file (.ags). A new connection file can be created using the CreateGISServerConnectionFile function.

Note:

In order to publish a geocoding service in ArcGIS Pro, you will need an .ags file that has been created with publisher or administrator credentials for ArcGIS Server 10.6 or later. You can create this required file using ArcGIS Pro and use the path to that file when publishing in ArcGIS Pro.

String
copy_data_to_server

A Boolean that indicates whether the data referenced in the locator will be copied to the server or not. The copy_data_to_server parameter is only used if the server_type is ARCGIS_SERVER and the connection_file_path isn't specified. If the connection_file_path is specified, then the server's registered data stores are used. For example, if the data in the locator is registered with the server, then copy_data_to_server will always be False. Conversely, if the data in the locator is not registered with the server, then copy_data_to_server will always be True.

(The default value is False)

Boolean
folder_name

A string that represents a folder name to which you want to publish the service definition. If the folder does not currently exist, it will be created when the service definition is published as a service. The default folder is the server root level.

(The default value is None)

String
summary

A string that represents the Item Description Summary.

Use this parameter to override the user interface summary, or to provide a summary if one does not exist.

(The default value is None)

String
tags

A string that represents the Item Description Tags.

Use this parameter to override the user interface tags, or to provide tags if they do not exist. To specify multiple tags, separate each tag with a comma within the string.

(The default value is None)

String
max_result_size

The maximum number of candidates returned by the service when geocoding a single address.

(The default value is 500)

Integer
max_batch_size

The maximum number of records to be processed in each batch job when performing batch geocoding.

(The default value is 1000)

Integer
suggested_batch_size

The recommended number of records to pass in each batch job when performing batch geocoding.

(The default value is 1000)

Integer
supported_operations
[supported_operations,...]

The built-in operations supported by the service. The parameter should be specified as a list containing one or more of the following string keywords:

  • GEOCODE—The service will allow geocoding operations.
  • REVERSE_GEOCODE—The service will allow reverse geocoding operations.
  • SUGGEST—The service will allow suggest operations.

For example, to specify that the service should only support geocoding operations and should not allow any reverse geocoding operations, the parameter should be specified as ["GEOCODE"].

(The default value is [GEOCODE, REVERSE_GEOCODE, SUGGEST])

String
overwrite_existing_service

A Boolean that indicates whether or not to overwrite an existing service on the server with the same service_name. If the service_name is unique, this parameter is not applicable.

Boolean
Return Value
Data TypeExplanation
Dictionary

Returns a dictionary of information messages, warnings, and errors.

Code sample

Publishing a geocode service

The following script demonstrates the complete workflow to publish an address locator as a geocode service. The first step in the publishing workflow is to create a service definition draft file (.sddraft) from the address locator using the CreateGeocodeSDDraft function. The next step is to create a service definition file (.sd) from the service definition draft file using the StageService function. The final step is to publish the service definition file as a service to a GIS server using the UploadServiceDefinition function.

import arcpy
import pprint

# Overwrite any existing outputs
arcpy.env.overwriteOutput = True

locator_path = "C:\\Data\\Locators\\Atlanta"
sddraft_file = "C:\\Output\\Atlanta.sddraft"
sd_file = "C:\\Output\\Atlanta.sd"
service_name = "Atlanta"
summary = "Address locator for the city of Atlanta"
tags = "address, locator, geocode"
gis_server_connection_file = "C:\\Data\\server_connection"

# Create the sd draft file
analyze_messages = arcpy.CreateGeocodeSDDraft(locator_path, sddraft_file, service_name,
                           connection_file_path=gis_server_connection_file,
                           summary=summary, tags=tags, max_result_size=20,
                           max_batch_size=500, suggested_batch_size=150)

# Stage and upload the service if the sddraft analysis did not contain errors
if analyze_messages['errors'] == {}:
    try:
        # Execute StageService to convert sddraft file to a service definition 
        # (sd) file 
        arcpy.server.StageService(sddraft_file, sd_file)

        # Execute UploadServiceDefinition to publish the service definition 
        # file as a service
        arcpy.server.UploadServiceDefinition(sd_file, gis_server_connection_file)
        print("The geocode service was successfully published")
    except arcpy.ExecuteError:
        print("An error occurred")
        print(arcpy.GetMessages(2))
else: 
    # If the sddraft analysis contained errors, display them
    print("Error were returned when creating service definition draft")
    pprint.pprint(analyze_messages['errors'], indent=2)

Related topics