in SupportingScripts/Runtime/Scripts/MapRenderer/TextureTileLayers/HttpTextureTileLayer.cs [91:163]
protected string FormatUrl(TileId tileId)
{
var tilePosition = tileId.ToTilePosition();
var urlStringBuilder = new System.Text.StringBuilder(_urlFormatString.Length);
var startIndex = 0;
var lastEndIndex = 0;
while ((startIndex = _urlFormatString.IndexOf('{', startIndex)) >= 0)
{
urlStringBuilder.Append(_urlFormatString, lastEndIndex, startIndex - lastEndIndex);
var placeholderStartIndex = startIndex + 1;
var endIndex = _urlFormatString.IndexOf('}', placeholderStartIndex);
var placeholderCount = endIndex - startIndex - 1;
if (endIndex == -1)
{
// Couldn't find a closing '}'. Keep it in the resulting URL, but it's probably malformed already.
lastEndIndex = startIndex;
break;
}
if (placeholderCount > 0)
{
if (string.Compare(_urlFormatString, placeholderStartIndex, "x", 0, placeholderCount, StringComparison.OrdinalIgnoreCase) == 0)
{
urlStringBuilder.Append(tilePosition.X.ToString(CultureInfo.InvariantCulture));
}
else if (string.Compare(_urlFormatString, placeholderStartIndex, "y", 0, placeholderCount, StringComparison.OrdinalIgnoreCase) == 0)
{
urlStringBuilder.Append(tilePosition.Y.ToString(CultureInfo.InvariantCulture));
}
else if (string.Compare(_urlFormatString, placeholderStartIndex, "z", 0, placeholderCount, StringComparison.OrdinalIgnoreCase) == 0 ||
string.Compare(_urlFormatString, placeholderStartIndex, "zoom", 0, placeholderCount, StringComparison.OrdinalIgnoreCase) == 0 ||
string.Compare(_urlFormatString, placeholderStartIndex, "zoomlevel", 0, placeholderCount, StringComparison.OrdinalIgnoreCase) == 0)
{
urlStringBuilder.Append(tilePosition.LevelOfDetail.Value.ToString(CultureInfo.InvariantCulture));
}
else if (string.Compare(_urlFormatString, placeholderStartIndex, "quadkey", 0, placeholderCount, StringComparison.OrdinalIgnoreCase) == 0)
{
urlStringBuilder.Append(tileId.ToKey());
}
else if (string.Compare(_urlFormatString, placeholderStartIndex, "subdomain", 0, placeholderCount, StringComparison.OrdinalIgnoreCase) == 0)
{
if (_subdomains != null && _subdomains.Count > 0)
{
var subdomain = _subdomains[_subdomainCounter % _subdomains.Count];
_subdomainCounter++;
urlStringBuilder.Append(subdomain);
}
else
{
if (!_hasWarnedMissingSubdomain)
{
_hasWarnedMissingSubdomain = true;
Debug.LogWarning("URL uses a {subdomain} format specified but no subdomains were provided: " + _urlFormatString);
}
return null;
}
}
}
startIndex = endIndex + 1;
lastEndIndex = startIndex;
}
urlStringBuilder.Append(_urlFormatString, lastEndIndex, _urlFormatString.Length - lastEndIndex);
var formattedUrl = urlStringBuilder.ToString();
return formattedUrl;
}