anchor.diff:            if colors.outlineColor<>0 then
             begin
               aBitmap.Canvas.Stroke.Color := colors.outlineColor;
  -            //aBitmap.Canvas.StrokeThickness := 1; // todo: default width?
               aBitmap.Canvas.Stroke.Thickness := 1; // todo: default width?
               aBitmap.Canvas.DrawEllipse(rect, 1);
             end;
  
positive.code:     fCurrentSlice.fTileLock.BeginRead;
      fRefSlice.fTileLock.BeginRead;
      try
        bitmapFileName := aCacheFolder+TimeFolder+aFileName;
        // try cache first
        if (aCacheFolder<>'') and FileExists(bitmapFileName) then
        begin
          try
            fileStream := TFileStream.Create(bitmapFileName, fmOpenRead+fmShareDenyWrite);
            try
              aStream.CopyFrom(fileStream, fileStream.Size);
            finally
              fileStream.Free;
            end;
            Result := HSC_SUCCESS_OK;
            status := gtsOk;
          except
            on E: Exception do
            begin
              Log.WriteLn('Exception loading tile bitmap '+TimeFolder+aFileName+': '+E.Message, llError);
              //Result := HSC_ERROR_NOT_FOUND; // sentinel
            end;
          end;
        end
        else
        begin
          try
            bitmap := FMX.Graphics.TBitmap.Create(aWidthPixels, aHeightPixels);
            try
              status := GenerateTileCalc(aExtent, bitmap, (aExtent.XMax-aExtent.XMin)/bitmap.Width, (aExtent.YMax-aExtent.YMin)/bitmap.Height);
              if status=gtsOk then
              begin
                if aCacheFolder<>'' then
                begin
                  // save tile bitmap
                  try
                    ForceDirectories(ExtractFileDir(bitmapFileName));
                    fileStream := TFileStream.Create(bitmapFileName, fmCreate+fmShareExclusive);
                    try
                      bitmap.SaveToStream(fileStream);
                    finally
                      fileStream.Free;
                    end;
                  except
                    on E: Exception do
                    begin
                      Log.WriteLn('Exception saving tile bitmap '+TimeFolder+aFileName+': '+E.Message, llError);
                    end;
                  end;
                end;
                // return stream
                bitmap.SaveToStream(aStream);
                Result := HSC_SUCCESS_CREATED;
                status := gtsOk;
              end
              else
              begin
                if status=gtsFailed
                then Log.WriteLn('could not calculate tile '+TimeFolder+aFileName, llError)
                else Log.WriteLn('retry on calculating tile '+TimeFolder+aFileName, llWarning);
              end;
            finally
              bitmap.Free;
            end;
          except
            on E: Exception do
            begin
              Log.WriteLn('Exception creating tile bitmap '+TimeFolder+aFileName+': '+E.Message, llError);
            end;
          end;
        end;
      finally
        fTileLock.EndRead;
        fCurrentSlice.fTileLock.EndRead;
        fRefSlice.fTileLock.EndRead;
      end;
    until status<>gtsRestart;
  end;
  
  function TDiffSlice.getDataValueAtPoint(const aLat, aLon: Double; var aValue: Double): TGenerateTileStatus;
  
negative.code:                 end;
                end;
              end;
            end;
          end;
          // todo: process ref geometries not in current? or just skip..
  