@SdkInternalApi
    final BatchUpdateDevicePositionResult executeBatchUpdateDevicePosition(BatchUpdateDevicePositionRequest batchUpdateDevicePositionRequest) {

        ExecutionContext executionContext = createExecutionContext(batchUpdateDevicePositionRequest);
        AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
        awsRequestMetrics.startEvent(Field.ClientExecuteTime);
        Request<BatchUpdateDevicePositionRequest> request = null;
        Response<BatchUpdateDevicePositionResult> response = null;

        try {
            awsRequestMetrics.startEvent(Field.RequestMarshallTime);
            try {
                request = new BatchUpdateDevicePositionRequestProtocolMarshaller(protocolFactory).marshall(super
                        .beforeMarshalling(batchUpdateDevicePositionRequest));
                // Binds the request metrics to the current request.
                request.setAWSRequestMetrics(awsRequestMetrics);
                request.addHandlerContext(HandlerContextKey.CLIENT_ENDPOINT, endpoint);
                request.addHandlerContext(HandlerContextKey.ENDPOINT_OVERRIDDEN, isEndpointOverridden());
                request.addHandlerContext(HandlerContextKey.SIGNING_REGION, getSigningRegion());
                request.addHandlerContext(HandlerContextKey.SERVICE_ID, "Location");
                request.addHandlerContext(HandlerContextKey.OPERATION_NAME, "BatchUpdateDevicePosition");
                request.addHandlerContext(HandlerContextKey.ADVANCED_CONFIG, advancedConfig);

            } finally {
                awsRequestMetrics.endEvent(Field.RequestMarshallTime);
            }

            URI endpointTraitHost = null;
            if (!clientConfiguration.isDisableHostPrefixInjection()) {

                String hostPrefix = "tracking.";
                String resolvedHostPrefix = String.format("tracking.");

                endpointTraitHost = UriResourcePathUtils.updateUriHost(endpoint, resolvedHostPrefix);
            }

            HttpResponseHandler<AmazonWebServiceResponse<BatchUpdateDevicePositionResult>> responseHandler = protocolFactory.createResponseHandler(
                    new JsonOperationMetadata().withPayloadJson(true).withHasStreamingSuccessResponse(false),
                    new BatchUpdateDevicePositionResultJsonUnmarshaller());
            response = invoke(request, responseHandler, executionContext, null, endpointTraitHost);

            return response.getAwsResponse();

        } finally {

            endClientExecution(awsRequestMetrics, request, response);
        }
    }
<p>
Uploads position update data for one or more devices to a tracker resource (up to 10 devices per batch). Amazon
Location uses the data when it reports the last known device position and position history. Amazon Location
retains location data for 30 days.
</p>
<note>
<p>
Position updates are handled based on the <code>PositionFiltering</code> property of the tracker. When
<code>PositionFiltering</code> is set to <code>TimeBased</code>, updates are evaluated against linked geofence
collections, and location data is stored at a maximum of one position per 30 second interval. If your update
frequency is more often than every 30 seconds, only one update per 30 seconds is stored for each unique device
ID.
</p>
<p>
When <code>PositionFiltering</code> is set to <code>DistanceBased</code> filtering, location data is stored and
evaluated against linked geofence collections only if the device has moved more than 30 m (98.4 ft).
</p>
<p>
When <code>PositionFiltering</code> is set to <code>AccuracyBased</code> filtering, location data is stored and
evaluated against linked geofence collections only if the device has moved more than the measured accuracy. For
example, if two consecutive updates from a device have a horizontal accuracy of 5 m and 10 m, the second update
is neither stored or evaluated if the device has moved less than 15 m. If <code>PositionFiltering</code> is set
to <code>AccuracyBased</code> filtering, Amazon Location uses the default value <code>{ "Horizontal": 0}</code>
when accuracy is not provided on a <code>DevicePositionUpdate</code>.
</p>
</note>

@param batchUpdateDevicePositionRequest
@return Result of the BatchUpdateDevicePosition operation returned by the service.
@throws InternalServerException
        The request has failed to process because of an unknown server error, exception, or failure.
@throws ResourceNotFoundException
        The resource that you've entered was not found in your AWS account.
@throws AccessDeniedException
        The request was denied because of insufficient access or permissions. Check with an administrator to
        verify your permissions.
@throws ValidationException
        The input failed to meet the constraints specified by the AWS service.
@throws ThrottlingException
        The request was denied because of request throttling.
@sample AmazonLocation.BatchUpdateDevicePosition
@see <a href="http://docs.aws.amazon.com/goto/WebAPI/location-2020-11-19/BatchUpdateDevicePosition"
     target="_top">AWS API Documentation</a>
aws-java-sdk-location/src/main/java/com/amazonaws/services/location/AmazonLocationClient.java